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()); }
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(); } }
/* ===================== 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; }