コード例 #1
0
long	MissionBriefingScreen::getMissionTGA(const char* missionName)
{
	if (!missionName)
		return 0;

	// do I need to open the file?  I guess so, if this proves too slow,
	// it could be done when a stage is completed
	FullPathFileName path;
	path.init(missionPath, missionName, ".pak");

	if ( 1 == fileExists( path ) )
	{

		// big hack here for some reason we can open files while they're being transferred.
		HANDLE hFile = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); // MCHD TODO: What is this all about?

		if ( hFile == INVALID_HANDLE_VALUE )
			return 0;

		CloseHandle( hFile );
	}

	// read the tga out of the pak file
	PacketFile file;
	if ( NO_ERR == file.open( path ) ) // in case file has just been created
	{
		if ( file.getNumPackets() > 3 )
		{
	
			file.seekPacket(3);
			long size = file.getPacketSize( );
			BYTE* mem = new BYTE[size];

			file.readPacket( 3, mem );
			
			TGAFileHeader* pHeader = (TGAFileHeader*)mem;
			long bmpWidth = pHeader->width;
			long bmpHeight = pHeader->height;
			flipTopToBottom( (BYTE*)(pHeader + 1), pHeader->pixel_depth, bmpWidth, bmpHeight );
			
			// set up the texture
			long tmpMapTextureHandle = mcTextureManager->textureFromMemory( (unsigned long*)(pHeader+1), gos_Texture_Solid, 0, bmpWidth );

			delete mem;

			return tmpMapTextureHandle;
		}
	}

	return 0;


}
コード例 #2
0
int32_t MissionBriefingScreen::getMissionTGA(PCSTR missionName)
{
	if (!missionName)
		return 0;
	// do I need to open the file?  I guess so, if this proves too slow,
	// it could be done when a stage is completed
	FullPathFileName path;
	path.init(missionPath, missionName, ".pak");
	if (1 == fileExists(path))
	{
		// big hack here for some reason we can open files while they're being
		// transferred.
		HANDLE hFile  = CreateFile(path, GENERIC_READ, 0, nullptr, OPEN_EXISTING, 0, 0);
		int32_t error = GetLastError();
		if (hFile == INVALID_HANDLE_VALUE)
			return 0;
		CloseHandle(hFile);
	}
	// read the tga out of the pak file
	PacketFile file;
	if (NO_ERROR == file.open(path)) // in case file has just been created
	{
		if (file.getNumPackets() > 3)
		{
			file.seekPacket(3);
			int32_t size = file.getPacketSize();
			puint8_t mem = new uint8_t[size];
			file.readPacket(3, mem);
			TGAFileHeader* pHeader = (TGAFileHeader*)mem;
			int32_t bmpWidth	   = pHeader->width;
			int32_t bmpHeight	  = pHeader->height;
			flipTopToBottom((puint8_t)(pHeader + 1), pHeader->pixel_depth, bmpWidth, bmpHeight);
			// set up the texture
			int32_t tmpMapTextureHandle = mcTextureManager->textureFromMemory(
				(uint32_t*)(pHeader + 1), gos_Texture_Solid, 0, bmpWidth);
			delete mem;
			return tmpMapTextureHandle;
		}
	}
	return 0;
}