Ykkrosh
d39a4fac21
# Attempted to make compilation faster by including as little as possible in some .h files, and moving it into .cpp. Fixed BaseTechCollection memory leak. This was SVN commit r3992.
88 lines
2.1 KiB
C++
88 lines
2.1 KiB
C++
#include "precompiled.h"
|
|
|
|
#include "CStr.h"
|
|
#include "CLogger.h"
|
|
#include "ps/Errors.h"
|
|
|
|
#include "World.h"
|
|
#include "graphics/MapReader.h"
|
|
#include "Game.h"
|
|
#include "GameAttributes.h"
|
|
#include "graphics/Terrain.h"
|
|
#include "graphics/LightEnv.h"
|
|
#include "simulation/BaseEntityCollection.h"
|
|
#include "simulation/EntityManager.h"
|
|
#include "lib/timer.h"
|
|
#include "Loader.h"
|
|
#include "LoaderThunks.h"
|
|
#include "graphics/MapWriter.h"
|
|
#include "graphics/UnitManager.h"
|
|
#include "simulation/EntityManager.h"
|
|
#include "simulation/Projectile.h"
|
|
#include "simulation/LOSManager.h"
|
|
#include "graphics/GameView.h"
|
|
#include "graphics/Terrain.h"
|
|
|
|
#define LOG_CATEGORY "world"
|
|
|
|
// global light settings. this is not a member of CWorld because it is
|
|
// passed to the renderer before CWorld exists.
|
|
CLightEnv g_LightEnv;
|
|
|
|
|
|
CWorld::CWorld(CGame *pGame):
|
|
m_pGame(pGame),
|
|
m_Terrain(new CTerrain()),
|
|
m_UnitManager(&g_UnitMan),
|
|
m_EntityManager(new CEntityManager()),
|
|
m_ProjectileManager(new CProjectileManager()),
|
|
m_LOSManager(new CLOSManager())
|
|
{}
|
|
|
|
void CWorld::Initialize(CGameAttributes *pAttribs)
|
|
{
|
|
// TODO: Find a better way of handling these global things
|
|
ONCE(RegMemFun(CBaseEntityCollection::GetSingletonPtr(), &CBaseEntityCollection::loadTemplates, L"LoadTemplates", 15));
|
|
|
|
// Load the map, if one was specified
|
|
if (pAttribs->m_MapFile.Length())
|
|
{
|
|
CStr mapfilename("maps/scenarios/");
|
|
|
|
mapfilename += (CStr)pAttribs->m_MapFile;
|
|
|
|
CMapReader* reader = 0;
|
|
|
|
try {
|
|
reader = new CMapReader;
|
|
reader->LoadMap(mapfilename, m_Terrain, m_UnitManager, &g_LightEnv, m_pGame->GetView()->GetCamera());
|
|
// fails immediately, or registers for delay loading
|
|
} catch (PSERROR_File&) {
|
|
delete reader;
|
|
LOG(ERROR, LOG_CATEGORY, "Failed to load map %s", mapfilename.c_str());
|
|
throw PSERROR_Game_World_MapLoadFailed();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CWorld::RegisterInit(CGameAttributes *pAttribs)
|
|
{
|
|
Initialize(pAttribs);
|
|
}
|
|
|
|
|
|
CWorld::~CWorld()
|
|
{
|
|
delete m_Terrain;
|
|
delete m_EntityManager;
|
|
delete m_ProjectileManager;
|
|
delete m_LOSManager;
|
|
}
|
|
|
|
|
|
void CWorld::RewriteMap()
|
|
{
|
|
CMapWriter::RewriteAllMaps(m_Terrain, m_UnitManager, &g_LightEnv, m_pGame->GetView()->GetCamera());
|
|
}
|