Changeset View
Changeset View
Standalone View
Standalone View
source/ps/World.cpp
Show All 16 Lines | |||||
#include "precompiled.h" | #include "precompiled.h" | ||||
#include "graphics/GameView.h" | #include "graphics/GameView.h" | ||||
#include "graphics/LightEnv.h" | #include "graphics/LightEnv.h" | ||||
#include "graphics/MapReader.h" | #include "graphics/MapReader.h" | ||||
#include "graphics/MapWriter.h" | #include "graphics/MapWriter.h" | ||||
#include "graphics/Terrain.h" | #include "graphics/Terrain.h" | ||||
#include "graphics/Terrain.h" | |||||
#include "graphics/UnitManager.h" | #include "graphics/UnitManager.h" | ||||
#include "graphics/Water.h" | |||||
#include "lib/timer.h" | #include "lib/timer.h" | ||||
#include "ps/CLogger.h" | #include "ps/CLogger.h" | ||||
#include "ps/CStr.h" | #include "ps/CStr.h" | ||||
#include "ps/Errors.h" | #include "ps/Errors.h" | ||||
#include "ps/Game.h" | #include "ps/Game.h" | ||||
#include "ps/Loader.h" | #include "ps/Loader.h" | ||||
#include "ps/LoaderThunks.h" | #include "ps/LoaderThunks.h" | ||||
#include "ps/World.h" | #include "ps/World.h" | ||||
Show All 12 Lines | |||||
/** | /** | ||||
* Constructor. | * Constructor. | ||||
* | * | ||||
* @param pGame CGame * pGame pointer to the container game object. | * @param pGame CGame * pGame pointer to the container game object. | ||||
**/ | **/ | ||||
CWorld::CWorld(CGame *pGame): | CWorld::CWorld(CGame *pGame): | ||||
m_pGame(pGame), | m_pGame(pGame), | ||||
m_Terrain(new CTerrain()), | m_Terrain(new CTerrain()), | ||||
m_Water(new CWater(*m_Terrain)), | |||||
Stan: Could they be unique_ptr? | |||||
Done Inline ActionsThey should actually, but I think I'll leave that cleanup for another diff. wraitii: They should actually, but I think I'll leave that cleanup for another diff. | |||||
m_UnitManager(new CUnitManager()), | m_UnitManager(new CUnitManager()), | ||||
m_MapReader(new CMapReader) | m_MapReader(new CMapReader) | ||||
{ | { | ||||
} | } | ||||
/** | /** | ||||
* Initializes the game world with the attributes provided. | * Initializes the game world with the attributes provided. | ||||
**/ | **/ | ||||
void CWorld::RegisterInit(const CStrW& mapFile, const ScriptContext& cx, JS::HandleValue settings, int playerID) | void CWorld::RegisterInit(const CStrW& mapFile, const ScriptContext& cx, JS::HandleValue settings, int playerID) | ||||
{ | { | ||||
ENSURE(m_pGame); | |||||
// Load the map, if one was specified | // Load the map, if one was specified | ||||
if (mapFile.length()) | if (mapFile.length()) | ||||
{ | { | ||||
VfsPath mapfilename = VfsPath(mapFile).ChangeExtension(L".pmp"); | VfsPath mapfilename = VfsPath(mapFile).ChangeExtension(L".pmp"); | ||||
try | try | ||||
{ | { | ||||
CTriggerManager* pTriggerManager = NULL; | CTriggerManager* pTriggerManager = NULL; | ||||
m_MapReader->LoadMap(mapfilename, cx, settings, m_Terrain, | m_MapReader->LoadMap(mapfilename, cx, settings, m_Terrain, m_Water, | ||||
CRenderer::IsInitialised() ? &g_Renderer.GetSceneRenderer().GetWaterManager() : NULL, | |||||
CRenderer::IsInitialised() ? &g_Renderer.GetSceneRenderer().GetSkyManager() : NULL, | CRenderer::IsInitialised() ? &g_Renderer.GetSceneRenderer().GetSkyManager() : NULL, | ||||
&g_LightEnv, m_pGame->GetView(), | &g_LightEnv, m_pGame->GetView(), | ||||
m_pGame->GetView() ? m_pGame->GetView()->GetCinema() : NULL, | m_pGame->GetView() ? m_pGame->GetView()->GetCinema() : NULL, | ||||
pTriggerManager, CRenderer::IsInitialised() ? &g_Renderer.GetPostprocManager() : NULL, | pTriggerManager, CRenderer::IsInitialised() ? &g_Renderer.GetPostprocManager() : NULL, | ||||
m_pGame->GetSimulation2(), &m_pGame->GetSimulation2()->GetSimContext(), playerID, false); | m_pGame->GetSimulation2(), &m_pGame->GetSimulation2()->GetSimContext(), playerID, false); | ||||
// fails immediately, or registers for delay loading | // fails immediately, or registers for delay loading | ||||
RegMemFun(this, &CWorld::DeleteMapReader, L"CWorld::DeleteMapReader", 5); | RegMemFun(this, &CWorld::DeleteMapReader, L"CWorld::DeleteMapReader", 5); | ||||
} | } | ||||
catch (PSERROR_File& err) | catch (PSERROR_File& err) | ||||
{ | { | ||||
SAFE_DELETE(m_MapReader); | SAFE_DELETE(m_MapReader); | ||||
LOGERROR("Failed to load map %s: %s", mapfilename.string8(), err.what()); | LOGERROR("Failed to load map %s: %s", mapfilename.string8(), err.what()); | ||||
throw PSERROR_Game_World_MapLoadFailed("Failed to load map.\nCheck application log for details."); | throw PSERROR_Game_World_MapLoadFailed("Failed to load map.\nCheck application log for details."); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
void CWorld::RegisterInitRMS(const CStrW& scriptFile, const ScriptContext& cx, JS::HandleValue settings, int playerID) | void CWorld::RegisterInitRMS(const CStrW& scriptFile, const ScriptContext& cx, JS::HandleValue settings, int playerID) | ||||
{ | { | ||||
ENSURE(m_pGame); | |||||
// If scriptFile is empty, a blank map will be generated using settings (no RMS run) | // If scriptFile is empty, a blank map will be generated using settings (no RMS run) | ||||
CTriggerManager* pTriggerManager = NULL; | CTriggerManager* pTriggerManager = NULL; | ||||
m_MapReader->LoadRandomMap(scriptFile, cx, settings, m_Terrain, | m_MapReader->LoadRandomMap(scriptFile, cx, settings, m_Terrain, m_Water, | ||||
CRenderer::IsInitialised() ? &g_Renderer.GetSceneRenderer().GetWaterManager() : NULL, | |||||
CRenderer::IsInitialised() ? &g_Renderer.GetSceneRenderer().GetSkyManager() : NULL, | CRenderer::IsInitialised() ? &g_Renderer.GetSceneRenderer().GetSkyManager() : NULL, | ||||
&g_LightEnv, m_pGame->GetView(), | &g_LightEnv, m_pGame->GetView(), | ||||
m_pGame->GetView() ? m_pGame->GetView()->GetCinema() : NULL, | m_pGame->GetView() ? m_pGame->GetView()->GetCinema() : NULL, | ||||
pTriggerManager, CRenderer::IsInitialised() ? &g_Renderer.GetPostprocManager() : NULL, | pTriggerManager, CRenderer::IsInitialised() ? &g_Renderer.GetPostprocManager() : NULL, | ||||
m_pGame->GetSimulation2(), playerID); | m_pGame->GetSimulation2(), playerID); | ||||
// registers for delay loading | // registers for delay loading | ||||
RegMemFun(this, &CWorld::DeleteMapReader, L"CWorld::DeleteMapReader", 5); | RegMemFun(this, &CWorld::DeleteMapReader, L"CWorld::DeleteMapReader", 5); | ||||
} | } | ||||
int CWorld::DeleteMapReader() | int CWorld::DeleteMapReader() | ||||
{ | { | ||||
SAFE_DELETE(m_MapReader); | SAFE_DELETE(m_MapReader); | ||||
return 0; | return 0; | ||||
} | } | ||||
/** | /** | ||||
* Destructor. | * Destructor. | ||||
* | * | ||||
**/ | **/ | ||||
CWorld::~CWorld() | CWorld::~CWorld() | ||||
{ | { | ||||
delete m_Terrain; | delete m_Terrain; | ||||
delete m_Water; | |||||
delete m_UnitManager; | delete m_UnitManager; | ||||
delete m_MapReader; | delete m_MapReader; | ||||
} | } |
Wildfire Games · Phabricator
Could they be unique_ptr?