diff options
author | Piotr Dziwiński <piotr.dziwinski@nsn.com> | 2013-02-16 22:37:43 +0100 |
---|---|---|
committer | Piotr Dziwiński <piotr.dziwinski@nsn.com> | 2013-02-17 12:11:56 +0100 |
commit | 001d37b257b126dd6ef1dced70f94ff3d2806d28 (patch) | |
tree | 1025979c635c899f196d606f7d74170e33ef4f3a /src/graphics | |
parent | 45040318b026f8864d244e39f1703685ad688470 (diff) | |
download | colobot-001d37b257b126dd6ef1dced70f94ff3d2806d28.tar.gz colobot-001d37b257b126dd6ef1dced70f94ff3d2806d28.tar.bz2 colobot-001d37b257b126dd6ef1dced70f94ff3d2806d28.zip |
CInstanceManager refactoring
* removed classes managed by CInstanceManager
except for CObject, CPyro, CBrain and CPhysics
because of dependencies
* refactored instance searching to use existing singleton instances of
CApplication, CEngine and CRobotMain and calling their getter
functions
Diffstat (limited to 'src/graphics')
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]; |