forked from 0ad/0ad
Matei
7926b3d93c
Entities with traits.is_territory_centre == true will act as territory centres, and territory areas are calculated and displayed on the minimap. It remains to display these areas in the game view and to make Civ Centres "socketable" so you can build them on Settlements to claim them. This was SVN commit r4070.
93 lines
2.4 KiB
C++
93 lines
2.4 KiB
C++
#include "precompiled.h"
|
|
|
|
#include "graphics/GameView.h"
|
|
#include "graphics/LightEnv.h"
|
|
#include "graphics/MapReader.h"
|
|
#include "graphics/MapWriter.h"
|
|
#include "graphics/Terrain.h"
|
|
#include "graphics/Terrain.h"
|
|
#include "graphics/UnitManager.h"
|
|
#include "lib/timer.h"
|
|
#include "ps/CLogger.h"
|
|
#include "ps/CStr.h"
|
|
#include "ps/Errors.h"
|
|
#include "ps/Game.h"
|
|
#include "ps/GameAttributes.h"
|
|
#include "ps/Loader.h"
|
|
#include "ps/LoaderThunks.h"
|
|
#include "ps/World.h"
|
|
#include "renderer/Renderer.h"
|
|
#include "simulation/BaseEntityCollection.h"
|
|
#include "simulation/EntityManager.h"
|
|
#include "simulation/EntityManager.h"
|
|
#include "simulation/LOSManager.h"
|
|
#include "simulation/TerritoryManager.h"
|
|
#include "simulation/Projectile.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()),
|
|
m_TerritoryManager(new CTerritoryManager())
|
|
{}
|
|
|
|
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_Renderer.GetWaterManager(),
|
|
g_Renderer.GetSkyManager(), &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_Renderer.GetWaterManager(), g_Renderer.GetSkyManager(),
|
|
&g_LightEnv, m_pGame->GetView()->GetCamera());
|
|
}
|