コード例 #1
0
ファイル: MeshAsset.cpp プロジェクト: BenKZSSS/ToyGE
	void MeshAsset::Load()
	{
		if (_path.size() == 0)
		{
			ToyGE_LOG(LT_ERROR, "Try to load mesh with empty path!");
			return;
		}

		auto extension = _path.substr(_path.rfind('.'));
		if (extension != MeshAsset::GetExtension())
		{
			if (!AssimpLoadMesh(shared_from_this()->Cast<MeshAsset>(), false, false))
				return;
		}
		else
		{
			auto file = Global::GetPlatform()->CreatePlatformFile(GetLoadPath(), FILE_OPEN_READ);
			if (!file->IsValid())
			{
				ToyGE_LOG(LT_WARNING, "Cannot open mesh file when reading! %s", GetLoadPath().c_str());
				return;
			}
			auto reader = std::make_shared<FileReader>(file);

			_data.resize(reader->Read<int32_t>());
			for (auto & element : _data)
			{
				// vertex data
				element = std::make_shared<MeshElement>();

				// vertex slots
				element->vertexData.resize(reader->Read<int32_t>());
				for (auto & vertexSlot : element->vertexData)
				{
					vertexSlot = std::make_shared<MeshVertexSlotData>();
					vertexSlot->bufferSize = reader->Read<int32_t>();
					vertexSlot->rawBuffer = MakeBufferedDataShared(vertexSlot->bufferSize);
					reader->ReadBytes(vertexSlot->rawBuffer.get(), vertexSlot->bufferSize);
					vertexSlot->vertexDesc.bytesSize = reader->Read<int32_t>();
					vertexSlot->vertexDesc.elementsDesc.resize(reader->Read<int32_t>());
					reader->ReadBytes(&vertexSlot->vertexDesc.elementsDesc[0], sizeof(MeshVertexElementDesc) * vertexSlot->vertexDesc.elementsDesc.size());
				}

				// indices
				element->indices.resize(reader->Read<int32_t>());
				reader->ReadBytes(&element->indices[0], sizeof(uint32_t) * element->indices.size());

				// material
				String matRelativePath;
				reader->ReadString(matRelativePath);
				if (matRelativePath.size() > 0)
					element->material = Asset::Find<MaterialAsset>( IdenticalPath(GetPath() + "/../" + matRelativePath) );
			}
		}
		_bLoaded = true;
		_bDirty = false;

		ToyGE_LOG(LT_INFO, "Mesh loaded! %s", GetLoadPath().c_str());
	}
コード例 #2
0
void CConfigAppearance::OnBnClickedButtonAppearanceLoad()		// // // 050B
{
	if (auto path = GetLoadPath("Theme.txt", "", IDS_FILTER_TXT, L"*.txt")) {
		ImportSettings(*path);
		static_cast<CComboBox*>(GetDlgItem(IDC_FONT))->SelectString(0, m_strFont.data());
		static_cast<CComboBox*>(GetDlgItem(IDC_FONT_SIZE))->SelectString(0, FormattedW(L"%i", m_iFontSize));
		RedrawWindow();
		SetModified();
	}
}
コード例 #3
0
ファイル: replay.c プロジェクト: dimovich/netrix
/*
=====================
	playDemo
=====================
*/
BOOL playDemo() {
	repHeader_t repHeader = {0};
	HANDLE hFile = INVALID_HANDLE_VALUE;
	TCHAR szRepPath[MAX_PATH];
	DWORD crc;
	DWORD tmp;
	BYTE buff[BLOCK_SIZE];
	BOOL bRes;
	int mapID;
	int i;
	
	__try {
		bRes = FALSE;
		
		//get replay file path
		//
		if( !GetLoadPath( k_system.hwnd, TEXT( "(*.rep)\0*.rep" ), TEXT( "*.rep" ), szRepPath ) ) {
			__leave;
		}

		//open replay file
		//
		hFile = N_FOpenR( szRepPath );
		if( hFile == INVALID_HANDLE_VALUE ) {
			__leave;
		}
		
		//read header
		//
		N_FRead( hFile, &repHeader, sizeof(repHeader) );
		
		//check header
		//
		if( repHeader.header != REPLAYHEADER ) {
			__leave;
		}
		
		//check map availability
		//
		if( (repHeader.mapCRC != 0) && !seeMapID( repHeader.mapCRC, NULL ) ) {
			__leave;
		}
		
		//check CRC
		//
		crcInit( &crc );
		while( ReadFile( hFile, buff, BLOCK_SIZE, &tmp, NULL ) ) {
			if( tmp == 0 ) {
				break;
			}
			crcUpdate( &crc, buff, tmp );
		}
		crcFinish( &crc );
		if( repHeader.crc != crc ) {
			__leave;
		}

		//restore file position
		//
		N_FSeek( hFile, sizeof(repHeader), FILE_BEGIN );
		
		//end all running games
		//
		endAllGames();

		//decompress replay data
		//		
		if( beginDecompress( szRepPath, sizeof(repHeader), gszTmpPath, NULL ) ) {
		
			ghRepFile = N_FOpenR( gszTmpPath );
			if( ghRepFile == INVALID_HANDLE_VALUE ) {
				__leave;
			}
		
			//read figure data
			//
			N_FRead( ghRepFile, &k_replayFigSize, sizeof(k_replayFigSize) );
			k_replayFig = N_Malloc( k_replayFigSize*sizeof(figure_t) );
			for( i=0; i<k_replayFigSize; i++ ) {
				N_FRead( ghRepFile, &(k_replayFig[i].type), sizeof(k_replayFig[i].type) );
				N_FRead( ghRepFile, &(k_replayFig[i].state), sizeof(k_replayFig[i].state) );
			}
			k_replayFigID = 0;
			
			bRes = TRUE;
		}
	}
	
	__finally {
		
		if( hFile != INVALID_HANDLE_VALUE ) {
			N_FClose( hFile );
		}
	
		//check if failed
		//
		if( bRes == FALSE ) {
			if( k_replayFig ) {
				N_Free( k_replayFig );
				k_replayFig = NULL;
				k_replayFigSize = 0;
			}
		}
	}
	
	//play demo
	//
	if( bRes ) {

		k_system.flags |= SF_DEMOPLAY;
		
		//find map
		//
		if( repHeader.mapCRC == 0 ) {
			k_system.idMap = -1;
		}
		else {
			if( seeMapID( repHeader.mapCRC, &mapID ) ) {
				k_system.idMap = mapID;
			}
			else {
				return FALSE;
			}
		}

		//start the game
		//
		switch( repHeader.gametype ) {
			case GSINGLE:
				singleGameStart();
				break;

			case GVS:
				vsGameStart();
				break;

			default:
				return FALSE;
		}
		
		//schedule frame
		//
		N_FRead( ghRepFile, &gFrame, sizeof(gFrame) );
		pushTimeSlice( TIME_REPLAY_FRAME, gFrame.time, gFrame.time, NULL, REPLAY, FALSE );
		
		N_Message( TEXT( "Replaying: %s" ), szRepPath );
	}
	
	
	return bRes;
}