⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gosimagepool.cpp

📁 机甲指挥官2源代码
💻 CPP
字号:
//===========================================================================//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//

#include "MLRHeaders.hpp"

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
GOSImagePool::GOSImagePool() :
	imageHash(
		4099,
		NULL,
		true
	)
{
	Verify(gos_GetCurrentHeap() == Heap);
	texturePath = "";
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
GOSImagePool::~GOSImagePool()
{
	HashIteratorOf<GOSImage*, MString> images(&imageHash);
	images.DeletePlugs();
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void GOSImagePool::UnLoadImages (void)
{
	HashIteratorOf<GOSImage*, MString> images(&imageHash);
	GOSImage *image = images.ReadAndNext();
	while (image)
	{
		RemoveImage(image);
		image = images.ReadAndNext();
	}
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
GOSImage*
	GOSImagePool::GetImage(const char* image_name)
{
	Check_Object(this);

	MString imageName = image_name;
	Verify(imageName.GetLength() > 0);

	//
	//---------------------------
	// Get the image for the name
	//---------------------------
	//
	GOSImage *image;

	if ((image = imageHash.Find(imageName)) == NULL)
	{
		gos_PushCurrentHeap(Heap);
		image = new GOSImage(image_name);
		Register_Object(image);
		gos_PopCurrentHeap();
		imageHash.AddValue(image, image->imageName);
	}
	Check_Object(image);

	return image;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
GOSImage*
	GOSImagePool::GetImage(const char *image_name, gos_TextureFormat format, int size, gos_TextureHints hints)
{
	Check_Object(this);

	MString imageName = image_name;
	Verify(imageName.GetLength() > 0);

	//
	//---------------------------
	// Get the image for the name
	//---------------------------
	//
	GOSImage *image;

	if ((image = imageHash.Find(imageName)) == NULL)
	{
		gos_PushCurrentHeap(Heap);
		image = new GOSImage(image_name, hints);
		Register_Object(image);
		gos_PopCurrentHeap();
		imageHash.AddValue(image, image->imageName);
	}
#ifdef _ARMOR
	else
	{
	}
#endif

	Check_Object(image);

	return image;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	GOSImagePool::RemoveImage(GOSImage *image)
{
	Check_Object(this);
	Unregister_Object(image);
	delete image;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
TGAFilePool::TGAFilePool(const char* path)
{
	texturePath = path;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
bool
	TGAFilePool::LoadImage(GOSImage *image, int hint)
{
	if( (image->flags & GOSImage::Loaded) != 0)
		return true;

	MString file_name = texturePath;
	file_name += image->imageName;
	file_name += ".tga";

	char *fFileName = file_name;
	if (((fFileName[0] != 'F') || (fFileName[0] != 'f')) &&
		((fFileName[1] != 'X') || (fFileName[1] != 'x')))
		hint |= gosHint_DisableMipmap;

	DWORD nodeIndex = mcTextureManager->loadTexture(file_name,gos_Texture_Detect, hint);

	image->SetHandle(nodeIndex);
	
	image->flags |= GOSImage::Loaded;

	return ((image->flags & GOSImage::Loaded) != 0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -