Game::GameLocation* ResourceManager::gameLocation(unsigned int number) { if (_gameLocations.find(number) != _gameLocations.end()) { return _gameLocations.at(number); } std::istream stream(datFileItem("data/maps.txt")); Ini::Parser iniParser(stream); auto ini = iniParser.parse(); std::stringstream ss; ss << "map " << std::setw(3) << std::setfill('0') << number; auto section = ini->section(ss.str()); if (!section) return 0; Game::GameLocation* location = new Game::GameLocation(); for (auto property : *section.get()) { std::string name = property.first; Logger::critical() << name << std::endl; if (name == "lookup_name") { location->setName(property.second.value()); } else if (name == "map_name") { location->setFilename("maps/" + property.second.value()+ ".map"); } else if (name == "music") { location->setMusic(property.second.value()); } else if (name == "pipboy_active") { location->setPipboy(property.second.boolValue()); } else if (name == "saved") { location->setSaveable(property.second.boolValue()); } } _gameLocations.insert(std::make_pair(number, location)); return _gameLocations.at(number); }
//================================================================================================================ LRESULT ToolWindow2DEditorTab::Command(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (!IsEnabled()) return true; //m_EditModeSubPicker.UpdateCommand(wParam, lParam); bool gd_created = false; switch (LOWORD(wParam)) { case EEditorTypeID::eEditorTabCreateGameDirectory: { if (m_GameNameTextbox.GetText() == "") { ZShadeMessageCenter::MsgBoxOK(hwnd, "Must have a game name !!!", "Create Game Directory"); } else { //Full path of game directory string username = CGlobal::GrabUserName(); BetterString gameFolder = "C:\\Users\\"; gameFolder += username; gameFolder += "\\AppData\\Roaming\\"; gameFolder += m_GameNameTextbox.GetText(); m_gameDirectory = CGlobal::CreateGD2D(gameFolder, m_EngineOptions->m_GameType2D); // Everything will be loaded below if this flag is true gd_created = true; } } break; case EEditorTypeID::eEditorTabOpenGameDirectory: { BROWSEINFO bi = { 0 }; bi.lpszTitle = "Browse for Folder"; bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS; LPITEMIDLIST pidl = SHBrowseForFolder(&bi); bool pathFound = false; if (pidl != NULL) { //TCHAR tszPath[MAX_PATH] = _T("\0"); TCHAR tszPath[MAX_PATH]; memset(tszPath, 0, MAX_PATH); if (SHGetPathFromIDList(pidl, tszPath) == TRUE) { m_GameNameTextbox.SetText(tszPath); pathFound = true; } // — Free pidl CoTaskMemFree(pidl); } if (pathFound) { m_gameDirectory = CGlobal::CreateGD2D(m_GameNameTextbox.GetText(), m_EngineOptions->m_GameType2D); // Everything will be loaded below if this flag is true gd_created = true; } } break; case EEditorTypeID::eEditorTabEditModeTile: { bTileMode = true; bSpriteMode = false; bMusicMode = false; bHardnessMode = false; UpdateEditSubModeTypeVisible(); UpdateEditSubModeTypeEnable(); } break; case EEditorTypeID::eEditorTabEditModeSprite: { bTileMode = false; bSpriteMode = true; bMusicMode = false; bHardnessMode = false; UpdateEditSubModeTypeVisible(); UpdateEditSubModeTypeEnable(); } break; case EEditorTypeID::eEditorTabEditModeMusic: { bTileMode = false; bSpriteMode = false; bMusicMode = true; bHardnessMode = false; UpdateEditSubModeTypeVisible(); UpdateEditSubModeTypeEnable(); DisableEditSubModeType(); } break; case EEditorTypeID::eEditorTabEditModeHardness: { bTileMode = false; bSpriteMode = false; bMusicMode = false; bHardnessMode = true; UpdateEditSubModeTypeVisible(); UpdateEditSubModeTypeEnable(); } break; case EEditorTypeID::eEditorTabPlay: { // Get a new handle to the rendering m_Window for the new game environment HWND oldWindow = m_EngineOptions->hwnd; string oldWindowName = EnvironmentFactory::Instance()->ActiveEnvironmentName(); m_EngineOptions->m_inEditor = false; //m_EngineOptions->hwnd = iRenderWin->GetHwnd(); ZShadeINIParser iniParser("ZShadeSandbox.ini", true); string env3DType = iniParser.GetString("Editor", "Env3D"); string game_folder = iniParser.GetString("Editor", "GameFolder"); // Have the option of playing the current map or the current game const int result = ZShadeMessageCenter::MsgBoxYesNo(NULL, "Would you like to play the current map?", "Play Game"); switch (result) { case IDYES:// Play current map { //// Launch the current map for testing //EnvironmentFactory::Instance()->CreateEnvironment("MapTestEnv", m_EngineOptions, "BaseGameWindow", "RenderGameWindow", true); //EnvironmentFactory::Instance()->ActiveEnvironmentName() = "MapTestEnv"; //string mn = m_worldTab->ActiveMapName(); //string wn = m_worldTab->ActiveWorldName(); //// Load the world and set the map for testing ////Environment2DMapHelper::LoadWorld(m_ActiveWorldName, false, 0); //Environment2DMapHelper::SetActiveRenderedMap(wn, mn); //EnvironmentFactory::Instance()->SelectEnvironment("MapTestEnv")->Run(); //// Get the handle to the original m_Window back //// when the game environment returns from the run loop command //m_EngineOptions->hwnd = oldWindow; //EnvironmentFactory::Instance()->ActiveEnvironmentName() = oldWindowName; //m_EngineOptions->m_inEditor = true; } break; case IDNO:// Start the entire game { // Launch a new game environment EnvironmentFactory::Instance()->CreateEnvironment("PlayTestEnv", m_EngineOptions, "BaseGameWindow", "RenderGameWindow", true); EnvironmentFactory::Instance()->ActiveEnvironmentName() = "PlayTestEnv"; EnvironmentFactory::Instance()->SelectEnvironment("PlayTestEnv")->Run(); // Get the handle to the original m_Window back // when the game environment returns from the run loop command m_EngineOptions->hwnd = oldWindow; EnvironmentFactory::Instance()->ActiveEnvironmentName() = oldWindowName; m_EngineOptions->m_inEditor = true; } break; } } break; case EEditorTypeID::eEditorTabMenuButton: { // Hide the map tool window and go to the menu tool window bHideWindow = true; bEditorTypeMenu = true; bEditorTypeHUD = false; bEditorTypeMap = false; } break; case EEditorTypeID::eEditorTabHUDButton: { // Hide the map tool window and go to the hud tool window bHideWindow = true; bEditorTypeHUD = true; bEditorTypeMenu = false; bEditorTypeMap = false; } break; } if (gd_created) { m_EngineOptions->m_GD2D = m_gameDirectory; m_mapEditorSystem2D->SetGameDirectory(m_gameDirectory); m_GameDirectoryCreated = true; m_EngineOptions->m_inEditor = true; UpdateEditSubModeTypeVisible(); UpdateEditSubModeTypeEnable(); // Load the stamp tools and display sprites m_mapEditorSystem2D->LoadRequiredSprites(); EnableTabItems(); // Read the Game.ini file ZShadeINIParser iniParser(m_gameDirectory->m_game_ini_path, false); string gameType = iniParser.GetString("GAME", "GameType"); SetGameTypeRC(gameType); // Update the ini file with the game folder ZShadeINIParser iniSandboxParser("ZShadeSandbox.ini", true); iniSandboxParser.WriteString("Editor", "GameFolder", m_GameNameTextbox.GetText()); //AudioSystem::NewInstance(m_gameDirectory, m_Window->GetHwnd()); //Scripting::NewInstance(m_mapEditorSystem2D->D3DSystem(), m_gameDirectory); } return true; }