summaryrefslogtreecommitdiffstats
path: root/src/graphics/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics/engine')
-rw-r--r--src/graphics/engine/camera.cpp26
-rw-r--r--src/graphics/engine/camera.h6
-rw-r--r--src/graphics/engine/cloud.cpp19
-rw-r--r--src/graphics/engine/cloud.h11
-rw-r--r--src/graphics/engine/engine.cpp89
-rw-r--r--src/graphics/engine/engine.h31
-rw-r--r--src/graphics/engine/lightman.cpp9
-rw-r--r--src/graphics/engine/lightman.h3
-rw-r--r--src/graphics/engine/lightning.cpp22
-rw-r--r--src/graphics/engine/lightning.h4
-rw-r--r--src/graphics/engine/modelfile.cpp1
-rw-r--r--src/graphics/engine/modelmanager.cpp2
-rw-r--r--src/graphics/engine/particle.cpp29
-rw-r--r--src/graphics/engine/particle.h4
-rw-r--r--src/graphics/engine/planet.cpp8
-rw-r--r--src/graphics/engine/planet.h5
-rw-r--r--src/graphics/engine/pyro.cpp34
-rw-r--r--src/graphics/engine/pyro.h4
-rw-r--r--src/graphics/engine/terrain.cpp13
-rw-r--r--src/graphics/engine/terrain.h6
-rw-r--r--src/graphics/engine/text.cpp11
-rw-r--r--src/graphics/engine/text.h6
-rw-r--r--src/graphics/engine/water.cpp28
-rw-r--r--src/graphics/engine/water.h8
24 files changed, 197 insertions, 182 deletions
diff --git a/src/graphics/engine/camera.cpp b/src/graphics/engine/camera.cpp
index 8026302..f65a59a 100644
--- a/src/graphics/engine/camera.cpp
+++ b/src/graphics/engine/camera.cpp
@@ -30,6 +30,7 @@
#include "math/geometry.h"
#include "object/object.h"
+#include "object/robotmain.h"
#include "physics/physics.h"
@@ -54,14 +55,13 @@ void SetTransparency(CObject* obj, float value)
-CCamera::CCamera(CInstanceManager* iMan)
+CCamera::CCamera()
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_CAMERA, this);
+ m_engine = CEngine::GetInstancePointer();
+ m_water = m_engine->GetWater();
- m_engine = static_cast<CEngine*> ( m_iMan->SearchInstance(CLASS_ENGINE) );
- m_terrain = static_cast<CTerrain*>( m_iMan->SearchInstance(CLASS_TERRAIN) );
- m_water = static_cast<CWater*> ( m_iMan->SearchInstance(CLASS_WATER) );
+ m_main = CRobotMain::GetInstancePointer();
+ m_terrain = m_main->GetTerrain();
m_type = CAM_TYPE_FREE;
m_smooth = CAM_SMOOTH_NORM;
@@ -227,11 +227,13 @@ void CCamera::SetType(CameraType type)
m_remotePan = 0.0f;
m_remoteZoom = 0.0f;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
if ( (m_type == CAM_TYPE_BACK) && m_transparency )
{
for (int i = 0; i < 1000000; i++)
{
- CObject* obj = static_cast<CObject*>( m_iMan->SearchInstance(CLASS_OBJECT, i) );
+ CObject* obj = static_cast<CObject*>( iMan->SearchInstance(CLASS_OBJECT, i) );
if (obj == NULL)
break;
@@ -881,9 +883,11 @@ bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
m_transparency = false;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for (int i = 0 ;i < 1000000; i++)
{
- CObject *obj = static_cast<CObject*>( m_iMan->SearchInstance(CLASS_OBJECT, i) );
+ CObject *obj = static_cast<CObject*>( iMan->SearchInstance(CLASS_OBJECT, i) );
if (obj == NULL) break;
if (obj->GetTruck()) continue; // battery or cargo?
@@ -958,9 +962,11 @@ bool CCamera::IsCollisionBack(Math::Vector &eye, Math::Vector lookat)
bool CCamera::IsCollisionFix(Math::Vector &eye, Math::Vector lookat)
{
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for (int i = 0; i < 1000000; i++)
{
- CObject *obj = static_cast<CObject*>( m_iMan->SearchInstance(CLASS_OBJECT, i) );
+ CObject *obj = static_cast<CObject*>( iMan->SearchInstance(CLASS_OBJECT, i) );
if (obj == NULL) break;
if (obj == m_cameraObj) continue;
@@ -1650,7 +1656,7 @@ Math::Vector CCamera::ExcludeObject(Math::Vector eye, Math::Vector lookat,
/*
for (int i = 0; i < 1000000; i++)
{
- CObject* obj = static_cast<CObject*>( m_iMan->SearchInstance(CLASS_OBJECT, i) );
+ CObject* obj = static_cast<CObject*>( iMan->SearchInstance(CLASS_OBJECT, i) );
if (obj == NULL)
break;
diff --git a/src/graphics/engine/camera.h b/src/graphics/engine/camera.h
index 20d252d..0ffc2c2 100644
--- a/src/graphics/engine/camera.h
+++ b/src/graphics/engine/camera.h
@@ -28,8 +28,8 @@
#include "graphics/engine/engine.h"
-class CInstanceManager;
class CObject;
+class CRobotMain;
// Graphics module namespace
@@ -130,7 +130,7 @@ enum CameraOverEffect
class CCamera {
public:
- CCamera(CInstanceManager* iMan);
+ CCamera();
~CCamera();
//! Management of an event
@@ -258,8 +258,8 @@ protected:
void OverFrame(const Event &event);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
+ CRobotMain* m_main;
CTerrain* m_terrain;
CWater* m_water;
diff --git a/src/graphics/engine/cloud.cpp b/src/graphics/engine/cloud.cpp
index 0df0d12..d9ebf5a 100644
--- a/src/graphics/engine/cloud.cpp
+++ b/src/graphics/engine/cloud.cpp
@@ -18,12 +18,12 @@
#include "graphics/engine/cloud.h"
-#include "common/iman.h"
-
#include "graphics/core/device.h"
#include "graphics/engine/engine.h"
#include "graphics/engine/terrain.h"
+#include "object/robotmain.h"
+
#include "math/geometry.h"
@@ -37,11 +37,8 @@ const int CLOUD_LINE_PREALLOCATE_COUNT = 100;
const int CLOUD_SIZE_EXPAND = 4;
-CCloud::CCloud(CInstanceManager* iMan, CEngine* engine)
+CCloud::CCloud(CEngine* engine)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_CLOUD, this);
-
m_engine = engine;
m_terrain = nullptr;
@@ -55,7 +52,6 @@ CCloud::CCloud(CInstanceManager* iMan, CEngine* engine)
CCloud::~CCloud()
{
- m_iMan = nullptr;
m_engine = nullptr;
m_terrain = nullptr;
}
@@ -84,7 +80,7 @@ bool CCloud::EventFrame(const Event &event)
}
void CCloud::AdjustLevel(Math::Vector& pos, Math::Vector& eye, float deep,
- Math::Point& uv1, Math::Point& uv2)
+ Math::Point& uv1, Math::Point& uv2)
{
uv1.x = (pos.x+20000.0f)/1280.0f;
uv1.y = (pos.z+20000.0f)/1280.0f;
@@ -211,8 +207,8 @@ void CCloud::CreateLine(int x, int y, int len)
}
void CCloud::Create(const std::string& fileName,
- const Color& diffuse, const Color& ambient,
- float level)
+ const Color& diffuse, const Color& ambient,
+ float level)
{
m_diffuse = diffuse;
m_ambient = ambient;
@@ -225,7 +221,7 @@ void CCloud::Create(const std::string& fileName,
m_engine->LoadTexture(m_fileName);
if (m_terrain == nullptr)
- m_terrain = static_cast<CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
+ m_terrain = CRobotMain::GetInstancePointer()->GetTerrain();
m_wind = m_terrain->GetWind();
@@ -250,7 +246,6 @@ void CCloud::Flush()
m_level = 0.0f;
}
-
void CCloud::SetLevel(float level)
{
m_level = level;
diff --git a/src/graphics/engine/cloud.h b/src/graphics/engine/cloud.h
index 6f6985f..8f644f0 100644
--- a/src/graphics/engine/cloud.h
+++ b/src/graphics/engine/cloud.h
@@ -34,9 +34,6 @@
#include <string>
-class CInstanceManager;
-
-
// Graphics module namespace
namespace Gfx {
@@ -79,12 +76,13 @@ struct CloudLine
class CCloud
{
public:
- CCloud(CInstanceManager* iMan, CEngine* engine);
+ CCloud(CEngine* engine);
~CCloud();
bool EventProcess(const Event& event);
//! Removes all the clouds
void Flush();
+
//! Creates all areas of cloud
void Create(const std::string& fileName, const Color& diffuse, const Color& ambient, float level);
//! Draw the clouds
@@ -112,9 +110,8 @@ protected:
void CreateLine(int x, int y, int len);
protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
- CTerrain* m_terrain;
+ CEngine* m_engine;
+ CTerrain* m_terrain;
bool m_enabled;
//! Overall level
diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp
index 71b5e7d..d24a3bd 100644
--- a/src/graphics/engine/engine.cpp
+++ b/src/graphics/engine/engine.cpp
@@ -20,7 +20,6 @@
#include "app/app.h"
-#include "common/iman.h"
#include "common/image.h"
#include "common/key.h"
#include "common/logger.h"
@@ -43,20 +42,16 @@
#include "ui/interface.h"
+template<> Gfx::CEngine* CSingleton<Gfx::CEngine>::m_instance = nullptr;
// Graphics module namespace
namespace Gfx {
-CEngine::CEngine(CInstanceManager *iMan, CApplication *app)
+CEngine::CEngine(CApplication *app)
{
- m_iMan = iMan;
m_app = app;
m_device = nullptr;
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_ENGINE, this);
- m_app = app;
-
m_lightMan = nullptr;
m_text = nullptr;
m_particle = nullptr;
@@ -169,11 +164,17 @@ CEngine::CEngine(CInstanceManager *iMan, CApplication *app)
CEngine::~CEngine()
{
- m_iMan = nullptr;
- m_app = nullptr;
- m_device = nullptr;
- m_sound = nullptr;
- m_terrain = nullptr;
+ m_app = nullptr;
+ m_sound = nullptr;
+ m_device = nullptr;
+ m_text = nullptr;
+ m_lightMan = nullptr;
+ m_particle = nullptr;
+ m_water = nullptr;
+ m_cloud = nullptr;
+ m_lightning = nullptr;
+ m_planet = nullptr;
+ m_terrain = nullptr;
DestroyTimeStamp(m_lastFrameTime);
m_lastFrameTime = nullptr;
@@ -191,27 +192,63 @@ CDevice* CEngine::GetDevice()
return m_device;
}
-void CEngine::SetTerrain(CTerrain* terrain)
+CText* CEngine::GetText()
{
- m_terrain = terrain;
+ return m_text;
}
-CText* CEngine::GetText()
+CLightManager* CEngine::GetLightManager()
{
- return m_text;
+ return m_lightMan;
+}
+
+CParticle* CEngine::GetParticle()
+{
+ return m_particle;
+}
+
+CTerrain* CEngine::GetTerrain()
+{
+ return m_terrain;
+}
+
+CWater* CEngine::GetWater()
+{
+ return m_water;
}
+CLightning* CEngine::GetLightning()
+{
+ return m_lightning;
+}
+
+CPlanet* CEngine::GetPlanet()
+{
+ return m_planet;
+}
+
+CCloud* CEngine::GetCloud()
+{
+ return m_cloud;
+}
+
+void CEngine::SetTerrain(CTerrain* terrain)
+{
+ m_terrain = terrain;
+}
+
+
bool CEngine::Create()
{
m_size = m_app->GetVideoConfig().size;
- m_lightMan = new CLightManager(m_iMan, this);
- m_text = new CText(m_iMan, this);
- m_particle = new CParticle(m_iMan, this);
- m_water = new CWater(m_iMan, this);
- m_cloud = new CCloud(m_iMan, this);
- m_lightning = new CLightning(m_iMan, this);
- m_planet = new CPlanet(m_iMan, this);
+ m_lightMan = new CLightManager(this);
+ m_text = new CText(this);
+ m_particle = new CParticle(this);
+ m_water = new CWater(this);
+ m_cloud = new CCloud(this);
+ m_lightning = new CLightning(this);
+ m_planet = new CPlanet(this);
m_lightMan->SetDevice(m_device);
m_particle->SetDevice(m_device);
@@ -2046,7 +2083,7 @@ void CEngine::SetViewParams(const Math::Vector& eyePt, const Math::Vector& looka
Math::LoadViewMatrix(m_matView, eyePt, lookatPt, upVec);
if (m_sound == nullptr)
- m_sound = static_cast<CSoundInterface*>( m_iMan->SearchInstance(CLASS_SOUND) );
+ m_sound = m_app->GetSound();
if (m_sound != nullptr)
m_sound->SetListener(eyePt, lookatPt);
@@ -3184,9 +3221,11 @@ void CEngine::DrawInterface()
SetState(Gfx::ENG_RSTATE_NORMAL);
// Draw the entire interface
- Ui::CInterface* interface = static_cast<Ui::CInterface*>( m_iMan->SearchInstance(CLASS_INTERFACE) );
+ Ui::CInterface* interface = CRobotMain::GetInstancePointer()->GetInterface();
if (interface != nullptr)
+ {
interface->Draw();
+ }
m_interfaceMode = false;
m_lastState = -1;
diff --git a/src/graphics/engine/engine.h b/src/graphics/engine/engine.h
index e5c75bc..0647fbd 100644
--- a/src/graphics/engine/engine.h
+++ b/src/graphics/engine/engine.h
@@ -26,6 +26,7 @@
#include "app/system.h"
#include "common/event.h"
+#include "common/singleton.h"
#include "graphics/core/color.h"
#include "graphics/core/material.h"
@@ -47,7 +48,6 @@
class CApplication;
-class CInstanceManager;
class CObject;
class CSoundInterface;
class CImage;
@@ -671,22 +671,36 @@ struct EngineMouse
* which is what OpenGL actually wants. The old method is kept for now, with mapping between texture names
* and texture structs but it will also be subject to refactoring in the future.
*/
-class CEngine
+class CEngine : public CSingleton<CEngine>
{
public:
- CEngine(CInstanceManager* iMan, CApplication* app);
+ CEngine(CApplication* app);
~CEngine();
//! Sets the device to be used
void SetDevice(CDevice* device);
//! Returns the current device
- CDevice* GetDevice();
-
- //! Sets the terrain object
- void SetTerrain(CTerrain* terrain);
+ CDevice* GetDevice();
//! Returns the text rendering engine
CText* GetText();
+ //! Returns the light manager
+ CLightManager* GetLightManager();
+ //! Returns the particle manager
+ CParticle* GetParticle();
+ //! Returns the terrain manager
+ CTerrain* GetTerrain();
+ //! Returns the water manager
+ CWater* GetWater();
+ //! Returns the lighting manager
+ CLightning* GetLightning();
+ //! Returns the planet manager
+ CPlanet* GetPlanet();
+ //! Returns the fog manager
+ CCloud* GetCloud();
+
+ //! Sets the terrain object
+ void SetTerrain(CTerrain* terrain);
//! Performs the initialization; must be called after device was set
@@ -735,8 +749,6 @@ public:
//! Returns current size of viewport window
Math::IntPoint GetWindowSize();
- //! Returns the last size of viewport window
- Math::IntPoint GetLastWindowSize();
//@{
//! Conversion functions between window and interface coordinates
@@ -1251,7 +1263,6 @@ protected:
void UpdateStaticBuffers();
protected:
- CInstanceManager* m_iMan;
CApplication* m_app;
CSoundInterface* m_sound;
CDevice* m_device;
diff --git a/src/graphics/engine/lightman.cpp b/src/graphics/engine/lightman.cpp
index 3055f08..4a8fd60 100644
--- a/src/graphics/engine/lightman.cpp
+++ b/src/graphics/engine/lightman.cpp
@@ -19,7 +19,6 @@
#include "graphics/engine/lightman.h"
#include "common/logger.h"
-#include "common/iman.h"
#include "graphics/core/device.h"
@@ -78,11 +77,8 @@ DynamicLight::DynamicLight()
-CLightManager::CLightManager(CInstanceManager* iMan, CEngine* engine)
+CLightManager::CLightManager(CEngine* engine)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_LIGHT, this);
-
m_device = nullptr;
m_engine = engine;
@@ -91,9 +87,6 @@ CLightManager::CLightManager(CInstanceManager* iMan, CEngine* engine)
CLightManager::~CLightManager()
{
- m_iMan->DeleteInstance(CLASS_LIGHT, this);
-
- m_iMan = nullptr;
m_device = nullptr;
m_engine = nullptr;
}
diff --git a/src/graphics/engine/lightman.h b/src/graphics/engine/lightman.h
index d83dfb3..07dfe6a 100644
--- a/src/graphics/engine/lightman.h
+++ b/src/graphics/engine/lightman.h
@@ -129,7 +129,7 @@ class CLightManager
{
public:
//! Constructor
- CLightManager(CInstanceManager *iMan, CEngine* engine);
+ CLightManager(CEngine* engine);
//! Destructor
virtual ~CLightManager();
@@ -189,7 +189,6 @@ public:
void UpdateDeviceLights(EngineObjectType type);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
CDevice* m_device;
diff --git a/src/graphics/engine/lightning.cpp b/src/graphics/engine/lightning.cpp
index d256599..5fdae51 100644
--- a/src/graphics/engine/lightning.cpp
+++ b/src/graphics/engine/lightning.cpp
@@ -18,6 +18,8 @@
#include "graphics/engine/lightning.h"
+#include "app/app.h"
+
#include "common/logger.h"
#include "common/iman.h"
@@ -25,22 +27,20 @@
#include "graphics/engine/camera.h"
#include "graphics/engine/terrain.h"
+#include "math/geometry.h"
+
#include "object/object.h"
+#include "object/robotmain.h"
#include "object/auto/autopara.h"
-#include "math/geometry.h"
-
// Graphics module namespace
namespace Gfx {
-CLightning::CLightning(CInstanceManager* iMan, CEngine* engine)
+CLightning::CLightning(CEngine* engine)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_BLITZ, this);
-
m_engine = engine;
m_terrain = nullptr;
m_camera = nullptr;
@@ -187,13 +187,13 @@ bool CLightning::Create(float sleep, float delay, float magnetic)
m_speed = 1.0f / m_sleep;
if (m_terrain == nullptr)
- m_terrain = static_cast<CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
+ m_terrain = CRobotMain::GetInstancePointer()->GetTerrain();
if (m_camera == nullptr)
- m_camera = static_cast<CCamera*>(m_iMan->SearchInstance(CLASS_CAMERA));
+ m_camera = CRobotMain::GetInstancePointer()->GetCamera();
if (m_sound == nullptr)
- m_sound = static_cast<CSoundInterface*>(m_iMan->SearchInstance(CLASS_SOUND));
+ m_sound = CApplication::GetInstancePointer()->GetSound();
return false;
}
@@ -312,12 +312,14 @@ CObject* CLightning::SearchObject(Math::Vector pos)
std::vector<Math::Vector> paraObjPos;
paraObjPos.reserve(100);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
// Seeking the object closest to the point of impact of lightning.
CObject* bestObj = 0;
float min = 100000.0f;
for (int i = 0; i < 1000000; i++)
{
- CObject* obj = static_cast<CObject*>( m_iMan->SearchInstance(CLASS_OBJECT, i) );
+ CObject* obj = static_cast<CObject*>( iMan->SearchInstance(CLASS_OBJECT, i) );
if (obj == nullptr) break;
if (!obj->GetActif()) continue; // inactive object?
diff --git a/src/graphics/engine/lightning.h b/src/graphics/engine/lightning.h
index b21f681..7809a6c 100644
--- a/src/graphics/engine/lightning.h
+++ b/src/graphics/engine/lightning.h
@@ -28,7 +28,6 @@
#include "math/vector.h"
-class CInstanceManager;
class CObject;
class CSoundInterface;
@@ -53,7 +52,7 @@ const float LTNG_PROTECTION_RADIUS = 200.0f;
class CLightning
{
public:
- CLightning(CInstanceManager* iMan, CEngine* engine);
+ CLightning(CEngine* engine);
~CLightning();
//! Triggers lightning
@@ -80,7 +79,6 @@ protected:
CObject* SearchObject(Math::Vector pos);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
CTerrain* m_terrain;
CCamera* m_camera;
diff --git a/src/graphics/engine/modelfile.cpp b/src/graphics/engine/modelfile.cpp
index c9d41f3..f6d7a7b 100644
--- a/src/graphics/engine/modelfile.cpp
+++ b/src/graphics/engine/modelfile.cpp
@@ -18,7 +18,6 @@
#include "graphics/engine/modelfile.h"
-#include "common/iman.h"
#include "common/ioutils.h"
#include "common/logger.h"
#include "common/stringutils.h"
diff --git a/src/graphics/engine/modelmanager.cpp b/src/graphics/engine/modelmanager.cpp
index 051922f..c23b79d 100644
--- a/src/graphics/engine/modelmanager.cpp
+++ b/src/graphics/engine/modelmanager.cpp
@@ -8,7 +8,7 @@
#include <cstdio>
-template<> Gfx::CModelManager* CSingleton<Gfx::CModelManager>::mInstance = nullptr;
+template<> Gfx::CModelManager* CSingleton<Gfx::CModelManager>::m_instance = nullptr;
namespace Gfx {
diff --git a/src/graphics/engine/particle.cpp b/src/graphics/engine/particle.cpp
index 388c189..d15ee3b 100644
--- a/src/graphics/engine/particle.cpp
+++ b/src/graphics/engine/particle.cpp
@@ -18,6 +18,9 @@
#include "graphics/engine/particle.h"
+#include "app/app.h"
+
+#include "common/iman.h"
#include "common/logger.h"
#include "graphics/core/device.h"
@@ -117,11 +120,8 @@ float GetDecay(ObjectType type)
-CParticle::CParticle(CInstanceManager *iMan, CEngine* engine)
+CParticle::CParticle(CEngine* engine)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_PARTICULE, this);
-
m_device = nullptr;
m_engine = engine;
m_main = nullptr;
@@ -138,7 +138,6 @@ CParticle::CParticle(CInstanceManager *iMan, CEngine* engine)
CParticle::~CParticle()
{
- m_iMan->DeleteInstance(CLASS_PARTICULE, this);
}
void CParticle::SetDevice(CDevice* device)
@@ -213,7 +212,7 @@ int CParticle::CreateParticle(Math::Vector pos, Math::Vector speed, Math::Point
float windSensitivity, int sheet)
{
if (m_main == nullptr)
- m_main = static_cast<CRobotMain*>(m_iMan->SearchInstance(CLASS_MAIN));
+ m_main = CRobotMain::GetInstancePointer();
int t = -1;
if ( type == PARTIEXPLOT ||
@@ -649,7 +648,7 @@ void CParticle::CreateWheelTrace(const Math::Vector &p1, const Math::Vector &p2,
m_wheelTrace[i].startTime = m_absTime;
if (m_terrain == nullptr)
- m_terrain = static_cast<CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
+ m_terrain = m_main->GetTerrain();
m_terrain->AdjustToFloor(m_wheelTrace[i].pos[0]);
m_wheelTrace[i].pos[0].y += 0.2f; // just above the ground
@@ -808,15 +807,15 @@ void CParticle::SetFrameUpdate(int sheet, bool update)
void CParticle::FrameParticle(float rTime)
{
if (m_main == nullptr)
- m_main = static_cast<CRobotMain*>(m_iMan->SearchInstance(CLASS_MAIN));
+ m_main = CRobotMain::GetInstancePointer();
bool pause = (m_engine->GetPause() && !m_main->GetInfoLock());
if (m_terrain == nullptr)
- m_terrain = static_cast<CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
+ m_terrain = m_main->GetTerrain();
if (m_water == nullptr)
- m_water = static_cast<CWater*>(m_iMan->SearchInstance(CLASS_WATER));
+ m_water = m_engine->GetWater();
if (!pause)
{
@@ -3654,11 +3653,13 @@ CObject* CParticle::SearchObjectGun(Math::Vector old, Math::Vector pos,
box2.y += min;
box2.z += min;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
CObject* best = 0;
bool shield = false;
for (int i = 0; i < 1000000; i++)
{
- CObject* obj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ CObject* obj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if (obj == 0) break;
if (!obj->GetActif()) continue; // inactive?
@@ -3782,9 +3783,11 @@ CObject* CParticle::SearchObjectRay(Math::Vector pos, Math::Vector goal,
box2.y += min;
box2.z += min;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for (int i = 0; i < 1000000; i++)
{
- CObject* obj = static_cast<CObject*>( m_iMan->SearchInstance(CLASS_OBJECT, i) );
+ CObject* obj = static_cast<CObject*>( iMan->SearchInstance(CLASS_OBJECT, i) );
if (obj == nullptr) break;
if (!obj->GetActif()) continue; // inactive?
@@ -3822,7 +3825,7 @@ CObject* CParticle::SearchObjectRay(Math::Vector pos, Math::Vector goal,
void CParticle::Play(Sound sound, Math::Vector pos, float amplitude)
{
if (m_sound == nullptr)
- m_sound = static_cast<CSoundInterface*>(m_iMan->SearchInstance(CLASS_SOUND));
+ m_sound = CApplication::GetInstancePointer()->GetSound();
m_sound->Play(sound, pos, amplitude);
}
diff --git a/src/graphics/engine/particle.h b/src/graphics/engine/particle.h
index 90aec55..708a04d 100644
--- a/src/graphics/engine/particle.h
+++ b/src/graphics/engine/particle.h
@@ -28,7 +28,6 @@
#include "sound/sound.h"
-class CInstanceManager;
class CRobotMain;
class CObject;
class CSoundInterface;
@@ -267,7 +266,7 @@ struct WheelTrace
class CParticle
{
public:
- CParticle(CInstanceManager* iMan, CEngine* engine);
+ CParticle(CEngine* engine);
~CParticle();
//! Sets the device to use
@@ -371,7 +370,6 @@ protected:
void TrackDraw(int i, ParticleType type);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
CDevice* m_device;
CTerrain* m_terrain;
diff --git a/src/graphics/engine/planet.cpp b/src/graphics/engine/planet.cpp
index 3b9aa6c..49bcb4c 100644
--- a/src/graphics/engine/planet.cpp
+++ b/src/graphics/engine/planet.cpp
@@ -18,8 +18,6 @@
#include "graphics/engine/planet.h"
-#include "common/iman.h"
-
#include "graphics/core/device.h"
#include "graphics/engine/engine.h"
@@ -31,11 +29,8 @@ namespace Gfx {
const int PLANET_PREALLOCATE_COUNT = 10;
-CPlanet::CPlanet(CInstanceManager* iMan, CEngine* engine)
+CPlanet::CPlanet(CEngine* engine)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_PLANET, this);
-
m_planet[0].reserve(PLANET_PREALLOCATE_COUNT);
m_planet[1].reserve(PLANET_PREALLOCATE_COUNT);
@@ -46,7 +41,6 @@ CPlanet::CPlanet(CInstanceManager* iMan, CEngine* engine)
CPlanet::~CPlanet()
{
- m_iMan = nullptr;
}
void CPlanet::Flush()
diff --git a/src/graphics/engine/planet.h b/src/graphics/engine/planet.h
index 1b16da0..3762e1d 100644
--- a/src/graphics/engine/planet.h
+++ b/src/graphics/engine/planet.h
@@ -30,8 +30,6 @@
#include <vector>
-class CInstanceManager;
-
// Graphics module namespace
namespace Gfx {
@@ -82,7 +80,7 @@ struct Planet
class CPlanet
{
public:
- CPlanet(CInstanceManager* iMan, CEngine* engine);
+ CPlanet(CEngine* engine);
~CPlanet();
//! Removes all the planets
@@ -110,7 +108,6 @@ protected:
bool EventFrame(const Event &event);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
float m_time;
diff --git a/src/graphics/engine/pyro.cpp b/src/graphics/engine/pyro.cpp
index e374d6c..1d80fea 100644
--- a/src/graphics/engine/pyro.cpp
+++ b/src/graphics/engine/pyro.cpp
@@ -18,6 +18,9 @@
#include "graphics/engine/pyro.h"
+#include "app/app.h"
+
+#include "common/iman.h"
#include "common/logger.h"
#include "graphics/engine/lightman.h"
@@ -36,20 +39,19 @@
namespace Gfx {
-CPyro::CPyro(CInstanceManager* iMan)
+CPyro::CPyro()
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_PYRO, this, 100);
-
- m_engine = static_cast<CEngine*>(m_iMan->SearchInstance(CLASS_ENGINE));
- m_terrain = static_cast<CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
- m_camera = static_cast<CCamera*>(m_iMan->SearchInstance(CLASS_CAMERA));
- m_particle = static_cast<CParticle*>(m_iMan->SearchInstance(CLASS_PARTICULE));
- m_lightMan = static_cast<CLightManager*>(m_iMan->SearchInstance(CLASS_LIGHT));
- m_displayText = static_cast<Ui::CDisplayText*>(m_iMan->SearchInstance(CLASS_DISPLAYTEXT));
- m_main = static_cast<CRobotMain*>(m_iMan->SearchInstance(CLASS_MAIN));
- m_sound = static_cast<CSoundInterface*>(m_iMan->SearchInstance(CLASS_SOUND));
- m_object = 0;
+ CInstanceManager::GetInstancePointer()->AddInstance(CLASS_PYRO, this, 100);
+
+ m_engine = CEngine::GetInstancePointer();
+ m_main = CRobotMain::GetInstancePointer();
+ m_terrain = m_main->GetTerrain();
+ m_camera = m_main->GetCamera();
+ m_particle = m_engine->GetParticle();
+ m_lightMan = m_engine->GetLightManager();
+ m_displayText = m_main->GetDisplayText();
+ m_sound = CApplication::GetInstancePointer()->GetSound();
+ m_object = nullptr;
m_progress = 0.0f;
m_speed = 0.0f;
@@ -60,7 +62,7 @@ CPyro::CPyro(CInstanceManager* iMan)
CPyro::~CPyro()
{
- m_iMan->DeleteInstance(CLASS_PYRO, this);
+ CInstanceManager::GetInstancePointer()->DeleteInstance(CLASS_PYRO, this);
}
void CPyro::DeleteObject()
@@ -2183,9 +2185,11 @@ CObject* CPyro::FallSearchBeeExplo()
float iRadius;
m_object->GetCrashSphere(0, iPos, iRadius);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for (int i = 0; i < 1000000; i++)
{
- CObject* pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ CObject* pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
ObjectType oType = pObj->GetType();
diff --git a/src/graphics/engine/pyro.h b/src/graphics/engine/pyro.h
index 0204070..9548a07 100644
--- a/src/graphics/engine/pyro.h
+++ b/src/graphics/engine/pyro.h
@@ -31,7 +31,6 @@
#include "object/object.h"
-class CInstanceManager;
class CObject;
class CRobotMain;
class CSoundInterface;
@@ -111,7 +110,7 @@ struct PyroLightOper
class CPyro
{
public:
- CPyro(CInstanceManager* iMan);
+ CPyro();
~CPyro();
//! Creates pyrotechnic effect
@@ -174,7 +173,6 @@ protected:
void LightOperFrame(float rTime);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
CTerrain* m_terrain;
CCamera* m_camera;
diff --git a/src/graphics/engine/terrain.cpp b/src/graphics/engine/terrain.cpp
index 0be75bc..8f7ad26 100644
--- a/src/graphics/engine/terrain.cpp
+++ b/src/graphics/engine/terrain.cpp
@@ -19,11 +19,13 @@
#include "graphics/engine/terrain.h"
#include "app/app.h"
-#include "common/iman.h"
+
#include "common/image.h"
#include "common/logger.h"
+
#include "graphics/engine/engine.h"
#include "graphics/engine/water.h"
+
#include "math/geometry.h"
#include <sstream>
@@ -35,13 +37,10 @@
namespace Gfx {
-CTerrain::CTerrain(CInstanceManager* iMan)
+CTerrain::CTerrain()
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_TERRAIN, this);
-
- m_engine = static_cast<CEngine*>( m_iMan->SearchInstance(CLASS_ENGINE) );
- m_water = static_cast<CWater*>( m_iMan->SearchInstance(CLASS_WATER) );
+ m_engine = CEngine::GetInstancePointer();
+ m_water = m_engine->GetWater();
m_mosaicCount = 20;
m_brickCount = 1 << 4;
diff --git a/src/graphics/engine/terrain.h b/src/graphics/engine/terrain.h
index 91ddc76..1fa8dec 100644
--- a/src/graphics/engine/terrain.h
+++ b/src/graphics/engine/terrain.h
@@ -26,9 +26,6 @@
#include "graphics/engine/engine.h"
-class CInstanceManager;
-
-
// Graphics module namespace
namespace Gfx {
@@ -223,7 +220,7 @@ struct FlyingLimit
class CTerrain
{
public:
- CTerrain(CInstanceManager* iMan);
+ CTerrain();
~CTerrain();
//! Generates a new flat terrain
@@ -359,7 +356,6 @@ protected:
void AdjustBuildingLevel(Math::Vector &p);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
CWater* m_water;
diff --git a/src/graphics/engine/text.cpp b/src/graphics/engine/text.cpp
index 48af081..424b99b 100644
--- a/src/graphics/engine/text.cpp
+++ b/src/graphics/engine/text.cpp
@@ -19,10 +19,11 @@
#include "graphics/engine/text.h"
#include "app/app.h"
+
#include "common/image.h"
-#include "common/iman.h"
#include "common/logger.h"
#include "common/stringutils.h"
+
#include "math/func.h"
#include <SDL/SDL.h>
@@ -49,11 +50,8 @@ struct CachedFont
const Math::IntPoint REFERENCE_SIZE(800, 600);
-CText::CText(CInstanceManager *iMan, CEngine* engine)
+CText::CText(CEngine* engine)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_TEXT, this);
-
m_device = nullptr;
m_engine = engine;
@@ -66,9 +64,6 @@ CText::CText(CInstanceManager *iMan, CEngine* engine)
CText::~CText()
{
- m_iMan->DeleteInstance(CLASS_TEXT, this);
-
- m_iMan = nullptr;
m_device = nullptr;
m_engine = nullptr;
}
diff --git a/src/graphics/engine/text.h b/src/graphics/engine/text.h
index e7578df..d8e2aff 100644
--- a/src/graphics/engine/text.h
+++ b/src/graphics/engine/text.h
@@ -31,9 +31,6 @@
#include <map>
-class CInstanceManager;
-
-
// Graphics module namespace
namespace Gfx {
@@ -226,7 +223,7 @@ struct MultisizeFont
class CText
{
public:
- CText(CInstanceManager *iMan, CEngine* engine);
+ CText(CEngine* engine);
virtual ~CText();
//! Sets the device to be used
@@ -301,7 +298,6 @@ protected:
void StringToUTFCharList(const std::string &text, std::vector<UTF8Char> &chars);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
CDevice* m_device;
diff --git a/src/graphics/engine/water.cpp b/src/graphics/engine/water.cpp
index 6c822b3..d90652b 100644
--- a/src/graphics/engine/water.cpp
+++ b/src/graphics/engine/water.cpp
@@ -18,7 +18,8 @@
#include "graphics/engine/water.h"
-#include "common/iman.h"
+#include "app/app.h"
+
#include "common/logger.h"
#include "graphics/core/device.h"
@@ -28,6 +29,7 @@
#include "math/geometry.h"
#include "object/object.h"
+#include "object/robotmain.h"
#include "sound/sound.h"
@@ -42,14 +44,11 @@ const int WATERLINE_PREALLOCATE_COUNT = 500;
const int VAPOR_SIZE = 10;
-CWater::CWater(CInstanceManager* iMan, CEngine* engine)
+CWater::CWater(CEngine* engine)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_WATER, this);
-
m_engine = engine;
m_terrain = nullptr;
- m_particule = nullptr;
+ m_particle = nullptr;
m_sound = nullptr;
m_type[0] = WATER_NULL;
@@ -67,10 +66,9 @@ CWater::CWater(CInstanceManager* iMan, CEngine* engine)
CWater::~CWater()
{
- m_iMan = nullptr;
m_engine = nullptr;
m_terrain = nullptr;
- m_particule = nullptr;
+ m_particle = nullptr;
m_sound = nullptr;
}
@@ -99,8 +97,8 @@ bool CWater::EventFrame(const Event &event)
void CWater::LavaFrame(float rTime)
{
- if (m_particule == nullptr)
- m_particule = static_cast<CParticle*>( m_iMan->SearchInstance(CLASS_PARTICULE) );
+ if (m_particle == nullptr)
+ m_particle = m_engine->GetParticle();
for (int i = 0; i < static_cast<int>( m_vapors.size() ); i++)
VaporFrame(i, rTime);
@@ -183,7 +181,7 @@ void CWater::VaporFrame(int i, float rTime)
m_vapors[i].time += rTime;
if (m_sound == nullptr)
- m_sound = static_cast<CSoundInterface*>(m_iMan->SearchInstance(CLASS_SOUND));
+ m_sound = CApplication::GetInstancePointer()->GetSound();
if (m_vapors[i].time <= m_vapors[i].delay)
{
@@ -206,7 +204,7 @@ void CWater::VaporFrame(int i, float rTime)
Math::Point dim;
dim.x = Math::Rand()*1.5f+1.5f;
dim.y = dim.x;
- m_particule->CreateParticle(pos, speed, dim, PARTIERROR, 2.0f, 10.0f);
+ m_particle->CreateParticle(pos, speed, dim, PARTIERROR, 2.0f, 10.0f);
}
}
else if (m_vapors[i].type == PARTIFLAME)
@@ -222,7 +220,7 @@ void CWater::VaporFrame(int i, float rTime)
Math::Point dim;
dim.x = Math::Rand()*2.0f+2.0f;
dim.y = dim.x;
- m_particule->CreateParticle(pos, speed, dim, PARTIFLAME);
+ m_particle->CreateParticle(pos, speed, dim, PARTIFLAME);
}
else
{
@@ -237,7 +235,7 @@ void CWater::VaporFrame(int i, float rTime)
Math::Point dim;
dim.x = Math::Rand()*1.0f+1.0f;
dim.y = dim.x;
- m_particule->CreateParticle(pos, speed, dim, PARTIVAPOR);
+ m_particle->CreateParticle(pos, speed, dim, PARTIVAPOR);
}
}
}
@@ -497,7 +495,7 @@ void CWater::Create(WaterType type1, WaterType type2, const std::string& fileNam
m_engine->LoadTexture(m_fileName);
if (m_terrain == nullptr)
- m_terrain = static_cast<CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
+ m_terrain = CRobotMain::GetInstancePointer()->GetTerrain();
m_brickCount = m_terrain->GetBrickCount()*m_terrain->GetMosaicCount();
m_brickSize = m_terrain->GetBrickSize();
diff --git a/src/graphics/engine/water.h b/src/graphics/engine/water.h
index 21d96d4..bb113e0 100644
--- a/src/graphics/engine/water.h
+++ b/src/graphics/engine/water.h
@@ -28,7 +28,6 @@
#include "graphics/engine/particle.h"
-class CInstanceManager;
class CSoundInterface;
@@ -117,8 +116,8 @@ enum WaterType
class CWater
{
public:
- CWater(CInstanceManager* iMan, CEngine* engine);
- ~CWater();
+ CWater(CEngine* engine);
+ virtual ~CWater();
void SetDevice(CDevice* device);
bool EventProcess(const Event &event);
@@ -168,11 +167,10 @@ protected:
void VaporFrame(int i, float rTime);
protected:
- CInstanceManager* m_iMan;
CEngine* m_engine;
CDevice* m_device;
CTerrain* m_terrain;
- CParticle* m_particule;
+ CParticle* m_particle;
CSoundInterface* m_sound;
WaterType m_type[2];