summaryrefslogtreecommitdiffstats
path: root/src/object
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2013-03-30 15:01:00 +0100
committerPiotr Dziwinski <piotrdz@gmail.com>2013-03-30 15:23:05 +0100
commite218dcfdf2c58f8841e7ebd220527d08e870a6d5 (patch)
treea567db04a8a51e2db87f80e259faf222a7d4becd /src/object
parentbfc701e286259d9a7aa2ff8240704eab2ba3a237 (diff)
parente607fed265070be8c518d4302d8b76f738421fb3 (diff)
downloadcolobot-e218dcfdf2c58f8841e7ebd220527d08e870a6d5.tar.gz
colobot-e218dcfdf2c58f8841e7ebd220527d08e870a6d5.tar.bz2
colobot-e218dcfdf2c58f8841e7ebd220527d08e870a6d5.zip
Merge branch 'dev'
Merging content from dev
Diffstat (limited to 'src/object')
-rw-r--r--src/object/auto/auto.cpp54
-rw-r--r--src/object/auto/auto.h7
-rw-r--r--src/object/auto/autobase.cpp14
-rw-r--r--src/object/auto/autobase.h2
-rw-r--r--src/object/auto/autoconvert.cpp8
-rw-r--r--src/object/auto/autoconvert.h2
-rw-r--r--src/object/auto/autoderrick.cpp9
-rw-r--r--src/object/auto/autoderrick.h2
-rw-r--r--src/object/auto/autodestroyer.cpp97
-rw-r--r--src/object/auto/autodestroyer.h2
-rw-r--r--src/object/auto/autoegg.cpp11
-rw-r--r--src/object/auto/autoegg.h2
-rw-r--r--src/object/auto/autoenergy.cpp9
-rw-r--r--src/object/auto/autoenergy.h2
-rw-r--r--src/object/auto/autofactory.cpp10
-rw-r--r--src/object/auto/autofactory.h2
-rw-r--r--src/object/auto/autoflag.cpp3
-rw-r--r--src/object/auto/autoflag.h2
-rw-r--r--src/object/auto/autohuston.cpp3
-rw-r--r--src/object/auto/autohuston.h2
-rw-r--r--src/object/auto/autoinfo.cpp3
-rw-r--r--src/object/auto/autoinfo.h2
-rw-r--r--src/object/auto/autojostle.cpp3
-rw-r--r--src/object/auto/autojostle.h2
-rw-r--r--src/object/auto/autokid.cpp3
-rw-r--r--src/object/auto/autokid.h2
-rw-r--r--src/object/auto/autolabo.cpp11
-rw-r--r--src/object/auto/autolabo.h2
-rw-r--r--src/object/auto/automush.cpp4
-rw-r--r--src/object/auto/automush.h2
-rw-r--r--src/object/auto/autonest.cpp7
-rw-r--r--src/object/auto/autonest.h2
-rw-r--r--src/object/auto/autonuclear.cpp8
-rw-r--r--src/object/auto/autonuclear.h2
-rw-r--r--src/object/auto/autopara.cpp6
-rw-r--r--src/object/auto/autopara.h2
-rw-r--r--src/object/auto/autoportico.cpp11
-rw-r--r--src/object/auto/autoportico.h2
-rw-r--r--src/object/auto/autoradar.cpp5
-rw-r--r--src/object/auto/autoradar.h2
-rw-r--r--src/object/auto/autorepair.cpp6
-rw-r--r--src/object/auto/autorepair.h2
-rw-r--r--src/object/auto/autoresearch.cpp9
-rw-r--r--src/object/auto/autoresearch.h2
-rw-r--r--src/object/auto/autoroot.cpp4
-rw-r--r--src/object/auto/autoroot.h2
-rw-r--r--src/object/auto/autosafe.cpp7
-rw-r--r--src/object/auto/autosafe.h2
-rw-r--r--src/object/auto/autostation.cpp6
-rw-r--r--src/object/auto/autostation.h2
-rw-r--r--src/object/auto/autotower.cpp7
-rw-r--r--src/object/auto/autotower.h2
-rw-r--r--src/object/brain.cpp232
-rw-r--r--src/object/brain.h5
-rw-r--r--src/object/mainmovie.cpp15
-rw-r--r--src/object/mainmovie.h16
-rw-r--r--src/object/motion/motion.cpp23
-rw-r--r--src/object/motion/motion.h8
-rw-r--r--src/object/motion/motionant.cpp126
-rw-r--r--src/object/motion/motionant.h2
-rw-r--r--src/object/motion/motionbee.cpp86
-rw-r--r--src/object/motion/motionbee.h2
-rw-r--r--src/object/motion/motionhuman.cpp123
-rw-r--r--src/object/motion/motionhuman.h2
-rw-r--r--src/object/motion/motionmother.cpp77
-rw-r--r--src/object/motion/motionmother.h2
-rw-r--r--src/object/motion/motionspider.cpp39
-rw-r--r--src/object/motion/motionspider.h2
-rw-r--r--src/object/motion/motiontoto.cpp42
-rw-r--r--src/object/motion/motiontoto.h2
-rw-r--r--src/object/motion/motionvehicle.cpp528
-rw-r--r--src/object/motion/motionvehicle.h2
-rw-r--r--src/object/motion/motionworm.cpp23
-rw-r--r--src/object/motion/motionworm.h2
-rw-r--r--src/object/object.cpp921
-rw-r--r--src/object/object.h7
-rw-r--r--src/object/robotmain.cpp453
-rw-r--r--src/object/robotmain.h31
-rw-r--r--src/object/task/task.cpp31
-rw-r--r--src/object/task/task.h5
-rw-r--r--src/object/task/taskadvance.cpp5
-rw-r--r--src/object/task/taskadvance.h3
-rw-r--r--src/object/task/taskbuild.cpp45
-rw-r--r--src/object/task/taskbuild.h2
-rw-r--r--src/object/task/taskfire.cpp6
-rw-r--r--src/object/task/taskfire.h2
-rw-r--r--src/object/task/taskfireant.cpp7
-rw-r--r--src/object/task/taskfireant.h2
-rw-r--r--src/object/task/taskflag.cpp26
-rw-r--r--src/object/task/taskflag.h3
-rw-r--r--src/object/task/taskgoto.cpp38
-rw-r--r--src/object/task/taskgoto.h3
-rw-r--r--src/object/task/taskgungoal.cpp4
-rw-r--r--src/object/task/taskgungoal.h2
-rw-r--r--src/object/task/taskinfo.cpp10
-rw-r--r--src/object/task/taskinfo.h2
-rw-r--r--src/object/task/taskmanager.cpp48
-rw-r--r--src/object/task/taskmanager.h7
-rw-r--r--src/object/task/taskmanip.cpp30
-rw-r--r--src/object/task/taskmanip.h2
-rw-r--r--src/object/task/taskpen.cpp8
-rw-r--r--src/object/task/taskpen.h2
-rw-r--r--src/object/task/taskrecover.cpp17
-rw-r--r--src/object/task/taskrecover.h3
-rw-r--r--src/object/task/taskreset.cpp9
-rw-r--r--src/object/task/taskreset.h2
-rw-r--r--src/object/task/tasksearch.cpp16
-rw-r--r--src/object/task/tasksearch.h2
-rw-r--r--src/object/task/taskshield.cpp25
-rw-r--r--src/object/task/taskshield.h3
-rw-r--r--src/object/task/taskspiderexplo.cpp8
-rw-r--r--src/object/task/taskspiderexplo.h2
-rw-r--r--src/object/task/tasktake.cpp22
-rw-r--r--src/object/task/tasktake.h2
-rw-r--r--src/object/task/taskterraform.cpp19
-rw-r--r--src/object/task/taskterraform.h3
-rw-r--r--src/object/task/taskturn.cpp4
-rw-r--r--src/object/task/taskturn.h2
-rw-r--r--src/object/task/taskwait.cpp4
-rw-r--r--src/object/task/taskwait.h2
120 files changed, 1736 insertions, 1848 deletions
diff --git a/src/object/auto/auto.cpp b/src/object/auto/auto.cpp
index 4003193..3d88012 100644
--- a/src/object/auto/auto.cpp
+++ b/src/object/auto/auto.cpp
@@ -18,8 +18,13 @@
#include "object/auto/auto.h"
+#include "app/app.h"
+
+#include "common/event.h"
#include "common/iman.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/gauge.h"
#include "ui/window.h"
@@ -30,26 +35,24 @@
// Object's constructor.
-CAuto::CAuto(CInstanceManager* iMan, CObject* object)
+CAuto::CAuto(CObject* object)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_AUTO, this, 100);
+ m_iMan = CInstanceManager::GetInstancePointer();
m_object = object;
- m_event = static_cast< CEventQueue* >(m_iMan->SearchInstance(CLASS_EVENT));
- m_engine = static_cast< Gfx::CEngine* >(m_iMan->SearchInstance(CLASS_ENGINE));
- m_particle = static_cast< Gfx::CParticle* >(m_iMan->SearchInstance(CLASS_PARTICULE));
- m_lightMan = static_cast< Gfx::CLightManager* >(m_iMan->SearchInstance(CLASS_LIGHT));
- m_terrain = static_cast< Gfx::CTerrain* >(m_iMan->SearchInstance(CLASS_TERRAIN));
- m_water = static_cast< Gfx::CWater* >(m_iMan->SearchInstance(CLASS_WATER));
- m_cloud = static_cast< Gfx::CCloud* >(m_iMan->SearchInstance(CLASS_CLOUD));
- m_planet = static_cast< Gfx::CPlanet* >(m_iMan->SearchInstance(CLASS_PLANET));
- m_lightning = static_cast< Gfx::CLightning* >(m_iMan->SearchInstance(CLASS_BLITZ));
- m_camera = static_cast< Gfx::CCamera* >(m_iMan->SearchInstance(CLASS_CAMERA));
- m_interface = static_cast< Ui::CInterface* >(m_iMan->SearchInstance(CLASS_INTERFACE));
- m_main = static_cast< CRobotMain* >(m_iMan->SearchInstance(CLASS_MAIN));
- m_displayText = static_cast< Ui::CDisplayText* >(m_iMan->SearchInstance(CLASS_DISPLAYTEXT));
- m_sound = static_cast< CSoundInterface* >(m_iMan->SearchInstance(CLASS_SOUND));
+ m_engine = Gfx::CEngine::GetInstancePointer();
+ m_main = CRobotMain::GetInstancePointer();
+ m_eventQueue = CApplication::GetInstancePointer()->GetEventQueue();
+ m_sound = CApplication::GetInstancePointer()->GetSound();
+ m_particle = m_engine->GetParticle();
+ m_terrain = m_engine->GetTerrain();
+ m_water = m_engine->GetWater();
+ m_cloud = m_engine->GetCloud();
+ m_planet = m_engine->GetPlanet();
+ m_lightning = m_engine->GetLightning();
+ m_camera = m_main->GetCamera();
+ m_interface = m_main->GetInterface();
+ m_displayText = m_main->GetDisplayText();
m_type = m_object->GetType();
m_time = 0.0f;
@@ -65,7 +68,22 @@ CAuto::CAuto(CInstanceManager* iMan, CObject* object)
CAuto::~CAuto()
{
- m_iMan->DeleteInstance(CLASS_AUTO, this);
+ m_iMan = nullptr;
+
+ m_object = nullptr;
+ m_engine = nullptr;
+ m_main = nullptr;
+ m_eventQueue = nullptr;
+ m_sound = nullptr;
+ m_particle = nullptr;
+ m_terrain = nullptr;
+ m_water = nullptr;
+ m_cloud = nullptr;
+ m_planet = nullptr;
+ m_lightning = nullptr;
+ m_camera = nullptr;
+ m_interface = nullptr;
+ m_displayText = nullptr;
}
diff --git a/src/object/auto/auto.h b/src/object/auto/auto.h
index 2194924..53ccdf9 100644
--- a/src/object/auto/auto.h
+++ b/src/object/auto/auto.h
@@ -50,7 +50,7 @@ class CLightning;
class CAuto
{
public:
- CAuto(CInstanceManager* iMan, CObject* object);
+ CAuto(CObject* object);
virtual ~CAuto();
virtual void DeleteObject(bool bAll=false);
@@ -88,11 +88,10 @@ protected:
void UpdateInterface(float rTime);
protected:
- CInstanceManager* m_iMan;
- CEventQueue* m_event;
+ CInstanceManager* m_iMan; // TODO: to be removed
+ CEventQueue* m_eventQueue;
Gfx::CEngine* m_engine;
Gfx::CParticle* m_particle;
- Gfx::CLightManager* m_lightMan;
Gfx::CTerrain* m_terrain;
Gfx::CWater* m_water;
Gfx::CCloud* m_cloud;
diff --git a/src/object/auto/autobase.cpp b/src/object/auto/autobase.cpp
index 8370517..cb7f04c 100644
--- a/src/object/auto/autobase.cpp
+++ b/src/object/auto/autobase.cpp
@@ -20,13 +20,18 @@
#include "object/auto/autobase.h"
#include "common/iman.h"
+
#include "graphics/engine/terrain.h"
#include "graphics/engine/cloud.h"
#include "graphics/engine/planet.h"
#include "graphics/engine/lightning.h"
+
#include "math/geometry.h"
+
#include "object/robotmain.h"
+
#include "physics/physics.h"
+
#include "ui/interface.h"
#include "ui/window.h"
#include "ui/displaytext.h"
@@ -47,8 +52,7 @@ const float BASE_TRANSIT_TIME = 15.0f; // transit duration
// Object's constructor.
-CAutoBase::CAutoBase(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoBase::CAutoBase(CObject* object) : CAuto(object)
{
m_fogStart = m_engine->GetFogStart();
m_deepView = m_engine->GetDeepView();
@@ -329,7 +333,7 @@ begin:
m_main->DeselectAll();
newEvent.type = EVENT_UPDINTERFACE;
- m_event->AddEvent(newEvent);
+ m_eventQueue->AddEvent(newEvent);
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
@@ -843,7 +847,7 @@ begin:
{
m_soundChannel = -1;
newEvent.type = EVENT_WIN;
- m_event->AddEvent(newEvent);
+ m_eventQueue->AddEvent(newEvent);
m_phase = ABP_WAIT;
m_progress = 0.0f;
@@ -1176,7 +1180,7 @@ bool CAutoBase::Abort()
m_phase == ABP_TAKEOFF ) // off?
{
newEvent.type = EVENT_WIN;
- m_event->AddEvent(newEvent);
+ m_eventQueue->AddEvent(newEvent);
}
}
diff --git a/src/object/auto/autobase.h b/src/object/auto/autobase.h
index 439d414..422f340 100644
--- a/src/object/auto/autobase.h
+++ b/src/object/auto/autobase.h
@@ -65,7 +65,7 @@ enum AutoBasePhase
class CAutoBase : public CAuto
{
public:
- CAutoBase(CInstanceManager* iMan, CObject* object);
+ CAutoBase(CObject* object);
~CAutoBase();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoconvert.cpp b/src/object/auto/autoconvert.cpp
index a550697..7281ed7 100644
--- a/src/object/auto/autoconvert.cpp
+++ b/src/object/auto/autoconvert.cpp
@@ -19,8 +19,11 @@
#include "object/auto/autoconvert.h"
#include "common/iman.h"
+
#include "math/geometry.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
#include "ui/displaytext.h"
@@ -31,8 +34,7 @@
// Object's constructor.
-CAutoConvert::CAutoConvert(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoConvert::CAutoConvert(CObject* object) : CAuto(object)
{
Init();
m_phase = ACP_STOP;
@@ -509,7 +511,7 @@ void CAutoConvert::CreateMetal()
pos = m_object->GetPosition(0);
angle = m_object->GetAngleY(0);
- fret = new CObject(m_iMan);
+ fret = new CObject();
if ( !fret->CreateResource(pos, angle, OBJECT_METAL) )
{
delete fret;
diff --git a/src/object/auto/autoconvert.h b/src/object/auto/autoconvert.h
index b21690f..56591f7 100644
--- a/src/object/auto/autoconvert.h
+++ b/src/object/auto/autoconvert.h
@@ -38,7 +38,7 @@ enum AutoConvertPhase
class CAutoConvert : public CAuto
{
public:
- CAutoConvert(CInstanceManager* iMan, CObject* object);
+ CAutoConvert(CObject* object);
~CAutoConvert();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoderrick.cpp b/src/object/auto/autoderrick.cpp
index 3578c0d..260edcb 100644
--- a/src/object/auto/autoderrick.cpp
+++ b/src/object/auto/autoderrick.cpp
@@ -19,9 +19,13 @@
#include "object/auto/autoderrick.h"
#include "common/iman.h"
+
#include "graphics/engine/terrain.h"
+
#include "math/geometry.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
#include "ui/displaytext.h"
@@ -38,8 +42,7 @@ const float DERRICK_DELAYu = 30.0f; // same, but for uranium
// Object's constructor.
-CAutoDerrick::CAutoDerrick(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoDerrick::CAutoDerrick(CObject* object) : CAuto(object)
{
Init();
m_phase = ADP_WAIT; // paused until the first Init ()
@@ -528,7 +531,7 @@ void CAutoDerrick::CreateFret(Math::Vector pos, float angle, ObjectType type,
{
CObject* fret;
- fret = new CObject(m_iMan);
+ fret = new CObject();
if ( !fret->CreateResource(pos, angle, type) )
{
delete fret;
diff --git a/src/object/auto/autoderrick.h b/src/object/auto/autoderrick.h
index b52f93b..81ed8b4 100644
--- a/src/object/auto/autoderrick.h
+++ b/src/object/auto/autoderrick.h
@@ -38,7 +38,7 @@ enum AutoDerrickPhase
class CAutoDerrick : public CAuto
{
public:
- CAutoDerrick(CInstanceManager* iMan, CObject* object);
+ CAutoDerrick(CObject* object);
~CAutoDerrick();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autodestroyer.cpp b/src/object/auto/autodestroyer.cpp
index ecf7c94..b62a45a 100644
--- a/src/object/auto/autodestroyer.cpp
+++ b/src/object/auto/autodestroyer.cpp
@@ -19,7 +19,9 @@
#include "object/auto/autodestroyer.h"
#include "common/iman.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
@@ -29,8 +31,7 @@
// Object's constructor.
-CAutoDestroyer::CAutoDestroyer(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoDestroyer::CAutoDestroyer(CObject* object) : CAuto(object)
{
Init();
m_phase = ADEP_WAIT; // paused until the first Init ()
@@ -111,18 +112,39 @@ bool CAutoDestroyer::EventProcess(const Event &event)
if ( SearchVehicle() )
{
- m_phase = ADEP_WAIT; // still waiting ...
- m_progress = 0.0f;
- m_speed = 1.0f/0.5f;
+ if ( m_progress < 20.0f ) {
+ m_phase = ADEP_WAIT; // still waiting ...
+ //m_progress = 0.0f;
+ m_speed = 1.0f/0.5f;
+ } else {
+ if ( m_object->GetLock() ) { // If still building...
+ m_phase = ADEP_WAIT; // still waiting ...
+ m_progress = 0.0f;
+ m_speed = 1.0f/0.5f;
+ } else {
+ m_sound->Play(SOUND_PSHHH2, m_object->GetPosition(0), 1.0f, 1.0f);
+
+ m_phase = ADEP_DOWN;
+ m_progress = 0.0f;
+ m_speed = 1.0f/1.0f;
+ m_bExplo = false;
+ }
+ }
}
else
{
- m_sound->Play(SOUND_PSHHH2, m_object->GetPosition(0), 1.0f, 1.0f);
-
- m_phase = ADEP_DOWN;
- m_progress = 0.0f;
- m_speed = 1.0f/1.0f;
- m_bExplo = false;
+ if ( m_object->GetLock() ) { // If still building...
+ m_phase = ADEP_WAIT; // still waiting ...
+ m_progress = 0.0f;
+ m_speed = 1.0f/0.5f;
+ } else {
+ m_sound->Play(SOUND_PSHHH2, m_object->GetPosition(0), 1.0f, 1.0f);
+
+ m_phase = ADEP_DOWN;
+ m_progress = 0.0f;
+ m_speed = 1.0f/1.0f;
+ m_bExplo = false;
+ }
}
}
}
@@ -135,7 +157,7 @@ bool CAutoDestroyer::EventProcess(const Event &event)
scrap = SearchPlastic();
if ( scrap != nullptr )
{
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_FRAGT, scrap);
}
m_bExplo = true;
@@ -243,8 +265,55 @@ CObject* CAutoDestroyer::SearchPlastic()
if ( pObj == nullptr ) break;
type = pObj->GetType();
- if ( type != OBJECT_SCRAP4 &&
- type != OBJECT_SCRAP5 ) continue;
+ //if ( type != OBJECT_SCRAP4 &&
+ // type != OBJECT_SCRAP5 ) continue;
+ if ( type != OBJECT_FRET &&
+ type != OBJECT_STONE &&
+ type != OBJECT_URANIUM &&
+ type != OBJECT_METAL &&
+ type != OBJECT_POWER &&
+ type != OBJECT_ATOMIC &&
+ type != OBJECT_TNT &&
+ type != OBJECT_SCRAP1 &&
+ type != OBJECT_SCRAP2 &&
+ type != OBJECT_SCRAP3 &&
+ type != OBJECT_SCRAP4 &&
+ type != OBJECT_SCRAP5 &&
+ // Robots:
+ type != OBJECT_HUMAN &&
+ type != OBJECT_MOBILEfa &&
+ type != OBJECT_MOBILEta &&
+ type != OBJECT_MOBILEwa &&
+ type != OBJECT_MOBILEia &&
+ type != OBJECT_MOBILEfc &&
+ type != OBJECT_MOBILEtc &&
+ type != OBJECT_MOBILEwc &&
+ type != OBJECT_MOBILEic &&
+ type != OBJECT_MOBILEfi &&
+ type != OBJECT_MOBILEti &&
+ type != OBJECT_MOBILEwi &&
+ type != OBJECT_MOBILEii &&
+ type != OBJECT_MOBILEfs &&
+ type != OBJECT_MOBILEts &&
+ type != OBJECT_MOBILEws &&
+ type != OBJECT_MOBILEis &&
+ type != OBJECT_MOBILErt &&
+ type != OBJECT_MOBILErc &&
+ type != OBJECT_MOBILErr &&
+ type != OBJECT_MOBILErs &&
+ type != OBJECT_MOBILEsa &&
+ type != OBJECT_MOBILEtg &&
+ type != OBJECT_MOBILEft &&
+ type != OBJECT_MOBILEtt &&
+ type != OBJECT_MOBILEwt &&
+ type != OBJECT_MOBILEit &&
+ type != OBJECT_MOBILEdr &&
+ type != OBJECT_MOTHER &&
+ type != OBJECT_ANT &&
+ type != OBJECT_SPIDER &&
+ type != OBJECT_BEE &&
+ type != OBJECT_WORM ) continue;
+
oPos = pObj->GetPosition(0);
dist = Math::Distance(oPos, sPos);
diff --git a/src/object/auto/autodestroyer.h b/src/object/auto/autodestroyer.h
index 50858d3..26981c3 100644
--- a/src/object/auto/autodestroyer.h
+++ b/src/object/auto/autodestroyer.h
@@ -37,7 +37,7 @@ enum AutoDestroyerPhase
class CAutoDestroyer : public CAuto
{
public:
- CAutoDestroyer(CInstanceManager* iMan, CObject* object);
+ CAutoDestroyer(CObject* object);
~CAutoDestroyer();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoegg.cpp b/src/object/auto/autoegg.cpp
index 5b90ef9..e510ca6 100644
--- a/src/object/auto/autoegg.cpp
+++ b/src/object/auto/autoegg.cpp
@@ -18,8 +18,10 @@
#include "object/auto/autoegg.h"
-#include "math/geometry.h"
#include "common/iman.h"
+
+#include "math/geometry.h"
+
#include "script/cmdtoken.h"
#include <stdio.h>
@@ -28,8 +30,7 @@
// Object's constructor.
-CAutoEgg::CAutoEgg(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoEgg::CAutoEgg(CObject* object) : CAuto(object)
{
m_type = OBJECT_NULL;
m_value = 0.0f;
@@ -174,7 +175,7 @@ bool CAutoEgg::EventProcess(const Event &event)
m_progress += event.rTime*m_speed;
if ( m_progress < 1.0f ) return true;
- alien = new CObject(m_iMan);
+ alien = new CObject();
if ( !alien->CreateInsect(m_object->GetPosition(0), m_object->GetAngleY(0), m_type) )
{
delete alien;
@@ -236,7 +237,7 @@ Error CAutoEgg::IsEnded()
{
if ( m_progress < 1.0f ) return ERR_CONTINUE;
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_EGG, m_object); // exploding egg
alien->SetZoom(0, 1.0f); // this is a big boy now
diff --git a/src/object/auto/autoegg.h b/src/object/auto/autoegg.h
index fec07a6..00725db 100644
--- a/src/object/auto/autoegg.h
+++ b/src/object/auto/autoegg.h
@@ -37,7 +37,7 @@ enum AutoEggPhase
class CAutoEgg : public CAuto
{
public:
- CAutoEgg(CInstanceManager* iMan, CObject* object);
+ CAutoEgg(CObject* object);
~CAutoEgg();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoenergy.cpp b/src/object/auto/autoenergy.cpp
index c63dede..a0b4d85 100644
--- a/src/object/auto/autoenergy.cpp
+++ b/src/object/auto/autoenergy.cpp
@@ -19,9 +19,13 @@
#include "object/auto/autoenergy.h"
#include "common/iman.h"
+
#include "graphics/engine/terrain.h"
+
#include "math/geometry.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/gauge.h"
#include "ui/window.h"
@@ -39,8 +43,7 @@ const float ENERGY_DELAY = 12.0f; // processing time
// Object's constructor.
-CAutoEnergy::CAutoEnergy(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoEnergy::CAutoEnergy(CObject* object) : CAuto(object)
{
m_partiSphere = -1;
Init();
@@ -461,7 +464,7 @@ void CAutoEnergy::CreatePower()
pos = m_object->GetPosition(0);
angle = m_object->GetAngleY(0);
- power = new CObject(m_iMan);
+ power = new CObject();
if ( !power->CreateResource(pos, angle, OBJECT_POWER) )
{
delete power;
diff --git a/src/object/auto/autoenergy.h b/src/object/auto/autoenergy.h
index 53d47b6..d3ed5fe 100644
--- a/src/object/auto/autoenergy.h
+++ b/src/object/auto/autoenergy.h
@@ -38,7 +38,7 @@ enum AutoEnergyPhase
class CAutoEnergy : public CAuto
{
public:
- CAutoEnergy(CInstanceManager* iMan, CObject* object);
+ CAutoEnergy(CObject* object);
~CAutoEnergy();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp
index 0789443..82877c6 100644
--- a/src/object/auto/autofactory.cpp
+++ b/src/object/auto/autofactory.cpp
@@ -20,10 +20,15 @@
#include "common/global.h"
#include "common/iman.h"
+
#include "math/geometry.h"
+
#include "object/robotmain.h"
+
#include "physics/physics.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
#include "ui/displaytext.h"
@@ -35,8 +40,7 @@
// Object's constructor.
-CAutoFactory::CAutoFactory(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoFactory::CAutoFactory(CObject* object) : CAuto(object)
{
Init();
m_type = OBJECT_MOBILEws;
@@ -632,7 +636,7 @@ bool CAutoFactory::CreateVehicle()
}
pos = Transform(*mat, pos);
- vehicle = new CObject(m_iMan);
+ vehicle = new CObject();
if ( !vehicle->CreateVehicle(pos, angle, m_type, -1.0f, false, false) )
{
delete vehicle;
diff --git a/src/object/auto/autofactory.h b/src/object/auto/autofactory.h
index f62080d..7c5013d 100644
--- a/src/object/auto/autofactory.h
+++ b/src/object/auto/autofactory.h
@@ -40,7 +40,7 @@ enum AutoFactoryPhase
class CAutoFactory : public CAuto
{
public:
- CAutoFactory(CInstanceManager* iMan, CObject* object);
+ CAutoFactory(CObject* object);
~CAutoFactory();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoflag.cpp b/src/object/auto/autoflag.cpp
index c2dec5c..936546d 100644
--- a/src/object/auto/autoflag.cpp
+++ b/src/object/auto/autoflag.cpp
@@ -37,8 +37,7 @@ static float g_flag3 = 2.00f;
// Object's constructor.
-CAutoFlag::CAutoFlag(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoFlag::CAutoFlag(CObject* object) : CAuto(object)
{
Init();
}
diff --git a/src/object/auto/autoflag.h b/src/object/auto/autoflag.h
index 3c6cf99..c3fd35a 100644
--- a/src/object/auto/autoflag.h
+++ b/src/object/auto/autoflag.h
@@ -27,7 +27,7 @@
class CAutoFlag : public CAuto
{
public:
- CAutoFlag(CInstanceManager* iMan, CObject* object);
+ CAutoFlag(CObject* object);
~CAutoFlag();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autohuston.cpp b/src/object/auto/autohuston.cpp
index 1b6778d..80f9185 100644
--- a/src/object/auto/autohuston.cpp
+++ b/src/object/auto/autohuston.cpp
@@ -26,8 +26,7 @@
// Object's constructor.
-CAutoHuston::CAutoHuston(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoHuston::CAutoHuston(CObject* object) : CAuto(object)
{
Math::Vector pos;
int i;
diff --git a/src/object/auto/autohuston.h b/src/object/auto/autohuston.h
index 27b016b..f99876a 100644
--- a/src/object/auto/autohuston.h
+++ b/src/object/auto/autohuston.h
@@ -42,7 +42,7 @@ const int HUSTONMAXLENS = 20;
class CAutoHuston : public CAuto
{
public:
- CAutoHuston(CInstanceManager* iMan, CObject* object);
+ CAutoHuston(CObject* object);
~CAutoHuston();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoinfo.cpp b/src/object/auto/autoinfo.cpp
index 1245034..56c21d2 100644
--- a/src/object/auto/autoinfo.cpp
+++ b/src/object/auto/autoinfo.cpp
@@ -30,8 +30,7 @@
// Object's constructor.
-CAutoInfo::CAutoInfo(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoInfo::CAutoInfo(CObject* object) : CAuto(object)
{
Init();
}
diff --git a/src/object/auto/autoinfo.h b/src/object/auto/autoinfo.h
index 30481bb..41b74d3 100644
--- a/src/object/auto/autoinfo.h
+++ b/src/object/auto/autoinfo.h
@@ -37,7 +37,7 @@ enum AutoInfoPhase
class CAutoInfo : public CAuto
{
public:
- CAutoInfo(CInstanceManager* iMan, CObject* object);
+ CAutoInfo(CObject* object);
~CAutoInfo();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autojostle.cpp b/src/object/auto/autojostle.cpp
index 788b562..11952c2 100644
--- a/src/object/auto/autojostle.cpp
+++ b/src/object/auto/autojostle.cpp
@@ -23,8 +23,7 @@
// Object's constructor.
-CAutoJostle::CAutoJostle(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoJostle::CAutoJostle(CObject* object) : CAuto(object)
{
Init();
}
diff --git a/src/object/auto/autojostle.h b/src/object/auto/autojostle.h
index c156893..7b700ad 100644
--- a/src/object/auto/autojostle.h
+++ b/src/object/auto/autojostle.h
@@ -27,7 +27,7 @@
class CAutoJostle : public CAuto
{
public:
- CAutoJostle(CInstanceManager* iMan, CObject* object);
+ CAutoJostle(CObject* object);
~CAutoJostle();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autokid.cpp b/src/object/auto/autokid.cpp
index 64cd39a..a9f86b0 100644
--- a/src/object/auto/autokid.cpp
+++ b/src/object/auto/autokid.cpp
@@ -26,8 +26,7 @@
// Object's constructor.
-CAutoKid::CAutoKid(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoKid::CAutoKid(CObject* object) : CAuto(object)
{
m_soundChannel = -1;
Init();
diff --git a/src/object/auto/autokid.h b/src/object/auto/autokid.h
index 3e2fba7..19836a7 100644
--- a/src/object/auto/autokid.h
+++ b/src/object/auto/autokid.h
@@ -27,7 +27,7 @@
class CAutoKid : public CAuto
{
public:
- CAutoKid(CInstanceManager* iMan, CObject* object);
+ CAutoKid(CObject* object);
~CAutoKid();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autolabo.cpp b/src/object/auto/autolabo.cpp
index 70bcc5e..6984fd6 100644
--- a/src/object/auto/autolabo.cpp
+++ b/src/object/auto/autolabo.cpp
@@ -20,9 +20,13 @@
#include "common/global.h"
#include "common/misc.h"
+
#include "math/geometry.h"
+
#include "object/robotmain.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
#include "ui/displaytext.h"
@@ -38,8 +42,7 @@ const float LABO_DELAY = 20.0f; // duration of the analysis
// Object's constructor.
-CAutoLabo::CAutoLabo(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+ CAutoLabo::CAutoLabo(CObject* object) : CAuto(object)
{
int i;
@@ -543,8 +546,8 @@ void CAutoLabo::SetResearch(EventType event)
m_main->WriteFreeParam();
Event newEvent(EVENT_UPDINTERFACE);
-// m_event->MakeEvent(newEvent, EVENT_UPDINTERFACE);
- m_event->AddEvent(newEvent);
+// m_eventQueue->MakeEvent(newEvent, EVENT_UPDINTERFACE);
+ m_eventQueue->AddEvent(newEvent);
UpdateInterface();
}
diff --git a/src/object/auto/autolabo.h b/src/object/auto/autolabo.h
index 8225462..b61e8e3 100644
--- a/src/object/auto/autolabo.h
+++ b/src/object/auto/autolabo.h
@@ -41,7 +41,7 @@ enum AutoLaboPhase
class CAutoLabo : public CAuto
{
public:
- CAutoLabo(CInstanceManager* iMan, CObject* object);
+ CAutoLabo(CObject* object);
~CAutoLabo();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/automush.cpp b/src/object/auto/automush.cpp
index cb94590..e97e2a1 100644
--- a/src/object/auto/automush.cpp
+++ b/src/object/auto/automush.cpp
@@ -19,6 +19,7 @@
#include "object/auto/automush.h"
#include "common/iman.h"
+
#include "script/cmdtoken.h"
@@ -28,8 +29,7 @@
// Object's constructor.
-CAutoMush::CAutoMush(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+ CAutoMush::CAutoMush(CObject* object) : CAuto(object)
{
Init();
}
diff --git a/src/object/auto/automush.h b/src/object/auto/automush.h
index 245393a..1697c5a 100644
--- a/src/object/auto/automush.h
+++ b/src/object/auto/automush.h
@@ -38,7 +38,7 @@ enum AutoMushPhase
class CAutoMush : public CAuto
{
public:
- CAutoMush(CInstanceManager* iMan, CObject* object);
+ CAutoMush(CObject* object);
~CAutoMush();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autonest.cpp b/src/object/auto/autonest.cpp
index 99927bd..1cf13d6 100644
--- a/src/object/auto/autonest.cpp
+++ b/src/object/auto/autonest.cpp
@@ -19,7 +19,9 @@
#include "object/auto/autonest.h"
#include "common/iman.h"
+
#include "graphics/engine/terrain.h"
+
#include "script/cmdtoken.h"
#include <stdio.h>
@@ -28,8 +30,7 @@
// Object's constructor.
-CAutoNest::CAutoNest(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+ CAutoNest::CAutoNest(CObject* object) : CAuto(object)
{
Init();
}
@@ -178,7 +179,7 @@ void CAutoNest::CreateFret(Math::Vector pos, float angle, ObjectType type)
{
CObject* fret;
- fret = new CObject(m_iMan);
+ fret = new CObject();
if ( !fret->CreateResource(pos, angle, type) )
{
delete fret;
diff --git a/src/object/auto/autonest.h b/src/object/auto/autonest.h
index 1009457..4d734a8 100644
--- a/src/object/auto/autonest.h
+++ b/src/object/auto/autonest.h
@@ -35,7 +35,7 @@ enum AutoNestPhase
class CAutoNest : public CAuto
{
public:
- CAutoNest(CInstanceManager* iMan, CObject* object);
+ CAutoNest(CObject* object);
~CAutoNest();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autonuclear.cpp b/src/object/auto/autonuclear.cpp
index 375acf0..75bfb45 100644
--- a/src/object/auto/autonuclear.cpp
+++ b/src/object/auto/autonuclear.cpp
@@ -19,8 +19,11 @@
#include "object/auto/autonuclear.h"
#include "common/iman.h"
+
#include "math/geometry.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
#include "ui/displaytext.h"
@@ -36,8 +39,7 @@ const float NUCLEAR_DELAY = 30.0f; // duration of the generation
// Object's constructor.
-CAutoNuclear::CAutoNuclear(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoNuclear::CAutoNuclear(CObject* object) : CAuto(object)
{
m_channelSound = -1;
Init();
@@ -396,7 +398,7 @@ void CAutoNuclear::CreatePower()
pos = m_object->GetPosition(0);
angle = m_object->GetAngleY(0);
- power = new CObject(m_iMan);
+ power = new CObject();
if ( !power->CreateResource(pos, angle, OBJECT_ATOMIC) )
{
delete power;
diff --git a/src/object/auto/autonuclear.h b/src/object/auto/autonuclear.h
index 06a99af..5b01bba 100644
--- a/src/object/auto/autonuclear.h
+++ b/src/object/auto/autonuclear.h
@@ -38,7 +38,7 @@ enum AutoNuclearPhase
class CAutoNuclear : public CAuto
{
public:
- CAutoNuclear(CInstanceManager* iMan, CObject* object);
+ CAutoNuclear(CObject* object);
~CAutoNuclear();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autopara.cpp b/src/object/auto/autopara.cpp
index a3082f5..ad6517b 100644
--- a/src/object/auto/autopara.cpp
+++ b/src/object/auto/autopara.cpp
@@ -20,8 +20,11 @@
#include "common/iman.h"
+
#include "math/geometry.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
@@ -32,8 +35,7 @@
// Object's constructor.
-CAutoPara::CAutoPara(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoPara::CAutoPara(CObject* object) : CAuto(object)
{
m_channelSound = -1;
Init();
diff --git a/src/object/auto/autopara.h b/src/object/auto/autopara.h
index 10a33a8..1f0b805 100644
--- a/src/object/auto/autopara.h
+++ b/src/object/auto/autopara.h
@@ -36,7 +36,7 @@ enum AutoParaPhase
class CAutoPara : public CAuto
{
public:
- CAutoPara(CInstanceManager* iMan, CObject* object);
+ CAutoPara(CObject* object);
~CAutoPara();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoportico.cpp b/src/object/auto/autoportico.cpp
index 3b3bf84..1646874 100644
--- a/src/object/auto/autoportico.cpp
+++ b/src/object/auto/autoportico.cpp
@@ -55,8 +55,7 @@ float Progress(float a, float b, float progress)
// Object's constructor.
-CAutoPortico::CAutoPortico(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoPortico::CAutoPortico(CObject* object) : CAuto(object)
{
Init();
m_phase = APOP_WAIT;
@@ -398,7 +397,6 @@ Error CAutoPortico::GetError()
void CAutoPortico::UpdateTrackMapping(float left, float right)
{
Gfx::Material mat;
- float limit[2];
int rank;
memset( &mat, 0, sizeof(Gfx::Material));
@@ -411,15 +409,12 @@ void CAutoPortico::UpdateTrackMapping(float left, float right)
rank = m_object->GetObjectRank(0);
- limit[0] = 0.0f;
- limit[1] = 1000000.0f;
-
m_engine->TrackTextureMapping(rank, mat, Gfx::ENG_RSTATE_PART1, "lemt.png", "",
- limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X,
+ Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X,
right, 8.0f, 8.0f, 192.0f, 256.0f);
m_engine->TrackTextureMapping(rank, mat, Gfx::ENG_RSTATE_PART2, "lemt.png", "",
- limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X,
+ Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X,
left, 8.0f, 8.0f, 192.0f, 256.0f);
}
diff --git a/src/object/auto/autoportico.h b/src/object/auto/autoportico.h
index c211d37..0aa580f 100644
--- a/src/object/auto/autoportico.h
+++ b/src/object/auto/autoportico.h
@@ -40,7 +40,7 @@ enum AutoPorticoPhase
class CAutoPortico : public CAuto
{
public:
- CAutoPortico(CInstanceManager* iMan, CObject* object);
+ CAutoPortico(CObject* object);
~CAutoPortico();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoradar.cpp b/src/object/auto/autoradar.cpp
index 4214d17..1a10aa7 100644
--- a/src/object/auto/autoradar.cpp
+++ b/src/object/auto/autoradar.cpp
@@ -19,7 +19,9 @@
#include "object/auto/autoradar.h"
#include "common/iman.h"
+
#include "math/geometry.h"
+
#include "ui/interface.h"
#include "ui/window.h"
#include "ui/gauge.h"
@@ -29,8 +31,7 @@
// Object's constructor.
-CAutoRadar::CAutoRadar(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoRadar::CAutoRadar(CObject* object) : CAuto(object)
{
Init();
m_phase = ARAP_WAIT;
diff --git a/src/object/auto/autoradar.h b/src/object/auto/autoradar.h
index e2c9df5..86833f9 100644
--- a/src/object/auto/autoradar.h
+++ b/src/object/auto/autoradar.h
@@ -37,7 +37,7 @@ enum AutoRadarPhase
class CAutoRadar : public CAuto
{
public:
- CAutoRadar(CInstanceManager* iMan, CObject* object);
+ CAutoRadar(CObject* object);
~CAutoRadar();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autorepair.cpp b/src/object/auto/autorepair.cpp
index cf4f33e..95b6cc8 100644
--- a/src/object/auto/autorepair.cpp
+++ b/src/object/auto/autorepair.cpp
@@ -19,8 +19,11 @@
#include "object/auto/autorepair.h"
#include "common/iman.h"
+
#include "physics/physics.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
@@ -30,8 +33,7 @@
// Object's constructor.
-CAutoRepair::CAutoRepair(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoRepair::CAutoRepair(CObject* object) : CAuto(object)
{
Init();
m_phase = ARP_WAIT; // paused until the first Init ()
diff --git a/src/object/auto/autorepair.h b/src/object/auto/autorepair.h
index e8bb0b1..31a3c65 100644
--- a/src/object/auto/autorepair.h
+++ b/src/object/auto/autorepair.h
@@ -38,7 +38,7 @@ enum AutoRepairPhase
class CAutoRepair : public CAuto
{
public:
- CAutoRepair(CInstanceManager* iMan, CObject* object);
+ CAutoRepair(CObject* object);
~CAutoRepair();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoresearch.cpp b/src/object/auto/autoresearch.cpp
index 9f423ec..3c32307 100644
--- a/src/object/auto/autoresearch.cpp
+++ b/src/object/auto/autoresearch.cpp
@@ -19,9 +19,13 @@
#include "object/auto/autoresearch.h"
#include "common/global.h"
+
#include "math/geometry.h"
+
#include "object/robotmain.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/gauge.h"
#include "ui/window.h"
@@ -37,8 +41,7 @@ const float SEARCH_TIME = 30.0f; // duration of a research
// Object's constructor.
-CAutoResearch::CAutoResearch(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoResearch::CAutoResearch(CObject* object) : CAuto(object)
{
int i;
@@ -488,7 +491,7 @@ void CAutoResearch::SetResearch(EventType event)
m_main->WriteFreeParam();
Event newEvent(EVENT_UPDINTERFACE);
- m_event->AddEvent(newEvent);
+ m_eventQueue->AddEvent(newEvent);
UpdateInterface();
}
diff --git a/src/object/auto/autoresearch.h b/src/object/auto/autoresearch.h
index a838e64..6c804ef 100644
--- a/src/object/auto/autoresearch.h
+++ b/src/object/auto/autoresearch.h
@@ -35,7 +35,7 @@ enum AutoResearchPhase
class CAutoResearch : public CAuto
{
public:
- CAutoResearch(CInstanceManager* iMan, CObject* object);
+ CAutoResearch(CObject* object);
~CAutoResearch();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autoroot.cpp b/src/object/auto/autoroot.cpp
index 196ed5d..a390e90 100644
--- a/src/object/auto/autoroot.cpp
+++ b/src/object/auto/autoroot.cpp
@@ -19,6 +19,7 @@
#include "graphics/engine/particle.h"
#include "graphics/engine/terrain.h"
+
#include "math/geometry.h"
#include <stdio.h>
@@ -26,8 +27,7 @@
// Object's constructor.
-CAutoRoot::CAutoRoot(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoRoot::CAutoRoot(CObject* object) : CAuto(object)
{
Init();
}
diff --git a/src/object/auto/autoroot.h b/src/object/auto/autoroot.h
index d80abe8..3eb906c 100644
--- a/src/object/auto/autoroot.h
+++ b/src/object/auto/autoroot.h
@@ -27,7 +27,7 @@
class CAutoRoot : public CAuto
{
public:
- CAutoRoot(CInstanceManager* iMan, CObject* object);
+ CAutoRoot(CObject* object);
~CAutoRoot();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autosafe.cpp b/src/object/auto/autosafe.cpp
index e89acea..fc83400 100644
--- a/src/object/auto/autosafe.cpp
+++ b/src/object/auto/autosafe.cpp
@@ -19,9 +19,13 @@
#include "object/auto/autosafe.h"
#include "common/iman.h"
+
#include "math/geometry.h"
+
#include "object/robotmain.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/window.h"
@@ -34,8 +38,7 @@ const float OPEN_DELAY = 8.0f; // duration of opening
// Object's constructor.
-CAutoSafe::CAutoSafe(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoSafe::CAutoSafe(CObject* object) : CAuto(object)
{
int i;
diff --git a/src/object/auto/autosafe.h b/src/object/auto/autosafe.h
index 3c0bcce..b575b4e 100644
--- a/src/object/auto/autosafe.h
+++ b/src/object/auto/autosafe.h
@@ -36,7 +36,7 @@ enum AutoSafePhase
class CAutoSafe : public CAuto
{
public:
- CAutoSafe(CInstanceManager* iMan, CObject* object);
+ CAutoSafe(CObject* object);
~CAutoSafe();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autostation.cpp b/src/object/auto/autostation.cpp
index e99ae4b..a2f5b6b 100644
--- a/src/object/auto/autostation.cpp
+++ b/src/object/auto/autostation.cpp
@@ -19,9 +19,12 @@
#include "object/auto/autostation.h"
#include "common/iman.h"
+
#include "graphics/engine/particle.h"
#include "graphics/engine/terrain.h"
+
#include "math/geometry.h"
+
#include "ui/interface.h"
#include "ui/gauge.h"
#include "ui/window.h"
@@ -31,8 +34,7 @@
// Object's constructor.
-CAutoStation::CAutoStation(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoStation::CAutoStation(CObject* object) : CAuto(object)
{
Init();
}
diff --git a/src/object/auto/autostation.h b/src/object/auto/autostation.h
index cb8be2b..d8a37b4 100644
--- a/src/object/auto/autostation.h
+++ b/src/object/auto/autostation.h
@@ -27,7 +27,7 @@
class CAutoStation : public CAuto
{
public:
- CAutoStation(CInstanceManager* iMan, CObject* object);
+ CAutoStation(CObject* object);
~CAutoStation();
void DeleteObject(bool bAll=false);
diff --git a/src/object/auto/autotower.cpp b/src/object/auto/autotower.cpp
index 84dcd85..e3b06cf 100644
--- a/src/object/auto/autotower.cpp
+++ b/src/object/auto/autotower.cpp
@@ -19,9 +19,13 @@
#include "object/auto/autotower.h"
#include "common/iman.h"
+
#include "math/geometry.h"
+
#include "physics/physics.h"
+
#include "script/cmdtoken.h"
+
#include "ui/interface.h"
#include "ui/displaytext.h"
#include "ui/window.h"
@@ -37,8 +41,7 @@ const float ENERGY_FIRE = 0.125f; // energy consumed by fire
// Object's constructor.
-CAutoTower::CAutoTower(CInstanceManager* iMan, CObject* object)
- : CAuto(iMan, object)
+CAutoTower::CAutoTower(CObject* object) : CAuto(object)
{
int i;
diff --git a/src/object/auto/autotower.h b/src/object/auto/autotower.h
index b29ba85..d219fb5 100644
--- a/src/object/auto/autotower.h
+++ b/src/object/auto/autotower.h
@@ -38,7 +38,7 @@ enum AutoTowerPhase
class CAutoTower : public CAuto
{
public:
- CAutoTower(CInstanceManager* iMan, CObject* object);
+ CAutoTower(CObject* object);
~CAutoTower();
void DeleteObject(bool bAll=false);
diff --git a/src/object/brain.cpp b/src/object/brain.cpp
index ef7309d..fa3e425 100644
--- a/src/object/brain.cpp
+++ b/src/object/brain.cpp
@@ -17,8 +17,10 @@
#include "object/brain.h"
-#include "common/misc.h"
+#include "app/app.h"
+
#include "common/iman.h"
+#include "common/misc.h"
#include "graphics/core/color.h"
#include "graphics/engine/terrain.h"
@@ -47,28 +49,25 @@ const int MAXTRACERECORD = 1000;
// Object's constructor.
-CBrain::CBrain(CInstanceManager* iMan, CObject* object)
+CBrain::CBrain(CObject* object)
{
- int i;
-
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_BRAIN, this, 100);
+ CInstanceManager::GetInstancePointer()->AddInstance(CLASS_BRAIN, this, 100);
m_object = object;
- m_engine = static_cast<Gfx::CEngine*>(m_iMan->SearchInstance(CLASS_ENGINE));
- m_terrain = static_cast<Gfx::CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
- m_water = static_cast<Gfx::CWater*>(m_iMan->SearchInstance(CLASS_WATER));
- m_camera = static_cast<Gfx::CCamera*>(m_iMan->SearchInstance(CLASS_CAMERA));
- m_interface = static_cast<Ui::CInterface*>(m_iMan->SearchInstance(CLASS_INTERFACE));
- 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_particle = static_cast<Gfx::CParticle*>(m_iMan->SearchInstance(CLASS_PARTICULE));
- m_physics = 0;
- m_motion = 0;
- m_primaryTask = 0;
- m_secondaryTask = 0;
- m_studio = 0;
+ m_engine = Gfx::CEngine::GetInstancePointer();
+ m_water = m_engine->GetWater();
+ m_particle = m_engine->GetParticle();
+ m_main = CRobotMain::GetInstancePointer();
+ m_terrain = m_main->GetTerrain();
+ m_camera = m_main->GetCamera();
+ m_interface = m_main->GetInterface();
+ m_displayText = m_main->GetDisplayText();
+ m_sound = CApplication::GetInstancePointer()->GetSound();
+ m_physics = nullptr;
+ m_motion = nullptr;
+ m_primaryTask = nullptr;
+ m_secondaryTask = nullptr;
+ m_studio = nullptr;
m_program = -1;
m_bActivity = true;
@@ -89,7 +88,7 @@ CBrain::CBrain(CInstanceManager* iMan, CObject* object)
m_defaultEnter = EVENT_NULL;
m_manipStyle = EVENT_OBJECT_MFRONT;
- for ( i=0 ; i<BRAINMAXSCRIPT ; i++ )
+ for (int i=0 ; i<BRAINMAXSCRIPT ; i++ )
{
m_script[i] = 0;
m_scriptName[i][0] = 0;
@@ -106,9 +105,7 @@ CBrain::CBrain(CInstanceManager* iMan, CObject* object)
CBrain::~CBrain()
{
- int i;
-
- for ( i=0 ; i<BRAINMAXSCRIPT ; i++ )
+ for (int i=0 ; i<BRAINMAXSCRIPT ; i++ )
{
delete m_script[i];
m_script[i] = nullptr;
@@ -126,7 +123,7 @@ CBrain::~CBrain()
delete[] m_traceRecordBuffer;
m_traceRecordBuffer = nullptr;
- m_iMan->DeleteInstance(CLASS_BRAIN, this);
+ CInstanceManager::GetInstancePointer()->DeleteInstance(CLASS_BRAIN, this);
}
@@ -255,7 +252,7 @@ bool CBrain::EventProcess(const Event &event)
if ( m_object->GetSelect() && // robot selected?
m_studio != 0 ) // current issue?
{
- // m_studio->EventProcess(event);
+ m_studio->EventProcess(event);
if ( action == EVENT_OBJECT_PROGRUN )
{
@@ -528,6 +525,10 @@ bool CBrain::EventProcess(const Event &event)
{
err = StartTaskBuild(OBJECT_INFO);
}
+ if ( action == EVENT_OBJECT_BDESTROYER )
+ {
+ err = StartTaskBuild(OBJECT_DESTROYER);
+ }
if ( action == EVENT_OBJECT_GFLAT )
{
@@ -601,6 +602,11 @@ bool CBrain::EventProcess(const Event &event)
//? err = StartTaskFireAnt();
}
+ if ( action == EVENT_OBJECT_SPIDEREXPLO && m_primaryTask == 0 )
+ {
+ err = StartTaskSpiderExplo();
+ }
+
if ( action == EVENT_OBJECT_PEN0 ) // up
{
err = StartTaskPen(false, m_object->GetTraceColor());
@@ -869,7 +875,7 @@ void CBrain::StartEditScript(int rank, char* name)
if ( m_script[rank] == 0 )
{
- m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask);
+ m_script[rank] = new CScript(m_object, &m_secondaryTask);
}
m_studio = new Ui::CStudio();
@@ -904,7 +910,7 @@ Error CBrain::StartTaskTake()
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskTake();
UpdateInterface();
return err;
@@ -922,7 +928,7 @@ Error CBrain::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskManip(order, arm);
UpdateInterface();
return err;
@@ -940,7 +946,7 @@ Error CBrain::StartTaskFlag(TaskFlagOrder order, int rank)
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskFlag(order, rank);
UpdateInterface();
return err;
@@ -958,7 +964,7 @@ Error CBrain::StartTaskBuild(ObjectType type)
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskBuild(type);
UpdateInterface();
return err;
@@ -976,7 +982,7 @@ Error CBrain::StartTaskSearch()
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskSearch();
UpdateInterface();
return err;
@@ -994,7 +1000,7 @@ Error CBrain::StartTaskTerraform()
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskTerraform();
UpdateInterface();
return err;
@@ -1016,7 +1022,7 @@ Error CBrain::StartTaskPen(bool bDown, int color)
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskPen(bDown, color);
UpdateInterface();
return err;
@@ -1034,7 +1040,7 @@ Error CBrain::StartTaskRecover()
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskRecover();
UpdateInterface();
return err;
@@ -1052,7 +1058,7 @@ Error CBrain::StartTaskShield(TaskShieldMode mode)
m_secondaryTask = 0;
}
- m_secondaryTask = new CTaskManager(m_iMan, m_object);
+ m_secondaryTask = new CTaskManager(m_object);
err = m_secondaryTask->StartTaskShield(mode, 1000.0f);
UpdateInterface();
return err;
@@ -1070,12 +1076,30 @@ Error CBrain::StartTaskFire(float delay)
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskFire(delay);
UpdateInterface();
return err;
}
+// Explodes spider.
+
+Error CBrain::StartTaskSpiderExplo()
+{
+ Error err;
+
+ if ( m_primaryTask != 0 )
+ {
+ delete m_primaryTask; // stops the current task
+ m_primaryTask = 0;
+ }
+
+ m_primaryTask = new CTaskManager(m_object);
+ err = m_primaryTask->StartTaskSpiderExplo();
+ UpdateInterface();
+ return err;
+}
+
// Shoots to the ant.
Error CBrain::StartTaskFireAnt(Math::Vector impact)
@@ -1088,7 +1112,7 @@ Error CBrain::StartTaskFireAnt(Math::Vector impact)
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskFireAnt(impact);
UpdateInterface();
return err;
@@ -1106,7 +1130,7 @@ Error CBrain::StartTaskGunGoal(float dirV, float dirH)
m_secondaryTask = 0;
}
- m_secondaryTask = new CTaskManager(m_iMan, m_object);
+ m_secondaryTask = new CTaskManager(m_object);
err = m_secondaryTask->StartTaskGunGoal(dirV, dirH);
UpdateInterface();
return err;
@@ -1124,7 +1148,7 @@ Error CBrain::StartTaskReset(Math::Vector goal, Math::Vector angle)
m_primaryTask = 0;
}
- m_primaryTask = new CTaskManager(m_iMan, m_object);
+ m_primaryTask = new CTaskManager(m_object);
err = m_primaryTask->StartTaskReset(goal, angle);
UpdateInterface();
return err;
@@ -1287,18 +1311,20 @@ bool CBrain::CreateInterface(bool bSelect)
type == OBJECT_BEE ||
type == OBJECT_WORM ) // vehicle?
{
- ddim.x = dim.x*5.1f;
- ddim.y = dim.y*2.0f;
- pos.x = ox+sx*0.0f;
- pos.y = oy+sy*0.0f;
- pw->CreateList(pos, ddim, -1, EVENT_OBJECT_PROGLIST, 1.10f);
- UpdateScript(pw);
+ if (!(m_main->GetRetroMode())) {
+ ddim.x = dim.x*5.1f;
+ ddim.y = dim.y*2.0f;
+ pos.x = ox+sx*0.0f;
+ pos.y = oy+sy*0.0f;
+ pw->CreateList(pos, ddim, -1, EVENT_OBJECT_PROGLIST, 1.10f);
+ UpdateScript(pw);
- pos.x = ox+sx*5.2f;
- pos.y = oy+sy*1.0f;
- pw->CreateButton(pos, dim, 8, EVENT_OBJECT_PROGRUN);
- pos.y = oy+sy*0.0f;
- pw->CreateButton(pos, dim, 22, EVENT_OBJECT_PROGEDIT);
+ pos.x = ox+sx*5.2f;
+ pos.y = oy+sy*1.0f;
+ pw->CreateButton(pos, dim, 8, EVENT_OBJECT_PROGRUN);
+ pos.y = oy+sy*0.0f;
+ pw->CreateButton(pos, dim, 22, EVENT_OBJECT_PROGEDIT);
+ }
}
if ( type == OBJECT_HUMAN ||
@@ -1363,8 +1389,9 @@ bool CBrain::CreateInterface(bool bSelect)
pw->CreateButton(pos, dim, 33, EVENT_OBJECT_MFRONT);
}
- if ( type == OBJECT_MOBILEsa && // underwater?
- !m_object->GetTrainer() )
+ if ( ( type == OBJECT_MOBILEsa && // underwater?
+ !m_object->GetTrainer() ) ||
+ type == OBJECT_BEE )
{
pos.x = ox+sx*7.7f;
pos.y = oy+sy*0.5f;
@@ -1454,8 +1481,8 @@ bool CBrain::CreateInterface(bool bSelect)
pos.x = ox+sx*5.4f;
pos.y = oy+sy*0.1f;
- pw->CreateButton(pos, ddim, 128+56, EVENT_OBJECT_BXXXX);
- DeadInterface(pw, EVENT_OBJECT_BXXXX, false);
+ pw->CreateButton(pos, ddim, 128+41, EVENT_OBJECT_BDESTROYER);
+ DeadInterface(pw, EVENT_OBJECT_BDESTROYER, g_build&BUILD_DESTROYER);
if ( g_build&BUILD_GFLAT )
{
@@ -1577,6 +1604,15 @@ bool CBrain::CreateInterface(bool bSelect)
//? pw->CreateButton(pos, dim, 41, EVENT_OBJECT_LIMIT);
}
+ if ( type == OBJECT_SPIDER )
+ {
+ pos.x = ox+sx*7.7f;
+ pos.y = oy+sy*0.5f;
+ pb = pw->CreateButton(pos, dim, 42, EVENT_OBJECT_SPIDEREXPLO);
+ pb->SetImmediat(true);
+ DefaultEnter(pw, EVENT_OBJECT_SPIDEREXPLO);
+ }
+
if ( type == OBJECT_MOBILEdr &&
m_object->GetManual() ) // scribbler in manual mode?
{
@@ -1908,9 +1944,7 @@ bool CBrain::CreateInterface(bool bSelect)
void CBrain::UpdateInterface(float rTime)
{
Ui::CWindow* pw;
-/* TODO: #if _TEEN
Ui::CButton* pb;
-#endif*/
Ui::CGauge* pg;
Ui::CCompass* pc;
Ui::CGroup* pgr;
@@ -1947,6 +1981,7 @@ void CBrain::UpdateInterface(float rTime)
if ( power == 0 )
{
energy = 0.0f;
+ limit = 0.0f;
}
else
{
@@ -2021,8 +2056,7 @@ void CBrain::UpdateInterface(float rTime)
pc->SetState(Ui::STATE_VISIBLE, m_main->GetShowMap());
}
-#if _TEEN
- pb = (CButton*)pw->SearchControl(EVENT_OBJECT_REC);
+ pb = (Ui::CButton*)pw->SearchControl(EVENT_OBJECT_REC);
if ( pb != 0 )
{
if ( m_bTraceRecord && Math::Mod(m_time, 0.4f) >= 0.2f )
@@ -2034,7 +2068,6 @@ void CBrain::UpdateInterface(float rTime)
pb->ClearState(Ui::STATE_CHECK);
}
}
-#endif
bOnBoard = m_camera->GetType() == Gfx::CAM_TYPE_ONBOARD;
@@ -2114,10 +2147,8 @@ void CBrain::UpdateInterface()
Ui::CWindow* pw;
Ui::CButton* pb;
Ui::CSlider* ps;
-#if _TEEN
- CColor* pc;
+ Ui::CColor* pc;
int color;
-#endif
bool bEnable, bFly, bRun;
char title[100];
@@ -2132,38 +2163,37 @@ void CBrain::UpdateInterface()
bEnable = ( m_primaryTask == 0 && m_program == -1 );
- EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord));
- EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord);
- EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_UP, bEnable);
- EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable);
- EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable);
- EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable);
- EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable);
- EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable);
- EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable);
- EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable);
- EnableInterface(pw, EVENT_OBJECT_RESET, bEnable);
-#if _TEEN
- EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable);
- EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable);
- EnableInterface(pw, EVENT_OBJECT_REC, bEnable);
- EnableInterface(pw, EVENT_OBJECT_STOP, bEnable);
-#endif
+ EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord));
+ EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord);
+ EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_UP, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_SPIDEREXPLO, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_RESET, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_REC, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_STOP, bEnable);
if ( type == OBJECT_HUMAN ) // builder?
{
@@ -2180,7 +2210,7 @@ void CBrain::UpdateInterface()
EnableInterface(pw, EVENT_OBJECT_BNUCLEAR, bEnable);
EnableInterface(pw, EVENT_OBJECT_BPARA, bEnable);
EnableInterface(pw, EVENT_OBJECT_BINFO, bEnable);
- EnableInterface(pw, EVENT_OBJECT_BXXXX, bEnable);
+ EnableInterface(pw, EVENT_OBJECT_BDESTROYER,bEnable);
}
pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_GFLAT));
@@ -2314,7 +2344,6 @@ void CBrain::UpdateInterface()
CheckInterface(pw, EVENT_OBJECT_MFRONT, m_manipStyle==EVENT_OBJECT_MFRONT);
}
-#if _TEEN
if ( m_object->GetTraceDown() )
{
pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_PEN0));
@@ -2414,7 +2443,6 @@ void CBrain::UpdateInterface()
pc->ClearState(Ui::STATE_CHECK);
}
}
-#endif
}
// Updates the list of programs.
@@ -2693,7 +2721,7 @@ bool CBrain::ReadProgram(int rank, const char* filename)
{
if ( m_script[rank] == 0 )
{
- m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask);
+ m_script[rank] = new CScript(m_object, &m_secondaryTask);
}
if ( m_script[rank]->ReadScript(filename) ) return true;
@@ -2718,7 +2746,7 @@ bool CBrain::WriteProgram(int rank, char* filename)
{
if ( m_script[rank] == 0 )
{
- m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask);
+ m_script[rank] = new CScript(m_object, &m_secondaryTask);
}
if ( m_script[rank]->WriteScript(filename) ) return true;
@@ -2748,7 +2776,7 @@ bool CBrain::ReadStack(FILE *file)
if ( m_script[op] == 0 )
{
- m_script[op] = new CScript(m_iMan, m_object, &m_secondaryTask);
+ m_script[op] = new CScript(m_object, &m_secondaryTask);
}
if ( !m_script[op]->ReadStack(file) ) return false;
}
@@ -2910,7 +2938,7 @@ void CBrain::TraceRecordStop()
i = m_selScript;
if ( m_script[i] == 0 )
{
- m_script[i] = new CScript(m_iMan, m_object, &m_secondaryTask);
+ m_script[i] = new CScript(m_object, &m_secondaryTask);
}
m_script[i]->SendScript(buffer);
delete[] buffer;
diff --git a/src/object/brain.h b/src/object/brain.h
index ce7116e..eba8004 100644
--- a/src/object/brain.h
+++ b/src/object/brain.h
@@ -31,7 +31,6 @@
#include "object/task/taskshield.h"
-class CInstanceManager;
class CObject;
class CPhysics;
class CMotion;
@@ -80,7 +79,7 @@ struct TraceRecord
class CBrain
{
public:
- CBrain(CInstanceManager* iMan, CObject* object);
+ CBrain(CObject* object);
~CBrain();
void DeleteObject(bool bAll=false);
@@ -134,6 +133,7 @@ public:
Error StartTaskShield(TaskShieldMode mode);
Error StartTaskFire(float delay);
Error StartTaskFireAnt(Math::Vector impact);
+ Error StartTaskSpiderExplo();
Error StartTaskGunGoal(float dirV, float dirH);
Error StartTaskReset(Math::Vector goal, Math::Vector angle);
@@ -167,7 +167,6 @@ protected:
bool TraceRecordPut(char *buffer, int max, TraceOper oper, float param);
protected:
- CInstanceManager* m_iMan;
Gfx::CEngine* m_engine;
Gfx::CTerrain* m_terrain;
Gfx::CWater* m_water;
diff --git a/src/object/mainmovie.cpp b/src/object/mainmovie.cpp
index 9aaf345..04c0d56 100644
--- a/src/object/mainmovie.cpp
+++ b/src/object/mainmovie.cpp
@@ -17,7 +17,7 @@
#include "object/mainmovie.h"
-#include "common/iman.h"
+#include "app/app.h"
#include "math/geometry.h"
@@ -30,15 +30,12 @@
// Constructor of the application card.
-CMainMovie::CMainMovie(CInstanceManager* iMan)
+CMainMovie::CMainMovie()
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_SHORT, this);
-
- m_engine = static_cast< Gfx::CEngine* >(m_iMan->SearchInstance(CLASS_ENGINE));
- m_main = static_cast< CRobotMain* >(m_iMan->SearchInstance(CLASS_MAIN));
- m_camera = static_cast< Gfx::CCamera* >(m_iMan->SearchInstance(CLASS_CAMERA));
- m_sound = static_cast< CSoundInterface* >(m_iMan->SearchInstance(CLASS_SOUND));
+ m_engine = Gfx::CEngine::GetInstancePointer();
+ m_main = CRobotMain::GetInstancePointer();
+ m_camera = m_main->GetCamera();
+ m_sound = CApplication::GetInstancePointer()->GetSound();
Flush();
}
diff --git a/src/object/mainmovie.h b/src/object/mainmovie.h
index eba21eb..4554431 100644
--- a/src/object/mainmovie.h
+++ b/src/object/mainmovie.h
@@ -23,18 +23,17 @@
#include "common/event.h"
+
#include "math/vector.h"
-class CInstanceManager;
class CRobotMain;
class CSoundInterface;
-namespace Gfx
-{
- class CCamera;
- class CEngine;
-};
+namespace Gfx {
+class CCamera;
+class CEngine;
+}
enum MainMovieType
{
@@ -48,7 +47,7 @@ enum MainMovieType
class CMainMovie
{
public:
- CMainMovie(CInstanceManager* iMan);
+ CMainMovie();
~CMainMovie();
void Flush();
@@ -60,9 +59,6 @@ public:
MainMovieType GetStopType();
protected:
-
-protected:
- CInstanceManager* m_iMan;
Gfx::CEngine* m_engine;
CRobotMain* m_main;
Gfx::CCamera* m_camera;
diff --git a/src/object/motion/motion.cpp b/src/object/motion/motion.cpp
index 605091f..00b3073 100644
--- a/src/object/motion/motion.cpp
+++ b/src/object/motion/motion.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "common/iman.h"
+#include "object/robotmain.h"
#include "script/cmdtoken.h"
@@ -30,20 +30,16 @@
// Object's constructor.
-CMotion::CMotion(CInstanceManager* iMan, CObject* object)
+CMotion::CMotion(CObject* object)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_MOTION, this, 100);
-
m_app = CApplication::GetInstancePointer();
- m_engine = static_cast< Gfx::CEngine* >(m_iMan->SearchInstance(CLASS_ENGINE));
- m_light = static_cast< Gfx::CLight* >(m_iMan->SearchInstance(CLASS_LIGHT));
- m_particle = static_cast< Gfx::CParticle* >(m_iMan->SearchInstance(CLASS_PARTICULE));
- m_terrain = static_cast< Gfx::CTerrain* >(m_iMan->SearchInstance(CLASS_TERRAIN));
- m_water = static_cast< Gfx::CWater* >(m_iMan->SearchInstance(CLASS_WATER));
- m_camera = static_cast< Gfx::CCamera* >(m_iMan->SearchInstance(CLASS_CAMERA));
- m_main = static_cast< CRobotMain* >(m_iMan->SearchInstance(CLASS_MAIN));
- m_sound = static_cast< CSoundInterface* >(m_iMan->SearchInstance(CLASS_SOUND));
+ m_sound = m_app->GetSound();
+ m_engine = Gfx::CEngine::GetInstancePointer();
+ m_particle = m_engine->GetParticle();
+ m_water = m_engine->GetWater();
+ m_main = CRobotMain::GetInstancePointer();
+ m_terrain = m_main->GetTerrain();
+ m_camera = m_main->GetCamera();
m_object = object;
m_physics = 0;
@@ -62,7 +58,6 @@ CMotion::CMotion(CInstanceManager* iMan, CObject* object)
CMotion::~CMotion()
{
- m_iMan->DeleteInstance(CLASS_MOTION, this);
}
// Deletes the object.
diff --git a/src/object/motion/motion.h b/src/object/motion/motion.h
index 81bcb08..d35ee67 100644
--- a/src/object/motion/motion.h
+++ b/src/object/motion/motion.h
@@ -27,14 +27,12 @@
namespace Gfx {
class CEngine;
-class CLight;
class CParticle;
class CTerrain;
class CWater;
class CCamera;
}
-class CInstanceManager;
class CApplication;
class CBrain;
class CPhysics;
@@ -46,7 +44,7 @@ class CSoundInterface;
class CMotion
{
public:
- CMotion(CInstanceManager* iMan, CObject* object);
+ CMotion(CObject* object);
virtual ~CMotion();
void SetPhysics(CPhysics* physics);
@@ -72,12 +70,8 @@ public:
virtual Math::Vector GetInclinaison();
protected:
-
-protected:
- CInstanceManager* m_iMan;
CApplication* m_app;
Gfx::CEngine* m_engine;
- Gfx::CLight* m_light;
Gfx::CParticle* m_particle;
Gfx::CTerrain* m_terrain;
Gfx::CWater* m_water;
diff --git a/src/object/motion/motionant.cpp b/src/object/motion/motionant.cpp
index 07ee6b8..384d683 100644
--- a/src/object/motion/motionant.cpp
+++ b/src/object/motion/motionant.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "graphics/engine/particle.h"
#include "physics/physics.h"
@@ -35,8 +35,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time
// Object's constructor.
-CMotionAnt::CMotionAnt(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionAnt::CMotionAnt(CObject* object) : CMotion(object)
{
m_armMember = START_TIME;
m_armTimeAbs = START_TIME;
@@ -69,12 +68,8 @@ void CMotionAnt::DeleteObject(bool bAll)
bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
- int rank;
-
-// if ( m_engine->GetRestCreate() < 3+18 ) return false;
-
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
+ int rank;
m_object->SetType(type);
@@ -82,10 +77,7 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
-
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant1.mod"));
- pModFile->CreateEngineObject(rank);
-
+ modelManager->AddModelReference("ant1.mod", false, rank);
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
@@ -96,29 +88,26 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type,
// Creates the head.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant2.mod", false, rank);
m_object->SetPosition(1, Math::Vector(2.0f, 0.0f, 0.0f));
// Creates the tail.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant3.mod", false, rank);
m_object->SetPosition(2, Math::Vector(-1.0f, 0.0f, 0.0f));
// Creates a right-back thigh.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(3, Math::Vector(-0.4f, -0.1f, -0.3f));
// Creates a right-back leg.
@@ -126,161 +115,135 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(4, rank);
m_object->SetObjectParent(4, 3);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(4, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates a right-back foot.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(5, rank);
m_object->SetObjectParent(5, 4);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates two middle-right thighs.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.1f, -0.1f, -0.4f));
// Creates two middle-right legs.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 6);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates two middle-right foots.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 7);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(8, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates the right front thigh.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(9, Math::Vector(1.4f, -0.1f, -0.6f));
// Creates the right front leg.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(10, rank);
m_object->SetObjectParent(10, 9);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(10, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates the right front foot.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(11, rank);
m_object->SetObjectParent(11, 10);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates a left-back thigh.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(12, rank);
m_object->SetObjectParent(12, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", true, rank);
m_object->SetPosition(12, Math::Vector(-0.4f, -0.1f, 0.3f));
// Creates a left-back leg.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(13, rank);
m_object->SetObjectParent(13, 12);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", true, rank);
m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, 1.0f));
// Creates a left-back foot.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(14, rank);
m_object->SetObjectParent(14, 13);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", true, rank);
m_object->SetPosition(14, Math::Vector(0.0f, 0.0f, 2.0f));
// Creates two middle-left thighs.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(15, rank);
m_object->SetObjectParent(15, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", true, rank);
m_object->SetPosition(15, Math::Vector(0.1f, -0.1f, 0.4f));
// Creates two middle-left legs.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(16, rank);
m_object->SetObjectParent(16, 15);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", true, rank);
m_object->SetPosition(16, Math::Vector(0.0f, 0.0f, 1.0f));
// Creates two middle-left foot.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(17, rank);
m_object->SetObjectParent(17, 16);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", true, rank);
m_object->SetPosition(17, Math::Vector(0.0f, 0.0f, 2.0f));
// Creates the left front thigh.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(18, rank);
m_object->SetObjectParent(18, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", true, rank);
m_object->SetPosition(18, Math::Vector(1.4f, -0.1f, 0.6f));
// Creates the left front leg.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(19, rank);
m_object->SetObjectParent(19, 18);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", true, rank);
m_object->SetPosition(19, Math::Vector(0.0f, 0.0f, 1.0f));
// Creates the left front foot.
rank = m_engine->CreateObject();
- m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
+ m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(20, rank);
m_object->SetObjectParent(20, 19);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", true, rank);
m_object->SetPosition(20, Math::Vector(0.0f, 0.0f, 2.0f));
m_object->CreateShadowCircle(4.0f, 0.5f);
@@ -293,7 +256,6 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
diff --git a/src/object/motion/motionant.h b/src/object/motion/motionant.h
index 68a3b7f..45d02b3 100644
--- a/src/object/motion/motionant.h
+++ b/src/object/motion/motionant.h
@@ -46,7 +46,7 @@ enum MotionAntSpecialAction
class CMotionAnt : public CMotion
{
public:
- CMotionAnt(CInstanceManager* iMan, CObject* object);
+ CMotionAnt(CObject* object);
~CMotionAnt();
void DeleteObject(bool bAll=false);
diff --git a/src/object/motion/motionbee.cpp b/src/object/motion/motionbee.cpp
index a3421b8..8f69945 100644
--- a/src/object/motion/motionbee.cpp
+++ b/src/object/motion/motionbee.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "physics/physics.h"
@@ -34,8 +34,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time
// Object's constructor.
-CMotionBee::CMotionBee(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionBee::CMotionBee(CObject* object) : CMotion(object)
{
m_armMember = START_TIME;
m_armTimeAbs = START_TIME;
@@ -67,12 +66,8 @@ void CMotionBee::DeleteObject(bool bAll)
bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
- int rank;
-
-// if ( m_engine->GetRestCreate() < 3+18+2 ) return false;
-
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
+ int rank;
m_object->SetType(type);
@@ -80,10 +75,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
-
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee1.mod"));
- pModFile->CreateEngineObject(rank);
-
+ modelManager->AddModelReference("bee1.mod", false, rank);
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
@@ -97,8 +89,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("bee2.mod", false, rank);
m_object->SetPosition(1, Math::Vector(1.6f, 0.3f, 0.0f));
// Creates the tail.
@@ -106,8 +97,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("bee3.mod", false, rank);
m_object->SetPosition(2, Math::Vector(-0.8f, 0.0f, 0.0f));
// Creates a right-back thigh.
@@ -115,8 +105,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(3, Math::Vector(-0.3f, -0.1f, -0.2f));
// Creates a right-back leg.
@@ -124,8 +113,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(4, rank);
m_object->SetObjectParent(4, 3);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(4, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates a right-back foot.
@@ -133,8 +121,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(5, rank);
m_object->SetObjectParent(5, 4);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates two middle-right thighs.
@@ -142,8 +129,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.3f, -0.1f, -0.4f));
// Creates two middle-right legs.
@@ -151,8 +137,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 6);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates two middle-right feet.
@@ -160,8 +145,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 7);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(8, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates the right front thigh.
@@ -169,8 +153,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(9, Math::Vector(1.0f, -0.1f, -0.7f));
// Creates the right front leg.
@@ -178,8 +161,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(10, rank);
m_object->SetObjectParent(10, 9);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(10, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates the right front foot.
@@ -187,8 +169,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(11, rank);
m_object->SetObjectParent(11, 10);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates a left-back thigh.
@@ -196,8 +177,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(12, rank);
m_object->SetObjectParent(12, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(12, Math::Vector(-0.3f, -0.1f, 0.2f));
m_object->SetAngleY(12, Math::PI);
@@ -206,8 +186,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(13, rank);
m_object->SetObjectParent(13, 12);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates a left-back foot.
@@ -215,8 +194,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(14, rank);
m_object->SetObjectParent(14, 13);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(14, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates two middle-left thigh.
@@ -224,8 +202,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(15, rank);
m_object->SetObjectParent(15, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(15, Math::Vector(0.3f, -0.1f, 0.4f));
m_object->SetAngleY(15, Math::PI);
@@ -234,8 +211,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(16, rank);
m_object->SetObjectParent(16, 15);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(16, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates two middle-left feet.
@@ -243,8 +219,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(17, rank);
m_object->SetObjectParent(17, 16);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(17, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates front-left thigh.
@@ -252,8 +227,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(18, rank);
m_object->SetObjectParent(18, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant4.mod", false, rank);
m_object->SetPosition(18, Math::Vector(1.0f, -0.1f, 0.7f));
m_object->SetAngleY(18, Math::PI);
@@ -262,8 +236,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(19, rank);
m_object->SetObjectParent(19, 18);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant5.mod", false, rank);
m_object->SetPosition(19, Math::Vector(0.0f, 0.0f, -1.0f));
// Creates front-left foot.
@@ -271,8 +244,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(20, rank);
m_object->SetObjectParent(20, 19);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ant6.mod", false, rank);
m_object->SetPosition(20, Math::Vector(0.0f, 0.0f, -2.0f));
// Creates the right wing.
@@ -280,8 +252,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(21, rank);
m_object->SetObjectParent(21, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee7.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("bee7.mod", false, rank);
m_object->SetPosition(21, Math::Vector(0.8f, 0.4f, -0.5f));
// Creates the left wing.
@@ -289,9 +260,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(22, rank);
m_object->SetObjectParent(22, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee7.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("bee7.mod", true, rank);
m_object->SetPosition(22, Math::Vector(0.8f, 0.4f, 0.5f));
m_object->CreateShadowCircle(6.0f, 0.5f);
@@ -304,7 +273,6 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
diff --git a/src/object/motion/motionbee.h b/src/object/motion/motionbee.h
index aa8e5a6..c0347a0 100644
--- a/src/object/motion/motionbee.h
+++ b/src/object/motion/motionbee.h
@@ -40,7 +40,7 @@ enum MotionBeeSpecialAction
class CMotionBee : public CMotion
{
public:
- CMotionBee(CInstanceManager* iMan, CObject* object);
+ CMotionBee(CObject* object);
~CMotionBee();
void DeleteObject(bool bAll=false);
diff --git a/src/object/motion/motionhuman.cpp b/src/object/motion/motionhuman.cpp
index a9b79b5..dc5ff34 100644
--- a/src/object/motion/motionhuman.cpp
+++ b/src/object/motion/motionhuman.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "graphics/engine/terrain.h"
#include "graphics/engine/water.h"
@@ -43,8 +43,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time
// Object's constructor.
-CMotionHuman::CMotionHuman(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionHuman::CMotionHuman(CObject* object) : CMotion(object)
{
m_partiReactor = -1;
m_armMember = START_TIME;
@@ -97,30 +96,22 @@ Error CMotionHuman::SetAction(int action, float time)
bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
char filename[100];
int rank, option, face, glasses;
-// if ( m_engine->GetRestCreate() < 16 ) return false;
-
-
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
m_object->SetType(type);
option = m_object->GetOption();
- std::string baseName;
-
if ( m_main->GetGamerOnlyHead() )
{
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
face = m_main->GetGamerFace();
- baseName = m_app->GetDataFilePath(DIR_MODEL, "human2h%d.mod");
- sprintf(filename, baseName.c_str(), face+1);
- pModFile->ReadModel(filename);
- pModFile->CreateEngineObject(rank);
+ sprintf(filename, "human2h%d.mod", face+1);
+ modelManager->AddModelReference(filename, false, rank);
glasses = m_main->GetGamerGlasses();
if ( glasses != 0 )
@@ -129,10 +120,8 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- baseName = m_app->GetDataFilePath(DIR_MODEL, "human2g%d.mod");
- sprintf(filename, baseName.c_str(), glasses);
- pModFile->ReadModel(filename);
- pModFile->CreateEngineObject(rank);
+ sprintf(filename, "human2g%d.mod", glasses);
+ modelManager->AddModelReference(filename, false, rank);
}
CreatePhysics(type);
@@ -140,7 +129,6 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
@@ -149,19 +137,12 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
- if ( option == 0 ) // head in helmet?
- {
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human1c.mod"));
- }
- if ( option == 1 ) // head without helmet?
- {
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human1h.mod"));
- }
- if ( option == 2 ) // without a backpack?
- {
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human1v.mod"));
- }
- pModFile->CreateEngineObject(rank);
+ if (option == 0) // head in helmet?
+ modelManager->AddModelReference("human1c.mod", false, rank);
+ else if (option == 1) // head without helmet?
+ modelManager->AddModelReference("human1h.mod", false, rank);
+ else if (option == 2) // without a backpack?
+ modelManager->AddModelReference("human1v.mod", false, rank);
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
@@ -178,30 +159,28 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
if ( type == OBJECT_HUMAN )
{
- if ( option == 0 ) // head in helmet?
+ if (option == 0) // head in helmet?
{
face = m_main->GetGamerFace();
- baseName = m_app->GetDataFilePath(DIR_MODEL, "human2c%d.mod");
- sprintf(filename, baseName.c_str(), face+1);
- pModFile->ReadModel(filename);
+ sprintf(filename, "human2c%d.mod", face+1);
+ modelManager->AddModelReference(filename, false, rank);
}
- if ( option == 1 || // head without helmet?
- option == 2 ) // without a backpack?
+ else if (option == 1 || // head without helmet?
+ option == 2) // without a backpack?
{
face = m_main->GetGamerFace();
- baseName = m_app->GetDataFilePath(DIR_MODEL, "human2h%d.mod");
- sprintf(filename, baseName.c_str(), face+1);
- pModFile->ReadModel(filename);
+ sprintf(filename, "human2h%d.mod", face+1);
+ modelManager->AddModelReference(filename, false, rank);
}
}
- if ( type == OBJECT_TECH )
+ else if (type == OBJECT_TECH)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human2t.mod"));
+ modelManager->AddModelReference("human2t.mod", false, rank);
}
- pModFile->CreateEngineObject(rank);
+
m_object->SetPosition(1, Math::Vector(0.0f, 2.7f, 0.0f));
- if ( option == 1 || // head without helmet?
- option == 2 ) // without a backpack?
+ if (option == 1 || // head without helmet?
+ option == 2) // without a backpack?
{
m_object->SetZoom(1, Math::Vector(1.0f, 1.05f, 1.0f));
}
@@ -214,10 +193,8 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(15, rank);
m_object->SetObjectParent(15, 1);
- baseName = m_app->GetDataFilePath(DIR_MODEL, "human2g%d.mod");
- sprintf(filename, baseName.c_str(), glasses);
- pModFile->ReadModel(filename);
- pModFile->CreateEngineObject(rank);
+ sprintf(filename, "human2g%d.mod", glasses);
+ modelManager->AddModelReference(filename, false, rank);
}
// Creates the right arm.
@@ -225,8 +202,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human3.mod", false, rank);
m_object->SetPosition(2, Math::Vector(0.0f, 2.3f, -1.2f));
m_object->SetAngle(2, Math::Vector(90.0f*Math::PI/180.0f, 90.0f*Math::PI/180.0f, -50.0f*Math::PI/180.0f));
@@ -235,8 +211,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human4r.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human4r.mod", false, rank);
m_object->SetPosition(3, Math::Vector(1.3f, 0.0f, 0.0f));
m_object->SetAngle(3, Math::Vector(0.0f*Math::PI/180.0f, -20.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f));
@@ -245,8 +220,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(4, rank);
m_object->SetObjectParent(4, 3);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human5.mod", false, rank);
m_object->SetPosition(4, Math::Vector(1.2f, 0.0f, 0.0f));
// Creates the right thigh.
@@ -254,8 +228,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(5, rank);
m_object->SetObjectParent(5, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human6.mod", false, rank);
m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -0.7f));
m_object->SetAngle(5, Math::Vector(10.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f));
@@ -264,8 +237,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 5);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human7.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human7.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.0f, -1.5f, 0.0f));
m_object->SetAngle(6, Math::Vector(0.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, -10.0f*Math::PI/180.0f));
@@ -274,8 +246,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 6);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human8.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human8.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, -1.5f, 0.0f));
m_object->SetAngle(7, Math::Vector(-10.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f));
@@ -284,9 +255,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human3.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human3.mod", true, rank);
m_object->SetPosition(8, Math::Vector(0.0f, 2.3f, 1.2f));
m_object->SetAngle(8, Math::Vector(-90.0f*Math::PI/180.0f, -90.0f*Math::PI/180.0f, -50.0f*Math::PI/180.0f));
@@ -295,9 +264,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 8);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human4l.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human4l.mod", true, rank);
m_object->SetPosition(9, Math::Vector(1.3f, 0.0f, 0.0f));
m_object->SetAngle(9, Math::Vector(0.0f*Math::PI/180.0f, 20.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f));
@@ -306,9 +273,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(10, rank);
m_object->SetObjectParent(10, 9);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human5.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human5.mod", true, rank);
m_object->SetPosition(10, Math::Vector(1.2f, 0.0f, 0.0f));
// Creates the left thigh.
@@ -316,9 +281,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(11, rank);
m_object->SetObjectParent(11, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human6.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human6.mod", true, rank);
m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, 0.7f));
m_object->SetAngle(11, Math::Vector(-10.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f));
@@ -327,9 +290,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(12, rank);
m_object->SetObjectParent(12, 11);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human7.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human7.mod", true, rank);
m_object->SetPosition(12, Math::Vector(0.0f, -1.5f, 0.0f));
m_object->SetAngle(12, Math::Vector(0.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, -10.0f*Math::PI/180.0f));
@@ -338,9 +299,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(13, rank);
m_object->SetObjectParent(13, 12);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human8.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human8.mod", true, rank);
m_object->SetPosition(13, Math::Vector(0.0f, -1.5f, 0.0f));
m_object->SetAngle(13, Math::Vector(10.0f*Math::PI/180.0f, -5.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f));
@@ -351,8 +310,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(14, rank);
m_object->SetObjectParent(14, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human9.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("human9.mod", false, rank);
m_object->SetPosition(14, Math::Vector(-1.5f, 0.3f, -1.35f));
m_object->SetAngleZ(14, Math::PI);
}
@@ -367,7 +325,6 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
diff --git a/src/object/motion/motionhuman.h b/src/object/motion/motionhuman.h
index b365a77..ddb0843 100644
--- a/src/object/motion/motionhuman.h
+++ b/src/object/motion/motionhuman.h
@@ -58,7 +58,7 @@ enum MotionHumanSpecialAction
class CMotionHuman : public CMotion
{
public:
- CMotionHuman(CInstanceManager* iMan, CObject* object);
+ CMotionHuman(CObject* object);
~CMotionHuman();
void DeleteObject(bool bAll=false);
diff --git a/src/object/motion/motionmother.cpp b/src/object/motion/motionmother.cpp
index 8ea77a5..573a2e4 100644
--- a/src/object/motion/motionmother.cpp
+++ b/src/object/motion/motionmother.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "physics/physics.h"
@@ -34,8 +34,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time
// Object's constructor.
-CMotionMother::CMotionMother(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionMother::CMotionMother(CObject* object) : CMotion(object)
{
m_armMember = START_TIME;
m_armTimeAbs = START_TIME;
@@ -68,12 +67,8 @@ void CMotionMother::DeleteObject(bool bAll)
bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
- int rank;
-
-// if ( m_engine->GetRestCreate() < 2+12+6 ) return false;
-
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
+ int rank;
m_object->SetType(type);
@@ -81,10 +76,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
-
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother1.mod"));
- pModFile->CreateEngineObject(rank);
-
+ modelManager->AddModelReference("mother1.mod", false, rank);
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
@@ -98,8 +90,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother2.mod", false, rank);
m_object->SetPosition(1, Math::Vector(16.0f, 3.0f, 0.0f));
// Creates a right-back leg.
@@ -107,8 +98,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother3.mod", false, rank);
m_object->SetPosition(2, Math::Vector(-5.0f, -1.0f, -12.0f));
// Creates a right-back foot.
@@ -116,8 +106,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother4.mod", false, rank);
m_object->SetPosition(3, Math::Vector(0.0f, 0.0f, -8.5f));
// Creates a middle-right leg.
@@ -125,8 +114,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(4, rank);
m_object->SetObjectParent(4, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother3.mod", false, rank);
m_object->SetPosition(4, Math::Vector(3.5f, -1.0f, -12.0f));
// Creates a middle-right foot.
@@ -134,8 +122,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(5, rank);
m_object->SetObjectParent(5, 4);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother4.mod", false, rank);
m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -8.5f));
// Creates a right-front leg.
@@ -143,8 +130,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother3.mod", false, rank);
m_object->SetPosition(6, Math::Vector(10.0f, -1.0f, -10.0f));
// Creates a right-front foot.
@@ -152,8 +138,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 6);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother4.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -8.5f));
// Creates a left-back leg.
@@ -161,8 +146,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother3.mod", false, rank);
m_object->SetPosition(8, Math::Vector(-5.0f, -1.0f, 12.0f));
m_object->SetAngleY(8, Math::PI);
@@ -171,8 +155,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 8);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother4.mod", false, rank);
m_object->SetPosition(9, Math::Vector(0.0f, 0.0f, -8.5f));
// Creates a middle-left leg.
@@ -180,8 +163,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(10, rank);
m_object->SetObjectParent(10, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother3.mod", false, rank);
m_object->SetPosition(10, Math::Vector(3.5f, -1.0f, 12.0f));
m_object->SetAngleY(10, Math::PI);
@@ -190,8 +172,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(11, rank);
m_object->SetObjectParent(11, 10);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother4.mod", false, rank);
m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -8.5f));
// Creates a left-front leg.
@@ -199,8 +180,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(12, rank);
m_object->SetObjectParent(12, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother3.mod", false, rank);
m_object->SetPosition(12, Math::Vector(10.0f, -1.0f, 10.0f));
m_object->SetAngleY(12, Math::PI);
@@ -209,8 +189,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(13, rank);
m_object->SetObjectParent(13, 12);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother4.mod", false, rank);
m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, -8.5f));
// Creates the right antenna.
@@ -218,16 +197,14 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(14, rank);
m_object->SetObjectParent(14, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother5.mod", false, rank);
m_object->SetPosition(14, Math::Vector(6.0f, 1.0f, -2.5f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(15, rank);
m_object->SetObjectParent(15, 14);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother6.mod", false, rank);
m_object->SetPosition(15, Math::Vector(8.0f, 0.0f, 0.0f));
// Creates the left antenna.
@@ -235,16 +212,14 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(16, rank);
m_object->SetObjectParent(16, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother5.mod", false, rank);
m_object->SetPosition(16, Math::Vector(6.0f, 1.0f, 2.5f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(17, rank);
m_object->SetObjectParent(17, 16);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother6.mod", false, rank);
m_object->SetPosition(17, Math::Vector(8.0f, 0.0f, 0.0f));
// Creates the right claw.
@@ -252,8 +227,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(18, rank);
m_object->SetObjectParent(18, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother7.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother7.mod", false, rank);
m_object->SetPosition(18, Math::Vector(-4.0f, -3.5f, -8.0f));
m_object->SetZoomX(18, 1.2f);
@@ -262,9 +236,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(19, rank);
m_object->SetObjectParent(19, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother7.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mother7.mod", true, rank);
m_object->SetPosition(19, Math::Vector(-4.0f, -3.5f, 8.0f));
m_object->SetZoomX(19, 1.2f);
@@ -278,7 +250,6 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
diff --git a/src/object/motion/motionmother.h b/src/object/motion/motionmother.h
index 5060315..a6c7e93 100644
--- a/src/object/motion/motionmother.h
+++ b/src/object/motion/motionmother.h
@@ -26,7 +26,7 @@
class CMotionMother : public CMotion
{
public:
- CMotionMother(CInstanceManager* iMan, CObject* object);
+ CMotionMother(CObject* object);
~CMotionMother();
void DeleteObject(bool bAll=false);
diff --git a/src/object/motion/motionspider.cpp b/src/object/motion/motionspider.cpp
index 516ec6e..59bc6e0 100644
--- a/src/object/motion/motionspider.cpp
+++ b/src/object/motion/motionspider.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "graphics/engine/particle.h"
#include "physics/physics.h"
@@ -35,8 +35,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time
// Object's constructor.
-CMotionSpider::CMotionSpider(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionSpider::CMotionSpider(CObject* object) : CMotion(object)
{
m_armMember = START_TIME;
m_armTimeAbs = START_TIME;
@@ -69,12 +68,9 @@ void CMotionSpider::DeleteObject(bool bAll)
bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
int rank, i, j, parent;
char name[50];
- std::string baseName;
-
float table[] =
{
// x y z
@@ -99,9 +95,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
0.0f, 0.0f, -2.0f,
};
-// if ( m_engine->GetRestCreate() < 3+32+2 ) return false;
-
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
m_object->SetType(type);
@@ -109,8 +103,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider0.mod")); // doesn't exist
- pModFile->CreateEngineObject(rank);
+ // This is an "empty" object, without triangles
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
@@ -124,8 +117,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("spider1.mod", false, rank);
m_object->SetPosition(1, Math::Vector(1.0f, 0.0f, 0.0f));
// Creates the head.
@@ -133,8 +125,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("spider2.mod", false, rank);
m_object->SetPosition(2, Math::Vector(1.0f, 0.0f, 0.0f));
// Creates legs.
@@ -142,8 +133,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
{
for ( j=0 ; j<4 ; j++ )
{
- baseName = m_app->GetDataFilePath(DIR_MODEL, "spider%d.mod");
- sprintf(name, baseName.c_str(), j+3); // 3..6
+ sprintf(name, "spider%d.mod", j+3); // 3..6
// Creates the right leg.
rank = m_engine->CreateObject();
@@ -152,8 +142,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 3+i*4+j-1;
m_object->SetObjectParent(3+i*4+j, parent);
- pModFile->ReadModel(name);
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference(name, false, rank);
pos.x = table[i*12+j*3+0];
pos.y = table[i*12+j*3+1];
pos.z = table[i*12+j*3+2];
@@ -166,9 +155,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 19+i*4+j-1;
m_object->SetObjectParent(19+i*4+j, parent);
- pModFile->ReadModel(name);
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference(name, true, rank);
pos.x = table[i*12+j*3+0];
pos.y = table[i*12+j*3+1];
pos.z = -table[i*12+j*3+2];
@@ -181,8 +168,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(35, rank);
m_object->SetObjectParent(35, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider7.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("spider7.mod", false, rank);
m_object->SetPosition(35, Math::Vector(0.0f, 0.0f, -0.3f));
// Creates the left mandible.
@@ -190,9 +176,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(36, rank);
m_object->SetObjectParent(36, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider7.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("spider7.mod", true, rank);
m_object->SetPosition(36, Math::Vector(0.0f, 0.0f, 0.3f));
m_object->CreateShadowCircle(4.0f, 0.5f);
@@ -205,7 +189,6 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
diff --git a/src/object/motion/motionspider.h b/src/object/motion/motionspider.h
index fbf05f9..89745c4 100644
--- a/src/object/motion/motionspider.h
+++ b/src/object/motion/motionspider.h
@@ -44,7 +44,7 @@ enum MotionSpiderSpecialAction
class CMotionSpider : public CMotion
{
public:
- CMotionSpider(CInstanceManager* iMan, CObject* object);
+ CMotionSpider(CObject* object);
~CMotionSpider();
void DeleteObject(bool bAll=false);
diff --git a/src/object/motion/motiontoto.cpp b/src/object/motion/motiontoto.cpp
index 274f171..ddb1867 100644
--- a/src/object/motion/motiontoto.cpp
+++ b/src/object/motion/motiontoto.cpp
@@ -21,9 +21,9 @@
#include "math/geometry.h"
+#include "graphics/engine/modelmanager.h"
#include "graphics/engine/terrain.h"
#include "graphics/engine/water.h"
-#include "graphics/engine/modelfile.h"
#include "object/robotmain.h"
@@ -38,8 +38,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time
// Object's constructor.
-CMotionToto::CMotionToto(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionToto::CMotionToto(CObject* object) : CMotion(object)
{
m_time = 0.0f;
m_bDisplayInfo = false;
@@ -81,12 +80,9 @@ void CMotionToto::DeleteObject(bool bAll)
bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
int rank;
-// if ( m_engine->GetRestCreate() < 10 ) return false;
-
- pModFile = new Gfx::CModelFile(m_iMan);
m_object->SetType(type);
@@ -94,8 +90,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto1.mod", false, rank);
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
@@ -104,8 +99,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto2.mod", false, rank);
m_object->SetPosition(1, Math::Vector(1.00f, 0.17f, 0.00f));
// Creates the left eye.
@@ -113,9 +107,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto3.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto3.mod", true, rank);
m_object->SetPosition(2, Math::Vector(0.85f, 1.04f, 0.25f));
m_object->SetAngleY(2, -20.0f*Math::PI/180.0f);
@@ -124,8 +116,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto3.mod", false, rank);
m_object->SetPosition(3, Math::Vector(0.85f, 1.04f, -0.25f));
m_object->SetAngleY(3, 20.0f*Math::PI/180.0f);
@@ -134,8 +125,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(4, rank);
m_object->SetObjectParent(4, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto4.mod", false, rank);
m_object->SetPosition(4, Math::Vector(0.0f, 1.9f, 0.3f));
m_object->SetAngleX(4, 30.0f*Math::PI/180.0f);
@@ -143,8 +133,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(5, rank);
m_object->SetObjectParent(5, 4);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto4.mod", false, rank);
m_object->SetPosition(5, Math::Vector(0.0f, 0.67f, 0.0f));
m_object->SetAngleX(5, 30.0f*Math::PI/180.0f);
@@ -152,8 +141,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 5);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto5.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.0f, 0.70f, 0.0f));
m_object->SetAngleX(6, 30.0f*Math::PI/180.0f);
@@ -162,8 +150,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto4.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 1.9f, -0.3f));
m_object->SetAngleX(7, -30.0f*Math::PI/180.0f);
@@ -171,8 +158,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 7);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto4.mod", false, rank);
m_object->SetPosition(8, Math::Vector(0.0f, 0.67f, 0.0f));
m_object->SetAngleX(8, -30.0f*Math::PI/180.0f);
@@ -180,8 +166,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 8);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("toto5.mod", false, rank);
m_object->SetPosition(9, Math::Vector(0.0f, 0.70f, 0.0f));
m_object->SetAngleX(9, -30.0f*Math::PI/180.0f);
@@ -193,7 +178,6 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
diff --git a/src/object/motion/motiontoto.h b/src/object/motion/motiontoto.h
index 4072b62..47baa28 100644
--- a/src/object/motion/motiontoto.h
+++ b/src/object/motion/motiontoto.h
@@ -35,7 +35,7 @@ enum MotionTotoAction
class CMotionToto : public CMotion
{
public:
- CMotionToto(CInstanceManager* iMan, CObject* object);
+ CMotionToto(CObject* object);
~CMotionToto();
void DeleteObject(bool bAll=false);
diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp
index 849d53e..44b8fdd 100644
--- a/src/object/motion/motionvehicle.cpp
+++ b/src/object/motion/motionvehicle.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "graphics/engine/particle.h"
#include "graphics/engine/terrain.h"
@@ -38,8 +38,7 @@
// Object's constructor.
-CMotionVehicle::CMotionVehicle(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionVehicle::CMotionVehicle(CObject* object) : CMotion(object)
{
int i;
@@ -92,15 +91,12 @@ void CMotionVehicle::DeleteObject(bool bAll)
bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
CObject* pPower;
int rank, i, j, parent;
Gfx::Color color;
char name[50];
-// if ( m_engine->GetRestCreate() < 1+5+18+1 ) return false;
-
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
m_object->SetType(type);
@@ -109,106 +105,105 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
- if ( type == OBJECT_MOBILEfa ||
- type == OBJECT_MOBILEfc ||
- type == OBJECT_MOBILEfi ||
- type == OBJECT_MOBILEfs )
+ if (type == OBJECT_MOBILEfa ||
+ type == OBJECT_MOBILEfc ||
+ type == OBJECT_MOBILEfi ||
+ type == OBJECT_MOBILEfs)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1f.mod"));
+ modelManager->AddModelReference("lem1f.mod", false, rank);
}
- if ( type == OBJECT_MOBILEta ||
- type == OBJECT_MOBILEtc ||
- type == OBJECT_MOBILEti ||
- type == OBJECT_MOBILEts )
+ else if (type == OBJECT_MOBILEta ||
+ type == OBJECT_MOBILEtc ||
+ type == OBJECT_MOBILEti ||
+ type == OBJECT_MOBILEts)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1t.mod"));
+ modelManager->AddModelReference("lem1t.mod", false, rank);
}
- if ( type == OBJECT_MOBILEwa ||
- type == OBJECT_MOBILEwc ||
- type == OBJECT_MOBILEwi ||
- type == OBJECT_MOBILEws )
+ else if (type == OBJECT_MOBILEwa ||
+ type == OBJECT_MOBILEwc ||
+ type == OBJECT_MOBILEwi ||
+ type == OBJECT_MOBILEws)
{
- if ( m_object->GetTrainer() )
+ if (m_object->GetTrainer())
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1wt.mod"));
+ modelManager->AddModelReference("lem1wt.mod", false, rank);
}
else
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1w.mod"));
+ modelManager->AddModelReference("lem1w.mod", false, rank);
}
}
- if ( type == OBJECT_MOBILEia ||
- type == OBJECT_MOBILEic ||
- type == OBJECT_MOBILEii ||
- type == OBJECT_MOBILEis )
+ else if (type == OBJECT_MOBILEia ||
+ type == OBJECT_MOBILEic ||
+ type == OBJECT_MOBILEii ||
+ type == OBJECT_MOBILEis)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1i.mod"));
+ modelManager->AddModelReference("lem1i.mod", false, rank);
}
- if ( type == OBJECT_MOBILErt ||
- type == OBJECT_MOBILErc ||
- type == OBJECT_MOBILErr ||
- type == OBJECT_MOBILErs )
+ else if (type == OBJECT_MOBILErt ||
+ type == OBJECT_MOBILErc ||
+ type == OBJECT_MOBILErr ||
+ type == OBJECT_MOBILErs)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller1.mod"));
+ modelManager->AddModelReference("roller1.mod", false, rank);
}
- if ( type == OBJECT_MOBILEsa )
+ else if (type == OBJECT_MOBILEsa)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm1.mod"));
+ modelManager->AddModelReference("subm1.mod", false, rank);
}
- if ( type == OBJECT_MOBILEtg )
+ else if (type == OBJECT_MOBILEtg)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "target.mod"));
+ modelManager->AddModelReference("target.mod", false, rank);
}
- if ( type == OBJECT_MOBILEwt )
+ else if (type == OBJECT_MOBILEwt)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "trainerw.mod"));
+ modelManager->AddModelReference("trainerw.mod", false, rank);
}
- if ( type == OBJECT_MOBILEft )
+ else if (type == OBJECT_MOBILEft)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "trainerf.mod"));
+ modelManager->AddModelReference("trainerf.mod", false, rank);
}
- if ( type == OBJECT_MOBILEtt )
+ else if (type == OBJECT_MOBILEtt)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "trainert.mod"));
+ modelManager->AddModelReference("trainert.mod", false, rank);
}
- if ( type == OBJECT_MOBILEit )
+ else if (type == OBJECT_MOBILEit)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "traineri.mod"));
+ modelManager->AddModelReference("traineri.mod", false, rank);
}
- if ( type == OBJECT_MOBILEdr )
+ else if (type == OBJECT_MOBILEdr)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer1.mod"));
+ modelManager->AddModelReference("drawer1.mod", false, rank);
}
- if ( type == OBJECT_APOLLO2 )
+ else if (type == OBJECT_APOLLO2)
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj1.mod"));
+ modelManager->AddModelReference("apolloj1.mod", false, rank);
}
- pModFile->CreateEngineObject(rank);
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
// A vehicle must have a obligatory collision
// with a sphere of center (0, y, 0) (see GetCrashSphere).
- if ( type == OBJECT_MOBILErt ||
- type == OBJECT_MOBILErc ||
- type == OBJECT_MOBILErr ||
- type == OBJECT_MOBILErs )
+ if (type == OBJECT_MOBILErt ||
+ type == OBJECT_MOBILErc ||
+ type == OBJECT_MOBILErr ||
+ type == OBJECT_MOBILErs)
{
m_object->CreateCrashSphere(Math::Vector(0.0f, 4.0f, 0.0f), 6.5f, SOUND_BOUMm, 0.45f);
m_object->SetGlobalSphere(Math::Vector(0.0f, 3.0f, 0.0f), 7.0f);
}
- else if ( type == OBJECT_MOBILEsa )
+ else if (type == OBJECT_MOBILEsa)
{
m_object->CreateCrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 4.5f, SOUND_BOUMm, 0.45f);
m_object->SetGlobalSphere(Math::Vector(0.0f, 3.0f, 0.0f), 6.0f);
}
- else if ( type == OBJECT_MOBILEdr )
+ else if (type == OBJECT_MOBILEdr)
{
m_object->CreateCrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f);
m_object->SetGlobalSphere(Math::Vector(0.0f, 3.0f, 0.0f), 7.0f);
}
- else if ( type == OBJECT_APOLLO2 )
+ else if (type == OBJECT_APOLLO2)
{
m_object->CreateCrashSphere(Math::Vector(0.0f, 0.0f, 0.0f), 8.0f, SOUND_BOUMm, 0.45f);
}
@@ -218,18 +213,17 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_object->SetGlobalSphere(Math::Vector(0.0f, 4.0f, 0.0f), 6.0f);
}
- if ( type == OBJECT_MOBILEfa ||
- type == OBJECT_MOBILEta ||
- type == OBJECT_MOBILEwa ||
- type == OBJECT_MOBILEia )
+ if (type == OBJECT_MOBILEfa ||
+ type == OBJECT_MOBILEta ||
+ type == OBJECT_MOBILEwa ||
+ type == OBJECT_MOBILEia)
{
// Creates the arm.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2.mod", false, rank);
m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f));
m_object->SetAngleZ(1, ARM_NEUTRAL_ANGLE1);
@@ -238,8 +232,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem3.mod", false, rank);
m_object->SetPosition(2, Math::Vector(5.0f, 0.0f, 0.0f));
m_object->SetAngleZ(2, ARM_NEUTRAL_ANGLE2);
@@ -248,8 +241,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem4.mod", false, rank);
m_object->SetPosition(3, Math::Vector(3.5f, 0.0f, 0.0f));
m_object->SetAngleZ(3, ARM_NEUTRAL_ANGLE3);
m_object->SetAngleX(3, Math::PI/2.0f);
@@ -259,8 +251,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(4, rank);
m_object->SetObjectParent(4, 3);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem5.mod", false, rank);
m_object->SetPosition(4, Math::Vector(1.5f, 0.0f, 0.0f));
m_object->SetAngleZ(4, -Math::PI*0.10f);
@@ -269,24 +260,22 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(5, rank);
m_object->SetObjectParent(5, 3);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem6.mod", false, rank);
m_object->SetPosition(5, Math::Vector(1.5f, 0.0f, 0.0f));
m_object->SetAngleZ(5, Math::PI*0.10f);
}
- if ( type == OBJECT_MOBILEfs ||
- type == OBJECT_MOBILEts ||
- type == OBJECT_MOBILEws ||
- type == OBJECT_MOBILEis )
+ if (type == OBJECT_MOBILEfs ||
+ type == OBJECT_MOBILEts ||
+ type == OBJECT_MOBILEws ||
+ type == OBJECT_MOBILEis)
{
// Creates the arm.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2.mod", false, rank);
m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f));
m_object->SetAngleZ(1, 110.0f*Math::PI/180.0f);
@@ -295,8 +284,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem3.mod", false, rank);
m_object->SetPosition(2, Math::Vector(5.0f, 0.0f, 0.0f));
m_object->SetAngleZ(2, -110.0f*Math::PI/180.0f);
@@ -305,41 +293,38 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem4s.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem4s.mod", false, rank);
m_object->SetPosition(3, Math::Vector(3.5f, 0.0f, 0.0f));
m_object->SetAngleZ(3, -65.0f*Math::PI/180.0f);
}
- if ( type == OBJECT_MOBILEfc ||
- type == OBJECT_MOBILEtc ||
- type == OBJECT_MOBILEwc ||
- type == OBJECT_MOBILEic )
+ if (type == OBJECT_MOBILEfc ||
+ type == OBJECT_MOBILEtc ||
+ type == OBJECT_MOBILEwc ||
+ type == OBJECT_MOBILEic)
{
// Creates the cannon.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "canon.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("canon.mod", false, rank);
//? m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f));
m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f));
m_object->SetAngleZ(1, 0.0f);
}
- if ( type == OBJECT_MOBILEfi ||
- type == OBJECT_MOBILEti ||
- type == OBJECT_MOBILEwi ||
- type == OBJECT_MOBILEii )
+ if (type == OBJECT_MOBILEfi ||
+ type == OBJECT_MOBILEti ||
+ type == OBJECT_MOBILEwi ||
+ type == OBJECT_MOBILEii)
{
// Creates the insect cannon.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "canoni1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("canoni1.mod", false, rank);
m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f));
m_object->SetAngleZ(1, 0.0f);
@@ -347,25 +332,23 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "canoni2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("canoni2.mod", false, rank);
m_object->SetPosition(2, Math::Vector(0.0f, 2.5f, 0.0f));
m_object->SetAngleZ(2, 0.0f);
}
- if ( type == OBJECT_MOBILEwa ||
- type == OBJECT_MOBILEwc ||
- type == OBJECT_MOBILEws ||
- type == OBJECT_MOBILEwi ||
- type == OBJECT_MOBILEwt )
+ if (type == OBJECT_MOBILEwa ||
+ type == OBJECT_MOBILEwc ||
+ type == OBJECT_MOBILEws ||
+ type == OBJECT_MOBILEwi ||
+ type == OBJECT_MOBILEwt)
{
// Creates the right-back wheel.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(6, Math::Vector(-3.0f, 1.0f, -3.0f));
// Creates the left-back wheel.
@@ -373,8 +356,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(7, Math::Vector(-3.0f, 1.0f, 3.0f));
m_object->SetAngleY(7, Math::PI);
@@ -383,8 +365,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(8, Math::Vector(2.0f, 1.0f, -3.0f));
// Creates the left-front wheel.
@@ -392,21 +373,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(9, Math::Vector(2.0f, 1.0f, 3.0f));
m_object->SetAngleY(9, Math::PI);
}
- if ( type == OBJECT_MOBILEtg )
+ if (type == OBJECT_MOBILEtg)
{
// Creates the right-back wheel.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(6, Math::Vector(-2.0f, 1.0f, -3.0f));
// Creates the left-back wheel.
@@ -414,8 +393,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(7, Math::Vector(-2.0f, 1.0f, 3.0f));
m_object->SetAngleY(7, Math::PI);
@@ -424,8 +402,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(8, Math::Vector(3.0f, 1.0f, -3.0f));
// Creates the left-front wheel.
@@ -433,24 +410,22 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2w.mod", false, rank);
m_object->SetPosition(9, Math::Vector(3.0f, 1.0f, 3.0f));
m_object->SetAngleY(9, Math::PI);
}
- if ( type == OBJECT_MOBILEta ||
- type == OBJECT_MOBILEtc ||
- type == OBJECT_MOBILEti ||
- type == OBJECT_MOBILEts ) // caterpillars?
+ if (type == OBJECT_MOBILEta ||
+ type == OBJECT_MOBILEtc ||
+ type == OBJECT_MOBILEti ||
+ type == OBJECT_MOBILEts) // caterpillars?
{
// Creates the right caterpillar.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2t.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("lem2t.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.0f, 2.0f, -3.0f));
// Creates the left caterpillar.
@@ -458,23 +433,21 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem3t.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("lem3t.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 2.0f, 3.0f));
}
- if ( type == OBJECT_MOBILErt ||
- type == OBJECT_MOBILErc ||
- type == OBJECT_MOBILErr ||
- type == OBJECT_MOBILErs ) // large caterpillars?
+ if (type == OBJECT_MOBILErt ||
+ type == OBJECT_MOBILErc ||
+ type == OBJECT_MOBILErr ||
+ type == OBJECT_MOBILErs) // large caterpillars?
{
// Creates the right caterpillar.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("roller2.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.0f, 2.0f, -3.0f));
// Creates the left caterpillar.
@@ -482,20 +455,18 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("roller3.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 2.0f, 3.0f));
}
- if ( type == OBJECT_MOBILEsa ) // underwater caterpillars?
+ if (type == OBJECT_MOBILEsa) // underwater caterpillars?
{
// Creates the right caterpillar.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("subm4.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.0f, 1.0f, -3.0f));
// Creates the left caterpillar.
@@ -503,20 +474,18 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("subm5.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 1.0f, 3.0f));
}
- if ( type == OBJECT_MOBILEdr ) // caterpillars?
+ if (type == OBJECT_MOBILEdr) // caterpillars?
{
// Creates the right caterpillar.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("drawer2.mod", false, rank);
m_object->SetPosition(6, Math::Vector(0.0f, 1.0f, -3.0f));
// Creates the left caterpillar.
@@ -524,24 +493,22 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("drawer3.mod", false, rank);
m_object->SetPosition(7, Math::Vector(0.0f, 1.0f, 3.0f));
}
- if ( type == OBJECT_MOBILEfa ||
- type == OBJECT_MOBILEfc ||
- type == OBJECT_MOBILEfs ||
- type == OBJECT_MOBILEfi ||
- type == OBJECT_MOBILEft ) // flying?
+ if (type == OBJECT_MOBILEfa ||
+ type == OBJECT_MOBILEfc ||
+ type == OBJECT_MOBILEfs ||
+ type == OBJECT_MOBILEfi ||
+ type == OBJECT_MOBILEft) // flying?
{
// Creates the front foot.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2f.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2f.mod", false, rank);
m_object->SetPosition(6, Math::Vector(1.7f, 3.0f, 0.0f));
// Creates the right-back foot.
@@ -549,8 +516,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2f.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2f.mod", false, rank);
m_object->SetPosition(7, Math::Vector(-1.8f, 3.0f, -1.5f));
m_object->SetAngleY(7, 120.0f*Math::PI/180.0f);
@@ -559,16 +525,15 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2f.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("lem2f.mod", false, rank);
m_object->SetPosition(8, Math::Vector(-1.8f, 3.0f, 1.5f));
m_object->SetAngleY(8, -120.0f*Math::PI/180.0f);
}
- if ( type == OBJECT_MOBILEia ||
- type == OBJECT_MOBILEic ||
- type == OBJECT_MOBILEis ||
- type == OBJECT_MOBILEii ) // insect legs?
+ if (type == OBJECT_MOBILEia ||
+ type == OBJECT_MOBILEic ||
+ type == OBJECT_MOBILEis ||
+ type == OBJECT_MOBILEii) // insect legs?
{
float table[] =
{
@@ -590,8 +555,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
{
for ( j=0 ; j<3 ; j++ )
{
- std::string baseName = m_app->GetDataFilePath(DIR_MODEL, "ant%d.mod");
- sprintf(name, baseName.c_str(), j+4); // 4..6
+ sprintf(name, "ant%d.mod", j+4); // 4..6
// Creates the right leg.
rank = m_engine->CreateObject();
@@ -600,8 +564,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 6+i*3+j-1;
m_object->SetObjectParent(6+i*3+j, parent);
- pModFile->ReadModel(name);
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference(name, false, rank);
pos.x = table[i*9+j*3+0];
pos.y = table[i*9+j*3+1];
pos.z = table[i*9+j*3+2];
@@ -614,9 +577,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 15+i*3+j-1;
m_object->SetObjectParent(15+i*3+j, parent);
- pModFile->ReadModel(name);
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference(name, true, rank);
pos.x = table[i*9+j*3+0];
pos.y = table[i*9+j*3+1];
pos.z = -table[i*9+j*3+2];
@@ -625,15 +586,14 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
}
}
- if ( type == OBJECT_MOBILErt )
+ if (type == OBJECT_MOBILErt)
{
// Creates the holder.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2t.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller2t.mod", false, rank);
m_object->SetPosition(1, Math::Vector(0.0f, 0.0f, 0.0f));
m_object->SetAngleZ(1, 0.0f);
@@ -642,21 +602,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3t.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller3t.mod", false, rank);
m_object->SetPosition(2, Math::Vector(9.0f, 4.0f, 0.0f));
m_object->SetAngleZ(2, 0.0f);
}
- if ( type == OBJECT_MOBILErc )
+ if (type == OBJECT_MOBILErc)
{
// Creates the holder.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2c.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller2c.mod", false, rank);
m_object->SetPosition(1, Math::Vector(3.0f, 4.6f, 0.0f));
m_object->SetAngleZ(1, Math::PI/8.0f);
@@ -665,21 +623,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3p.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller3p.mod", false, rank);
m_object->SetPosition(2, Math::Vector(7.0f, 6.5f, 0.0f));
m_object->SetAngleZ(2, 0.0f);
}
- if ( type == OBJECT_MOBILErr )
+ if (type == OBJECT_MOBILErr)
{
// Creates the holder.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("recover1.mod", false, rank);
m_object->SetPosition(1, Math::Vector(2.0f, 5.0f, 0.0f));
// Creates the right arm.
@@ -687,8 +643,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("recover2.mod", false, rank);
m_object->SetPosition(2, Math::Vector(0.1f, 0.0f, -5.0f));
m_object->SetAngleZ(2, 126.0f*Math::PI/180.0f);
@@ -697,8 +652,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("recover3.mod", false, rank);
m_object->SetPosition(3, Math::Vector(5.0f, 0.0f, -0.5f));
m_object->SetAngleZ(3, -144.0f*Math::PI/180.0f);
@@ -707,9 +661,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(4, rank);
m_object->SetObjectParent(4, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover2.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("recover2.mod", true, rank);
m_object->SetPosition(4, Math::Vector(0.1f, 0.0f, 5.0f));
m_object->SetAngleZ(4, 126.0f*Math::PI/180.0f);
@@ -718,22 +670,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(5, rank);
m_object->SetObjectParent(5, 4);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover3.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("recover3.mod", true, rank);
m_object->SetPosition(5, Math::Vector(5.0f, 0.0f, 0.5f));
m_object->SetAngleZ(5, -144.0f*Math::PI/180.0f);
}
- if ( type == OBJECT_MOBILErs )
+ if (type == OBJECT_MOBILErs)
{
// Creates the holder.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2s.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller2s.mod", false, rank);
m_object->SetPosition(1, Math::Vector(0.0f, 0.0f, 0.0f));
m_object->SetAngleZ(1, 0.0f);
@@ -742,8 +691,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3s.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller3s.mod", false, rank);
m_object->SetPosition(2, Math::Vector(7.0f, 4.5f, 0.0f));
m_object->SetAngleZ(2, 0.0f);
@@ -752,21 +700,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller4s.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller4s.mod", false, rank);
m_object->SetPosition(3, Math::Vector(0.0f, 1.0f, 0.0f));
m_object->SetAngleZ(3, 0.0f);
}
- if ( type == OBJECT_MOBILEsa )
+ if (type == OBJECT_MOBILEsa)
{
// Creates the holder.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("subm2.mod", false, rank);
m_object->SetPosition(1, Math::Vector(4.2f, 3.0f, 0.0f));
// Creates the right tong.
@@ -774,8 +720,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("subm3.mod", false, rank);
m_object->SetPosition(2, Math::Vector(0.5f, 0.0f, -1.5f));
// Creates the left tong.
@@ -783,21 +728,18 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(3, rank);
m_object->SetObjectParent(3, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm3.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("subm3.mod", true, rank);
m_object->SetPosition(3, Math::Vector(0.5f, 0.0f, 1.5f));
}
- if ( type == OBJECT_MOBILEdr )
+ if (type == OBJECT_MOBILEdr)
{
// Creates the carousel.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("drawer4.mod", false, rank);
m_object->SetPosition(1, Math::Vector(-3.0f, 3.0f, 0.0f));
// Creates the key.
@@ -807,8 +749,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("drawer5.mod", false, rank);
m_posKey = Math::Vector(3.0f, 5.7f, 0.0f);
m_object->SetPosition(2, m_posKey);
m_object->SetAngleY(2, 90.0f*Math::PI/180.0f);
@@ -821,16 +762,14 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(10+i, rank);
m_object->SetObjectParent(10+i, 1);
- std::string baseName = m_app->GetDataFilePath(DIR_MODEL, "drawer%d.mod");
- sprintf(name, baseName.c_str(), 10+i);
- pModFile->ReadModel(name);
- pModFile->CreateEngineObject(rank);
+ sprintf(name, "drawer%d.mod", 10+i);
+ modelManager->AddModelReference(name, false, rank);
m_object->SetPosition(10+i, Math::Vector(0.0f, 0.0f, 0.0f));
m_object->SetAngleY(10+i, 45.0f*Math::PI/180.0f*i);
}
}
- if ( type == OBJECT_MOBILEwt )
+ if (type == OBJECT_MOBILEwt)
{
// Creates the key.
if ( m_object->GetToy() )
@@ -839,23 +778,21 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("drawer5.mod", false, rank);
m_posKey = Math::Vector(0.2f, 4.1f, 0.0f);
m_object->SetPosition(2, m_posKey);
m_object->SetAngleY(2, 90.0f*Math::PI/180.0f);
}
}
- if ( type == OBJECT_APOLLO2 )
+ if (type == OBJECT_APOLLO2)
{
// Creates the accessories.
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj2.mod")); // antenna
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj2.mod", false, rank); // antenna
m_object->SetPosition(1, Math::Vector(5.5f, 8.8f, 2.0f));
m_object->SetAngleY(1, -120.0f*Math::PI/180.0f);
m_object->SetAngleZ(1, 45.0f*Math::PI/180.0f);
@@ -864,8 +801,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2, rank);
m_object->SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj3.mod")); // camera
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj3.mod", false, rank); // camera
m_object->SetPosition(2, Math::Vector(5.5f, 2.8f, -2.0f));
m_object->SetAngleY(2, 30.0f*Math::PI/180.0f);
@@ -874,32 +810,28 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(6, rank);
m_object->SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
m_object->SetPosition(6, Math::Vector(-5.75f, 1.65f, -5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(7, rank);
m_object->SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
m_object->SetPosition(7, Math::Vector(-5.75f, 1.65f, 5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(8, rank);
m_object->SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
m_object->SetPosition(8, Math::Vector(5.75f, 1.65f, -5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(9, rank);
m_object->SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
m_object->SetPosition(9, Math::Vector(5.75f, 1.65f, 5.00f));
// Creates mud guards.
@@ -907,56 +839,51 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(10, rank);
m_object->SetObjectParent(10, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj6.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj6.mod", false, rank); // wheel
m_object->SetPosition(10, Math::Vector(-5.75f, 1.65f, -5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(11, rank);
m_object->SetObjectParent(11, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj6.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj6.mod", false, rank); // wheel
m_object->SetPosition(11, Math::Vector(-5.75f, 1.65f, 5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(12, rank);
m_object->SetObjectParent(12, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj5.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj5.mod", false, rank); // wheel
m_object->SetPosition(12, Math::Vector(5.75f, 1.65f, -5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(13, rank);
m_object->SetObjectParent(13, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj5.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj5.mod", false, rank); // wheel
m_object->SetPosition(13, Math::Vector(5.75f, 1.65f, 5.00f));
}
-#if 1
- if ( type == OBJECT_MOBILErt ||
- type == OBJECT_MOBILErc ||
- type == OBJECT_MOBILErr ||
- type == OBJECT_MOBILErs )
+ if (type == OBJECT_MOBILErt ||
+ type == OBJECT_MOBILErc ||
+ type == OBJECT_MOBILErr ||
+ type == OBJECT_MOBILErs)
{
m_object->CreateShadowCircle(6.0f, 1.0f);
}
- else if ( type == OBJECT_MOBILEta ||
- type == OBJECT_MOBILEtc ||
- type == OBJECT_MOBILEti ||
- type == OBJECT_MOBILEts ||
- type == OBJECT_MOBILEsa )
+ else if (type == OBJECT_MOBILEta ||
+ type == OBJECT_MOBILEtc ||
+ type == OBJECT_MOBILEti ||
+ type == OBJECT_MOBILEts ||
+ type == OBJECT_MOBILEsa)
{
m_object->CreateShadowCircle(5.0f, 1.0f);
}
- else if ( type == OBJECT_MOBILEdr )
+ else if (type == OBJECT_MOBILEdr)
{
m_object->CreateShadowCircle(4.5f, 1.0f);
}
- else if ( type == OBJECT_APOLLO2 )
+ else if (type == OBJECT_APOLLO2)
{
m_object->CreateShadowCircle(7.0f, 0.8f);
}
@@ -964,50 +891,12 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
{
m_object->CreateShadowCircle(4.0f, 1.0f);
}
-#else
- if ( type == OBJECT_MOBILErt ||
- type == OBJECT_MOBILErc ||
- type == OBJECT_MOBILErr ||
- type == OBJECT_MOBILErs )
- {
- m_object->CreateShadowCircle(6.0f, 1.0f, D3DSHADOWTANK);
- }
- else if ( type == OBJECT_MOBILEta ||
- type == OBJECT_MOBILEtc ||
- type == OBJECT_MOBILEti ||
- type == OBJECT_MOBILEts )
- {
- m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWTANK);
- }
- else if ( type == OBJECT_MOBILEfa ||
- type == OBJECT_MOBILEfc ||
- type == OBJECT_MOBILEfi ||
- type == OBJECT_MOBILEfs )
- {
- m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWFLY);
- }
- else if ( type == OBJECT_MOBILEwa ||
- type == OBJECT_MOBILEwc ||
- type == OBJECT_MOBILEwi ||
- type == OBJECT_MOBILEws )
- {
- m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWWHEEL);
- }
- else if ( type == OBJECT_APOLLO2 )
- {
- m_object->CreateShadowCircle(6.0f, 0.8f);
- }
- else
- {
- m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWNORM);
- }
-#endif
- if ( type == OBJECT_MOBILEfa ||
- type == OBJECT_MOBILEfc ||
- type == OBJECT_MOBILEfi ||
- type == OBJECT_MOBILEfs ||
- type == OBJECT_MOBILEft ) // flying?
+ if (type == OBJECT_MOBILEfa ||
+ type == OBJECT_MOBILEfc ||
+ type == OBJECT_MOBILEfi ||
+ type == OBJECT_MOBILEfs ||
+ type == OBJECT_MOBILEft) // flying?
{
//? color.r = 0.5f-1.0f;
//? color.g = 0.2f-1.0f;
@@ -1025,9 +914,9 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
CreatePhysics(type);
m_object->SetFloorHeight(0.0f);
- if ( power > 0.0f &&
- type != OBJECT_MOBILEdr &&
- type != OBJECT_APOLLO2 )
+ if (power > 0.0f &&
+ type != OBJECT_MOBILEdr &&
+ type != OBJECT_APOLLO2)
{
color.r = 1.0f;
color.g = 1.0f;
@@ -1036,16 +925,15 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_object->CreateEffectLight(20.0f, color);
// Creates the battery.
- pPower = new CObject(m_iMan);
+ pPower = new CObject();
pPower->SetType(power<=1.0f?OBJECT_POWER:OBJECT_ATOMIC);
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
pPower->SetObjectRank(0, rank);
- if ( power <= 1.0f ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "power.mod"));
- else pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "atomic.mod"));
- pModFile->CreateEngineObject(rank);
+ if ( power <= 1.0f ) modelManager->AddModelCopy("power.mod", false, rank);
+ else modelManager->AddModelCopy("atomic.mod", false, rank);
pPower->SetPosition(0, m_object->GetCharacter()->posPower);
pPower->CreateCrashSphere(Math::Vector(0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f);
@@ -1063,7 +951,6 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
@@ -1989,52 +1876,33 @@ bool CMotionVehicle::EventFrameCanoni(const Event &event)
void CMotionVehicle::UpdateTrackMapping(float left, float right, ObjectType type)
{
- Gfx::Material mat;
- float limit[4];
- int rRank, lRank, i;
+ Gfx::Material mat;
+ mat.diffuse = Gfx::Color(1.0f, 1.0f, 1.0f); // white
+ mat.ambient = Gfx::Color(0.5f, 0.5f, 0.5f);
- memset( &mat, 0, sizeof(Gfx::Material) );
- mat.diffuse.r = 1.0f;
- mat.diffuse.g = 1.0f;
- mat.diffuse.b = 1.0f; // white
- mat.ambient.r = 0.5f;
- mat.ambient.g = 0.5f;
- mat.ambient.b = 0.5f;
+ int rRank = m_object->GetObjectRank(6);
+ int lRank = m_object->GetObjectRank(7);
- rRank = m_object->GetObjectRank(6);
- lRank = m_object->GetObjectRank(7);
-
-
- if ( type == OBJECT_MOBILEdr )
+ if (type == OBJECT_MOBILEdr)
{
- limit[0] = 0.0f;
- limit[1] = 1000000.0f;
- limit[2] = limit[1];
- limit[3] = m_engine->GetLimitLOD(1);
-
m_engine->TrackTextureMapping(rRank, mat, Gfx::ENG_RSTATE_PART1, "drawer.png", "",
- limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X,
+ Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X,
right, 1.0f, 8.0f, 192.0f, 256.0f);
m_engine->TrackTextureMapping(lRank, mat, Gfx::ENG_RSTATE_PART2, "drawer.png", "",
- limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X,
+ Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X,
left, 1.0f, 8.0f, 192.0f, 256.0f);
}
else
{
- limit[0] = 0.0f;
- limit[1] = m_engine->GetLimitLOD(0);
- limit[2] = limit[1];
- limit[3] = m_engine->GetLimitLOD(1);
-
- for ( i=0 ; i<2 ; i++ )
+ for (int i = 0; i < 2; i++)
{
m_engine->TrackTextureMapping(rRank, mat, Gfx::ENG_RSTATE_PART1, "lemt.png", "",
- limit[i*2+0], limit[i*2+1], Gfx::ENG_TEX_MAPPING_X,
+ (i == 0) ? Gfx::LOD_High : Gfx::LOD_Medium, Gfx::ENG_TEX_MAPPING_X,
right, 1.0f, 8.0f, 192.0f, 256.0f);
m_engine->TrackTextureMapping(lRank, mat, Gfx::ENG_RSTATE_PART2, "lemt.png", "",
- limit[i*2+0], limit[i*2+1], Gfx::ENG_TEX_MAPPING_X,
+ (i == 0) ? Gfx::LOD_High : Gfx::LOD_Medium, Gfx::ENG_TEX_MAPPING_X,
left, 1.0f, 8.0f, 192.0f, 256.0f);
}
}
diff --git a/src/object/motion/motionvehicle.h b/src/object/motion/motionvehicle.h
index ca60c1e..ffb25ef 100644
--- a/src/object/motion/motionvehicle.h
+++ b/src/object/motion/motionvehicle.h
@@ -26,7 +26,7 @@
class CMotionVehicle : public CMotion
{
public:
- CMotionVehicle(CInstanceManager* iMan, CObject* object);
+ CMotionVehicle(CObject* object);
~CMotionVehicle();
void DeleteObject(bool bAll=false);
diff --git a/src/object/motion/motionworm.cpp b/src/object/motion/motionworm.cpp
index 2401ebd..ee555a8 100644
--- a/src/object/motion/motionworm.cpp
+++ b/src/object/motion/motionworm.cpp
@@ -19,7 +19,7 @@
#include "app/app.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "graphics/engine/particle.h"
#include "graphics/engine/terrain.h"
@@ -42,8 +42,7 @@ const int WORM_PART = 7; // number of parts of a worm
// Object's constructor.
-CMotionWorm::CMotionWorm(CInstanceManager* iMan, CObject* object)
- : CMotion(iMan, object)
+CMotionWorm::CMotionWorm(CObject* object) : CMotion(object)
{
m_timeUp = 18.0f;
m_timeDown = 18.0f;
@@ -81,13 +80,10 @@ void CMotionWorm::DeleteObject(bool bAll)
bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
int rank, i;
float px;
-// if ( m_engine->GetRestCreate() < 2+WORM_PART+1 ) return false;
-
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
m_object->SetType(type);
@@ -95,8 +91,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object
m_object->SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm0.mod")); // there is no purpose!
- pModFile->CreateEngineObject(rank);
+ // This is an "empty" object, without triangles
m_object->SetPosition(0, pos);
m_object->SetAngleY(0, angle);
@@ -111,8 +106,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("worm1.mod", false, rank);
m_object->SetPosition(1, Math::Vector(px, 0.0f, 0.0f));
px -= 1.0f;
@@ -123,8 +117,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2+i, rank);
m_object->SetObjectParent(2+i, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("worm2.mod", false, rank);
m_object->SetPosition(2+i, Math::Vector(px, 0.0f, 0.0f));
px -= 1.0f;
}
@@ -134,8 +127,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(2+WORM_PART, rank);
m_object->SetObjectParent(2+WORM_PART, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("worm3.mod", false, rank);
m_object->SetPosition(2+WORM_PART, Math::Vector(px, 0.0f, 0.0f));
m_object->CreateShadowCircle(0.0f, 1.0f, Gfx::ENG_SHADOW_WORM);
@@ -148,7 +140,6 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
diff --git a/src/object/motion/motionworm.h b/src/object/motion/motionworm.h
index aed5a23..7684faf 100644
--- a/src/object/motion/motionworm.h
+++ b/src/object/motion/motionworm.h
@@ -26,7 +26,7 @@
class CMotionWorm : public CMotion
{
public:
- CMotionWorm(CInstanceManager* iMan, CObject* object);
+ CMotionWorm(CObject* object);
~CMotionWorm();
void DeleteObject(bool bAll=false);
diff --git a/src/object/object.cpp b/src/object/object.cpp
index 2eade93..23a757a 100644
--- a/src/object/object.cpp
+++ b/src/object/object.cpp
@@ -27,7 +27,7 @@
#include "graphics/engine/lightman.h"
#include "graphics/engine/lightning.h"
-#include "graphics/engine/modelfile.h"
+#include "graphics/engine/modelmanager.h"
#include "graphics/engine/particle.h"
#include "graphics/engine/pyro.h"
#include "graphics/engine/terrain.h"
@@ -209,28 +209,25 @@ void uObject(CBotVar* botThis, void* user)
// Object's constructor.
-CObject::CObject(CInstanceManager* iMan)
+CObject::CObject()
{
- int i;
-
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_OBJECT, this, 500);
+ CInstanceManager::GetInstancePointer()->AddInstance(CLASS_OBJECT, this, 500);
m_app = CApplication::GetInstancePointer();
- m_engine = static_cast<Gfx::CEngine*>(m_iMan->SearchInstance(CLASS_ENGINE));
- m_lightMan = static_cast<Gfx::CLightManager*>(m_iMan->SearchInstance(CLASS_LIGHT));
- m_terrain = static_cast<Gfx::CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
- m_water = static_cast<Gfx::CWater*>(m_iMan->SearchInstance(CLASS_WATER));
- m_particle = static_cast<Gfx::CParticle*>(m_iMan->SearchInstance(CLASS_PARTICULE));
- m_camera = static_cast<Gfx::CCamera*>(m_iMan->SearchInstance(CLASS_CAMERA));
- 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_physics = 0;
- m_brain = 0;
- m_motion = 0;
- m_auto = 0;
- m_runScript = 0;
+ m_sound = m_app->GetSound();
+ m_engine = Gfx::CEngine::GetInstancePointer();
+ m_lightMan = m_engine->GetLightManager();
+ m_water = m_engine->GetWater();
+ m_particle = m_engine->GetParticle();
+ m_main = CRobotMain::GetInstancePointer();
+ m_terrain = m_main->GetTerrain();
+ m_camera = m_main->GetCamera();
+ m_displayText = m_main->GetDisplayText();
+ m_physics = nullptr;
+ m_brain = nullptr;
+ m_motion = nullptr;
+ m_auto = nullptr;
+ m_runScript = nullptr;
m_type = OBJECT_FIX;
m_id = ++g_id;
@@ -309,18 +306,18 @@ CObject::CObject(CInstanceManager* iMan)
m_infoReturn = NAN;
m_bInfoUpdate = false;
- for ( i=0 ; i<OBJECTMAXPART ; i++ )
+ for (int i=0 ; i<OBJECTMAXPART ; i++ )
{
m_objectPart[i].bUsed = false;
}
m_totalPart = 0;
- for ( i=0 ; i<4 ; i++ )
+ for (int i=0 ; i<4 ; i++ )
{
m_partiSel[i] = -1;
}
- for ( i=0 ; i<OBJECTMAXCMDLINE ; i++ )
+ for (int i=0 ; i<OBJECTMAXCMDLINE ; i++ )
{
m_cmdLine[i] = NAN;
}
@@ -362,7 +359,7 @@ CObject::~CObject()
delete m_auto;
m_auto = nullptr;
- m_iMan->DeleteInstance(CLASS_OBJECT, this);
+ CInstanceManager::GetInstancePointer()->DeleteInstance(CLASS_OBJECT, this);
m_app = nullptr;
}
@@ -376,7 +373,6 @@ void CObject::DeleteObject(bool bAll)
{
CObject* pObj;
Gfx::CPyro* pPyro;
- int i;
if ( m_botVar != 0 )
{
@@ -388,9 +384,11 @@ void CObject::DeleteObject(bool bAll)
m_camera->SetControllingObject(0);
}
- for ( i=0 ; i<1000000 ; i++ )
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
+ for (int i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
pObj->DeleteDeselList(this);
@@ -419,9 +417,9 @@ void CObject::DeleteObject(bool bAll)
}
}
#endif
- for ( i=0 ; i<1000000 ; i++ )
+ for (int i=0 ; i<1000000 ; i++ )
{
- pPyro = static_cast<Gfx::CPyro*>(m_iMan->SearchInstance(CLASS_PYRO, i));
+ pPyro = static_cast<Gfx::CPyro*>(iMan->SearchInstance(CLASS_PYRO, i));
if ( pPyro == 0 ) break;
pPyro->CutObjectLink(this); // the object no longer exists
@@ -496,7 +494,7 @@ void CObject::DeleteObject(bool bAll)
m_auto->DeleteObject(bAll);
}
- for ( i=0 ; i<OBJECTMAXPART ; i++ )
+ for (int i=0 ; i<OBJECTMAXPART ; i++ )
{
if ( m_objectPart[i].bUsed )
{
@@ -753,7 +751,7 @@ bool CObject::ExploObject(ExploType type, float force, float decay)
loss = 1.0f;
}
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(pyroType, this, loss);
if ( shield == 0.0f ) // dead?
@@ -2091,7 +2089,7 @@ bool CObject::CreateVehicle(Math::Vector pos, float angle, ObjectType type,
if ( type == OBJECT_TOTO )
{
- m_motion = new CMotionToto(m_iMan, this);
+ m_motion = new CMotionToto(this);
m_motion->Create(pos, angle, type, 1.0f);
return true;
}
@@ -2099,8 +2097,8 @@ bool CObject::CreateVehicle(Math::Vector pos, float angle, ObjectType type,
SetTrainer(bTrainer);
SetToy(bToy);
- m_physics = new CPhysics(m_iMan, this);
- m_brain = new CBrain(m_iMan, this);
+ m_physics = new CPhysics(this);
+ m_brain = new CBrain(this);
m_physics->SetBrain(m_brain);
m_brain->SetPhysics(m_physics);
@@ -2137,11 +2135,11 @@ bool CObject::CreateVehicle(Math::Vector pos, float angle, ObjectType type,
if ( type == OBJECT_HUMAN ||
type == OBJECT_TECH )
{
- m_motion = new CMotionHuman(m_iMan, this);
+ m_motion = new CMotionHuman(this);
}
else
{
- m_motion = new CMotionVehicle(m_iMan, this);
+ m_motion = new CMotionVehicle(this);
}
if ( m_motion == 0 ) return false;
@@ -2181,31 +2179,31 @@ bool CObject::CreateInsect(Math::Vector pos, float angle, ObjectType type)
{
m_type = type;
- m_physics = new CPhysics(m_iMan, this);
- m_brain = new CBrain(m_iMan, this);
+ m_physics = new CPhysics(this);
+ m_brain = new CBrain(this);
m_physics->SetBrain(m_brain);
m_brain->SetPhysics(m_physics);
if ( type == OBJECT_MOTHER )
{
- m_motion = new CMotionMother(m_iMan, this);
+ m_motion = new CMotionMother(this);
}
if ( type == OBJECT_ANT )
{
- m_motion = new CMotionAnt(m_iMan, this);
+ m_motion = new CMotionAnt(this);
}
if ( type == OBJECT_SPIDER )
{
- m_motion = new CMotionSpider(m_iMan, this);
+ m_motion = new CMotionSpider(this);
}
if ( type == OBJECT_BEE )
{
- m_motion = new CMotionBee(m_iMan, this);
+ m_motion = new CMotionBee(this);
}
if ( type == OBJECT_WORM )
{
- m_motion = new CMotionWorm(m_iMan, this);
+ m_motion = new CMotionWorm(this);
}
if ( m_motion == 0 ) return false;
@@ -2250,15 +2248,10 @@ bool CObject::CreateShadowLight(float height, Gfx::Color color)
Gfx::Light light;
light.type = Gfx::LIGHT_SPOT;
- light.diffuse.r = color.r;
- light.diffuse.g = color.g;
- light.diffuse.b = color.b;
- light.position.x = pos.x;
- light.position.y = pos.y+height;
- light.position.z = pos.z;
- light.direction.x = 0.0f;
- light.direction.y = -1.0f; // against the bottom
- light.direction.z = 0.0f;
+ light.diffuse = color;
+ light.ambient = color * 0.1f;
+ light.position = Math::Vector(pos.x, pos.y+height, pos.z);
+ light.direction = Math::Vector(0.0f, -1.0f, 0.0f); // against the bottom
light.spotIntensity = 128;
light.attenuation0 = 1.0f;
light.attenuation1 = 0.0f;
@@ -2293,15 +2286,9 @@ bool CObject::CreateEffectLight(float height, Gfx::Color color)
Gfx::Light light;
light.type = Gfx::LIGHT_SPOT;
- light.diffuse.r = color.r;
- light.diffuse.g = color.g;
- light.diffuse.b = color.b;
- light.position.x = 0.0f;
- light.position.y = 0.0f+height;
- light.position.z = 0.0f;
- light.direction.x = 0.0f;
- light.direction.y = -1.0f; // against the bottom
- light.direction.z = 0.0f;
+ light.diffuse = color;
+ light.position = Math::Vector(0.0f, height, 0.0f);
+ light.direction = Math::Vector(0.0f, -1.0f, 0.0f); // against the bottom
light.spotIntensity = 0.0f;
light.attenuation0 = 1.0f;
light.attenuation1 = 0.0f;
@@ -2351,11 +2338,10 @@ bool CObject::CreateShadowCircle(float radius, float intensity,
bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
ObjectType type, float power)
{
- Gfx::CModelFile* pModFile;
Math::Point p;
int rank, i;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -2365,8 +2351,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_PORTICO )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2375,16 +2360,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico2.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 67.0f, 0.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico3.mod", false, rank);
SetPosition(2, Math::Vector(0.0f, 0.0f, -33.0f));
SetAngleY(2, 45.0f*Math::PI/180.0f);
@@ -2392,8 +2375,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(3, rank);
SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico4.mod", false, rank);
SetPosition(3, Math::Vector(50.0f, 0.0f, 0.0f));
SetAngleY(3, -60.0f*Math::PI/180.0f);
@@ -2401,8 +2383,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(4, rank);
SetObjectParent(4, 3);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico5.mod", false, rank);
SetPosition(4, Math::Vector(35.0f, 0.0f, 0.0f));
SetAngleY(4, -55.0f*Math::PI/180.0f);
@@ -2410,8 +2391,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(5, rank);
SetObjectParent(5, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico3.mod", false, rank);
SetPosition(5, Math::Vector(0.0f, 0.0f, 33.0f));
SetAngleY(5, -45.0f*Math::PI/180.0f);
@@ -2419,8 +2399,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(6, rank);
SetObjectParent(6, 5);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico4.mod", false, rank);
SetPosition(6, Math::Vector(50.0f, 0.0f, 0.0f));
SetAngleY(6, 60.0f*Math::PI/180.0f);
@@ -2428,8 +2407,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(7, rank);
SetObjectParent(7, 6);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico5.mod", false, rank);
SetPosition(7, Math::Vector(35.0f, 0.0f, 0.0f));
SetAngleY(7, 55.0f*Math::PI/180.0f);
@@ -2437,8 +2415,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(8, rank);
SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico6.mod", false, rank);
SetPosition(8, Math::Vector(-35.0f, 50.0f, -35.0f));
SetAngleY(8, -Math::PI/2.0f);
SetZoom(8, 2.0f);
@@ -2447,16 +2424,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(9, rank);
SetObjectParent(9, 8);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico7.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico7.mod", false, rank);
SetPosition(9, Math::Vector(0.0f, 4.5f, 1.9f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(10, rank);
SetObjectParent(10, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico6.mod", false, rank);
SetPosition(10, Math::Vector(-35.0f, 50.0f, 35.0f));
SetAngleY(10, -Math::PI/2.0f);
SetZoom(10, 2.0f);
@@ -2465,8 +2440,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(11, rank);
SetObjectParent(11, 10);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "portico7.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("portico7.mod", false, rank);
SetPosition(11, Math::Vector(0.0f, 4.5f, 1.9f));
CreateCrashSphere(Math::Vector( 0.0f, 28.0f, 0.0f), 45.5f, SOUND_BOUMm, 0.45f);
@@ -2487,8 +2461,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_BASE )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "base1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("base1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2499,8 +2472,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1+i, rank);
SetObjectParent(1+i, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "base2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("base2.mod", false, rank);
p = Math::RotatePoint(-Math::PI/4.0f*i, 27.8f);
SetPosition(1+i, Math::Vector(p.x, 30.0f, p.y));
SetAngleY(1+i, Math::PI/4.0f*i);
@@ -2510,17 +2482,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(10+i, rank);
SetObjectParent(10+i, 1+i);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "base4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("base4.mod", false, rank);
SetPosition(10+i, Math::Vector(23.5f, 0.0f, 7.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(18+i, rank);
SetObjectParent(18+i, 1+i);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "base4.mod"));
- pModFile->Mirror();
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("base4.mod", true, rank);
SetPosition(18+i, Math::Vector(23.5f, 0.0f, -7.0f));
}
@@ -2528,8 +2497,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(9, rank);
SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "base3.mod")); // central pillar
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("base3.mod", false, rank); // central pillar
CreateCrashSphere(Math::Vector( 0.0f, 33.0f, 0.0f), 2.5f, SOUND_BOUMm, 0.45f);
CreateCrashSphere(Math::Vector( 0.0f, 39.0f, 0.0f), 2.5f, SOUND_BOUMm, 0.45f);
@@ -2559,8 +2527,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_DERRICK )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "derrick1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("derrick1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2569,8 +2536,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "derrick2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("derrick2.mod", false, rank);
CreateCrashSphere(Math::Vector(0.0f, 0.0f, 0.0f), 6.0f, SOUND_BOUMm, 0.45f);
CreateCrashSphere(Math::Vector(0.0f, 10.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f);
@@ -2584,8 +2550,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_RESEARCH )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "search1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("search1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2594,16 +2559,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "search2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("search2.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 13.0f, 0.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "search3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("search3.mod", false, rank);
SetPosition(2, Math::Vector(0.0f, 4.0f, 0.0f));
SetAngleZ(2, 35.0f*Math::PI/180.0f);
@@ -2619,8 +2582,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_RADAR )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "radar1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("radar1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2629,16 +2591,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "radar2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("radar2.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 5.0f, 0.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "radar3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("radar3.mod", false, rank);
SetPosition(2, Math::Vector(0.0f, 11.0f, 0.0f));
SetAngleY(2, -Math::PI/2.0f);
@@ -2646,8 +2606,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(3, rank);
SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "radar4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("radar4.mod", false, rank);
SetPosition(3, Math::Vector(0.0f, 4.5f, 1.9f));
CreateCrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 6.0f, SOUND_BOUMm, 0.45f);
@@ -2659,8 +2618,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_INFO )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "info1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("info1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2669,8 +2627,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "info2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("info2.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 5.0f, 0.0f));
for ( i=0 ; i<3 ; i++ )
@@ -2679,16 +2636,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2+i*2, rank);
SetObjectParent(2+i*2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "info3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("info3.mod", false, rank);
SetPosition(2+i*2, Math::Vector(0.0f, 4.5f, 0.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(3+i*2, rank);
SetObjectParent(3+i*2, 2+i*2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "radar4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("radar4.mod", false, rank);
SetPosition(3+i*2, Math::Vector(0.0f, 0.0f, -4.0f));
SetAngleY(2+i*2, 2.0f*Math::PI/3.0f*i);
@@ -2703,8 +2658,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_ENERGY )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "energy.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("energy.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2722,8 +2676,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_LABO )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "labo1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("labo1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2732,8 +2685,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "labo2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("labo2.mod", false, rank);
SetPosition(1, Math::Vector(-9.0f, 3.0f, 0.0f));
SetAngleZ(1, Math::PI/2.0f);
@@ -2741,16 +2693,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "labo3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("labo3.mod", false, rank);
SetPosition(2, Math::Vector(9.0f, -1.0f, 0.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(3, rank);
SetObjectParent(3, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "labo4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("labo4.mod", false, rank);
SetPosition(3, Math::Vector(0.0f, 0.0f, 0.0f));
SetAngleZ(3, 80.0f*Math::PI/180.0f);
@@ -2758,8 +2708,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(4, rank);
SetObjectParent(4, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "labo4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("labo4.mod", false, rank);
SetPosition(4, Math::Vector(0.0f, 0.0f, 0.0f));
SetAngleZ(4, 80.0f*Math::PI/180.0f);
SetAngleY(4, Math::PI*2.0f/3.0f);
@@ -2768,8 +2717,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(5, rank);
SetObjectParent(5, 2);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "labo4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("labo4.mod", false, rank);
SetPosition(5, Math::Vector(0.0f, 0.0f, 0.0f));
SetAngleZ(5, 80.0f*Math::PI/180.0f);
SetAngleY(5, -Math::PI*2.0f/3.0f);
@@ -2788,8 +2736,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_FACTORY )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "factory1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("factory1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2800,8 +2747,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1+i, rank);
SetObjectParent(1+i, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "factory2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("factory2.mod", false, rank);
SetPosition(1+i, Math::Vector(10.0f, 2.0f*i, 10.0f));
SetAngleZ(1+i, Math::PI/2.0f);
SetZoomZ(1+i, 0.30f);
@@ -2810,8 +2756,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(10+i, rank);
SetObjectParent(10+i, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "factory2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("factory2.mod", false, rank);
SetPosition(10+i, Math::Vector(10.0f, 2.0f*i, -10.0f));
SetAngleZ(10+i, -Math::PI/2.0f);
SetAngleY(10+i, Math::PI);
@@ -2848,8 +2793,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_REPAIR )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "repair1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("repair1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2858,8 +2802,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "repair2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("repair2.mod", false, rank);
SetPosition(1, Math::Vector(-11.0f, 13.5f, 0.0f));
SetAngleZ(1, Math::PI/2.0f);
@@ -2874,8 +2817,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_DESTROYER )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "destroy1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("destroy1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2884,8 +2826,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "destroy2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("destroy2.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 0.0f, 0.0f));
m_terrain->AddBuildingLevel(pos, 7.0f, 9.0f, 1.0f, 0.5f);
@@ -2900,8 +2841,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_STATION )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "station.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelCopy("station.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2917,8 +2857,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_CONVERT )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "convert1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("convert1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2927,16 +2866,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "convert2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("convert2.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 14.0f, 0.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "convert3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("convert3.mod", false, rank);
SetPosition(2, Math::Vector(0.0f, 11.5f, 0.0f));
SetAngleX(2, -Math::PI*0.35f);
@@ -2944,8 +2881,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(3, rank);
SetObjectParent(3, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "convert3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("convert3.mod", false, rank);
SetPosition(3, Math::Vector(0.0f, 11.5f, 0.0f));
SetAngleY(3, Math::PI);
SetAngleX(3, -Math::PI*0.35f);
@@ -2961,8 +2897,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_TOWER )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "tower.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("tower.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -2971,8 +2906,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2c.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller2c.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 20.0f, 0.0f));
SetAngleZ(1, Math::PI/2.0f);
@@ -2980,8 +2914,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3c.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("roller3c.mod", false, rank);
SetPosition(2, Math::Vector(4.5f, 0.0f, 0.0f));
SetAngleZ(2, 0.0f);
@@ -2999,8 +2932,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_NUCLEAR )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "nuclear1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("nuclear1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3009,8 +2941,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "nuclear2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("nuclear2.mod", false, rank);
SetPosition(1, Math::Vector(20.0f, 10.0f, 0.0f));
SetAngleZ(1, 135.0f*Math::PI/180.0f);
@@ -3026,8 +2957,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_PARA )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "para.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("para.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3052,8 +2982,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_SAFE )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "safe1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("safe1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3062,16 +2991,14 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "safe2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("safe2.mod", false, rank);
SetZoom(1, 1.05f);
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "safe3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("safe3.mod", false, rank);
SetZoom(2, 1.05f);
m_terrain->AddBuildingLevel(pos, 18.0f, 20.0f, 1.0f, 0.5f);
@@ -3084,8 +3011,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_HUSTON )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "huston1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("huston1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3094,8 +3020,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "huston2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("huston2.mod", false, rank);
SetPosition(1, Math::Vector(0.0f, 39.0f, 30.0f));
SetAngleY(1, -Math::PI/2.0f);
SetZoom(1, 3.0f);
@@ -3104,8 +3029,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "huston3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("huston3.mod", false, rank);
SetPosition(2, Math::Vector(0.0f, 4.5f, 1.9f));
CreateCrashSphere(Math::Vector( 15.0f, 6.0f, -53.0f), 16.0f, SOUND_BOUMm, 0.45f);
@@ -3128,8 +3052,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_TARGET1 )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "target1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("target1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 1.5f);
@@ -3158,8 +3081,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_TARGET2 )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "target2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("target2.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3169,8 +3091,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_NEST )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "nest.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("nest.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3182,8 +3103,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_START )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "start.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("start.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3193,8 +3113,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
if ( m_type == OBJECT_END )
{
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "end.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("end.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -3207,16 +3126,15 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
{
CObject* pPower;
- pPower = new CObject(m_iMan);
+ pPower = new CObject();
pPower->SetType(power<=1.0f?OBJECT_POWER:OBJECT_ATOMIC);
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
pPower->SetObjectRank(0, rank);
- if ( power <= 1.0f ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "power.mod"));
- else pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "atomic.mod"));
- pModFile->CreateEngineObject(rank);
+ if ( power <= 1.0f ) modelManager->AddModelReference("power.mod", false, rank);
+ else modelManager->AddModelReference("atomic.mod", false, rank);
pPower->SetPosition(0, GetCharacter()->posPower);
pPower->CreateCrashSphere(Math::Vector(0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f);
@@ -3237,7 +3155,6 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
CreateOtherObject(type);
m_engine->LoadAllTextures();
- delete pModFile;
return true;
}
@@ -3246,11 +3163,10 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height,
bool CObject::CreateResource(Math::Vector pos, float angle, ObjectType type,
float power)
{
- Gfx::CModelFile* pModFile;
int rank;
float radius, height;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -3260,46 +3176,51 @@ bool CObject::CreateResource(Math::Vector pos, float angle, ObjectType type,
SetEnergy(power);
std::string name;
- if ( type == OBJECT_STONE ) name = m_app->GetDataFilePath(DIR_MODEL, "stone.mod");
- if ( type == OBJECT_URANIUM ) name = m_app->GetDataFilePath(DIR_MODEL, "uranium.mod");
- if ( type == OBJECT_METAL ) name = m_app->GetDataFilePath(DIR_MODEL, "metal.mod");
- if ( type == OBJECT_POWER ) name = m_app->GetDataFilePath(DIR_MODEL, "power.mod");
- if ( type == OBJECT_ATOMIC ) name = m_app->GetDataFilePath(DIR_MODEL, "atomic.mod");
- if ( type == OBJECT_BULLET ) name = m_app->GetDataFilePath(DIR_MODEL, "bullet.mod");
- if ( type == OBJECT_BBOX ) name = m_app->GetDataFilePath(DIR_MODEL, "bbox.mod");
- if ( type == OBJECT_KEYa ) name = m_app->GetDataFilePath(DIR_MODEL, "keya.mod");
- if ( type == OBJECT_KEYb ) name = m_app->GetDataFilePath(DIR_MODEL, "keyb.mod");
- if ( type == OBJECT_KEYc ) name = m_app->GetDataFilePath(DIR_MODEL, "keyc.mod");
- if ( type == OBJECT_KEYd ) name = m_app->GetDataFilePath(DIR_MODEL, "keyd.mod");
- if ( type == OBJECT_TNT ) name = m_app->GetDataFilePath(DIR_MODEL, "tnt.mod");
- if ( type == OBJECT_SCRAP1 ) name = m_app->GetDataFilePath(DIR_MODEL, "scrap1.mod");
- if ( type == OBJECT_SCRAP2 ) name = m_app->GetDataFilePath(DIR_MODEL, "scrap2.mod");
- if ( type == OBJECT_SCRAP3 ) name = m_app->GetDataFilePath(DIR_MODEL, "scrap3.mod");
- if ( type == OBJECT_SCRAP4 ) name = m_app->GetDataFilePath(DIR_MODEL, "scrap4.mod");
- if ( type == OBJECT_SCRAP5 ) name = m_app->GetDataFilePath(DIR_MODEL, "scrap5.mod");
- if ( type == OBJECT_BOMB ) name = m_app->GetDataFilePath(DIR_MODEL, "bomb.mod");
- if ( type == OBJECT_WAYPOINT ) name = m_app->GetDataFilePath(DIR_MODEL, "waypoint.mod");
- if ( type == OBJECT_SHOW ) name = m_app->GetDataFilePath(DIR_MODEL, "show.mod");
- if ( type == OBJECT_WINFIRE ) name = m_app->GetDataFilePath(DIR_MODEL, "winfire.mod");
- if ( type == OBJECT_BAG ) name = m_app->GetDataFilePath(DIR_MODEL, "bag.mod");
- if ( type == OBJECT_MARKSTONE ) name = m_app->GetDataFilePath(DIR_MODEL, "cross1.mod");
- if ( type == OBJECT_MARKURANIUM ) name = m_app->GetDataFilePath(DIR_MODEL, "cross3.mod");
- if ( type == OBJECT_MARKPOWER ) name = m_app->GetDataFilePath(DIR_MODEL, "cross2.mod");
- if ( type == OBJECT_MARKKEYa ) name = m_app->GetDataFilePath(DIR_MODEL, "crossa.mod");
- if ( type == OBJECT_MARKKEYb ) name = m_app->GetDataFilePath(DIR_MODEL, "crossb.mod");
- if ( type == OBJECT_MARKKEYc ) name = m_app->GetDataFilePath(DIR_MODEL, "crossc.mod");
- if ( type == OBJECT_MARKKEYd ) name = m_app->GetDataFilePath(DIR_MODEL, "crossd.mod");
- if ( type == OBJECT_EGG ) name = m_app->GetDataFilePath(DIR_MODEL, "egg.mod");
-
- pModFile->ReadModel(name);
- pModFile->CreateEngineObject(rank);
+ if ( type == OBJECT_STONE ) name = "stone.mod";
+ if ( type == OBJECT_URANIUM ) name = "uranium.mod";
+ if ( type == OBJECT_METAL ) name = "metal.mod";
+ if ( type == OBJECT_POWER ) name = "power.mod";
+ if ( type == OBJECT_ATOMIC ) name = "atomic.mod";
+ if ( type == OBJECT_BULLET ) name = "bullet.mod";
+ if ( type == OBJECT_BBOX ) name = "bbox.mod";
+ if ( type == OBJECT_KEYa ) name = "keya.mod";
+ if ( type == OBJECT_KEYb ) name = "keyb.mod";
+ if ( type == OBJECT_KEYc ) name = "keyc.mod";
+ if ( type == OBJECT_KEYd ) name = "keyd.mod";
+ if ( type == OBJECT_TNT ) name = "tnt.mod";
+ if ( type == OBJECT_SCRAP1 ) name = "scrap1.mod";
+ if ( type == OBJECT_SCRAP2 ) name = "scrap2.mod";
+ if ( type == OBJECT_SCRAP3 ) name = "scrap3.mod";
+ if ( type == OBJECT_SCRAP4 ) name = "scrap4.mod";
+ if ( type == OBJECT_SCRAP5 ) name = "scrap5.mod";
+ if ( type == OBJECT_BOMB ) name = "bomb.mod";
+ if ( type == OBJECT_WAYPOINT ) name = "waypoint.mod";
+ if ( type == OBJECT_SHOW ) name = "show.mod";
+ if ( type == OBJECT_WINFIRE ) name = "winfire.mod";
+ if ( type == OBJECT_BAG ) name = "bag.mod";
+ if ( type == OBJECT_MARKSTONE ) name = "cross1.mod";
+ if ( type == OBJECT_MARKURANIUM ) name = "cross3.mod";
+ if ( type == OBJECT_MARKPOWER ) name = "cross2.mod";
+ if ( type == OBJECT_MARKKEYa ) name = "crossa.mod";
+ if ( type == OBJECT_MARKKEYb ) name = "crossb.mod";
+ if ( type == OBJECT_MARKKEYc ) name = "crossc.mod";
+ if ( type == OBJECT_MARKKEYd ) name = "crossd.mod";
+ if ( type == OBJECT_EGG ) name = "egg.mod";
+
+ if (type == OBJECT_POWER || type == OBJECT_ATOMIC)
+ {
+ modelManager->AddModelCopy(name, false, rank);
+ }
+ else
+ {
+ modelManager->AddModelReference(name, false, rank);
+ }
SetPosition(0, pos);
SetAngleY(0, angle);
if ( type == OBJECT_SHOW ) // remains in the air?
{
- delete pModFile;
return true;
}
@@ -3352,7 +3273,6 @@ bool CObject::CreateResource(Math::Vector pos, float angle, ObjectType type,
pos.y += height;
SetPosition(0, pos); // to display the shadows immediately
- delete pModFile;
return true;
}
@@ -3360,36 +3280,34 @@ bool CObject::CreateResource(Math::Vector pos, float angle, ObjectType type,
bool CObject::CreateFlag(Math::Vector pos, float angle, ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank, i;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
std::string name;
name = "";
- if ( type == OBJECT_FLAGb ) name = m_app->GetDataFilePath(DIR_MODEL, "flag1b.mod");
- if ( type == OBJECT_FLAGr ) name = m_app->GetDataFilePath(DIR_MODEL, "flag1r.mod");
- if ( type == OBJECT_FLAGg ) name = m_app->GetDataFilePath(DIR_MODEL, "flag1g.mod");
- if ( type == OBJECT_FLAGy ) name = m_app->GetDataFilePath(DIR_MODEL, "flag1y.mod");
- if ( type == OBJECT_FLAGv ) name = m_app->GetDataFilePath(DIR_MODEL, "flag1v.mod");
+ if ( type == OBJECT_FLAGb ) name = "flag1b.mod";
+ if ( type == OBJECT_FLAGr ) name = "flag1r.mod";
+ if ( type == OBJECT_FLAGg ) name = "flag1g.mod";
+ if ( type == OBJECT_FLAGy ) name = "flag1y.mod";
+ if ( type == OBJECT_FLAGv ) name = "flag1v.mod";
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object
SetObjectRank(0, rank);
- pModFile->ReadModel(name);
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference(name, false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
name = "";
- if ( type == OBJECT_FLAGb ) name = m_app->GetDataFilePath(DIR_MODEL, "flag2b.mod");
- if ( type == OBJECT_FLAGr ) name = m_app->GetDataFilePath(DIR_MODEL, "flag2r.mod");
- if ( type == OBJECT_FLAGg ) name = m_app->GetDataFilePath(DIR_MODEL, "flag2g.mod");
- if ( type == OBJECT_FLAGy ) name = m_app->GetDataFilePath(DIR_MODEL, "flag2y.mod");
- if ( type == OBJECT_FLAGv ) name = m_app->GetDataFilePath(DIR_MODEL, "flag2v.mod");
+ if ( type == OBJECT_FLAGb ) name = "flag2b.mod";
+ if ( type == OBJECT_FLAGr ) name = "flag2r.mod";
+ if ( type == OBJECT_FLAGg ) name = "flag2g.mod";
+ if ( type == OBJECT_FLAGy ) name = "flag2y.mod";
+ if ( type == OBJECT_FLAGv ) name = "flag2v.mod";
for ( i=0 ; i<4 ; i++ )
{
@@ -3397,8 +3315,7 @@ bool CObject::CreateFlag(Math::Vector pos, float angle, ObjectType type)
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1+i, rank);
SetObjectParent(1+i, i);
- pModFile->ReadModel(name);
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference(name, false, rank);
if ( i == 0 ) SetPosition(1+i, Math::Vector(0.15f, 5.0f, 0.0f));
else SetPosition(1+i, Math::Vector(0.79f, 0.0f, 0.0f));
}
@@ -3414,7 +3331,6 @@ bool CObject::CreateFlag(Math::Vector pos, float angle, ObjectType type)
pos = GetPosition(0);
SetPosition(0, pos); // to display the shadows immediately
- delete pModFile;
return true;
}
@@ -3423,10 +3339,9 @@ bool CObject::CreateFlag(Math::Vector pos, float angle, ObjectType type)
bool CObject::CreateBarrier(Math::Vector pos, float angle, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -3435,8 +3350,7 @@ bool CObject::CreateBarrier(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "barrier0.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("barrier0.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3452,8 +3366,7 @@ bool CObject::CreateBarrier(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "barrier1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("barrier1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3471,8 +3384,7 @@ bool CObject::CreateBarrier(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "barrier2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("barrier2.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3490,8 +3402,7 @@ bool CObject::CreateBarrier(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "barrier3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("barrier3.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3515,7 +3426,6 @@ bool CObject::CreateBarrier(Math::Vector pos, float angle, float height,
pos.y += height;
SetPosition(0, pos);
- delete pModFile;
return true;
}
@@ -3524,10 +3434,9 @@ bool CObject::CreateBarrier(Math::Vector pos, float angle, float height,
bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -3540,12 +3449,11 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- if ( type == OBJECT_PLANT0 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant0.mod"));
- if ( type == OBJECT_PLANT1 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant1.mod"));
- if ( type == OBJECT_PLANT2 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant2.mod"));
- if ( type == OBJECT_PLANT3 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant3.mod"));
- if ( type == OBJECT_PLANT4 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant4.mod"));
- pModFile->CreateEngineObject(rank);
+ if ( type == OBJECT_PLANT0 ) modelManager->AddModelReference("plant0.mod", false, rank);
+ if ( type == OBJECT_PLANT1 ) modelManager->AddModelReference("plant1.mod", false, rank);
+ if ( type == OBJECT_PLANT2 ) modelManager->AddModelReference("plant2.mod", false, rank);
+ if ( type == OBJECT_PLANT3 ) modelManager->AddModelReference("plant3.mod", false, rank);
+ if ( type == OBJECT_PLANT4 ) modelManager->AddModelReference("plant4.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3565,10 +3473,9 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- if ( type == OBJECT_PLANT5 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant5.mod"));
- if ( type == OBJECT_PLANT6 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant6.mod"));
- if ( type == OBJECT_PLANT7 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant7.mod"));
- pModFile->CreateEngineObject(rank);
+ if ( type == OBJECT_PLANT5 ) modelManager->AddModelReference("plant5.mod", false, rank);
+ if ( type == OBJECT_PLANT6 ) modelManager->AddModelReference("plant6.mod", false, rank);
+ if ( type == OBJECT_PLANT7 ) modelManager->AddModelReference("plant7.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3584,9 +3491,8 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- if ( type == OBJECT_PLANT8 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant8.mod"));
- if ( type == OBJECT_PLANT9 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant9.mod"));
- pModFile->CreateEngineObject(rank);
+ if ( type == OBJECT_PLANT8 ) modelManager->AddModelReference("plant8.mod", false, rank);
+ if ( type == OBJECT_PLANT9 ) modelManager->AddModelReference("plant9.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3605,12 +3511,11 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- if ( type == OBJECT_PLANT10 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant10.mod"));
- if ( type == OBJECT_PLANT11 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant11.mod"));
- if ( type == OBJECT_PLANT12 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant12.mod"));
- if ( type == OBJECT_PLANT13 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant13.mod"));
- if ( type == OBJECT_PLANT14 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant14.mod"));
- pModFile->CreateEngineObject(rank);
+ if ( type == OBJECT_PLANT10 ) modelManager->AddModelReference("plant10.mod", false, rank);
+ if ( type == OBJECT_PLANT11 ) modelManager->AddModelReference("plant11.mod", false, rank);
+ if ( type == OBJECT_PLANT12 ) modelManager->AddModelReference("plant12.mod", false, rank);
+ if ( type == OBJECT_PLANT13 ) modelManager->AddModelReference("plant13.mod", false, rank);
+ if ( type == OBJECT_PLANT14 ) modelManager->AddModelReference("plant14.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3630,12 +3535,11 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- if ( type == OBJECT_PLANT15 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant15.mod"));
- if ( type == OBJECT_PLANT16 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant16.mod"));
- if ( type == OBJECT_PLANT17 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant17.mod"));
- if ( type == OBJECT_PLANT18 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant18.mod"));
- if ( type == OBJECT_PLANT19 ) pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "plant19.mod"));
- pModFile->CreateEngineObject(rank);
+ if ( type == OBJECT_PLANT15 ) modelManager->AddModelReference("plant15.mod", false, rank);
+ if ( type == OBJECT_PLANT16 ) modelManager->AddModelReference("plant16.mod", false, rank);
+ if ( type == OBJECT_PLANT17 ) modelManager->AddModelReference("plant17.mod", false, rank);
+ if ( type == OBJECT_PLANT18 ) modelManager->AddModelReference("plant18.mod", false, rank);
+ if ( type == OBJECT_PLANT19 ) modelManager->AddModelReference("plant19.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3654,8 +3558,7 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "tree0.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("tree0.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3672,8 +3575,7 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "tree1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("tree1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3691,8 +3593,7 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "tree2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("tree2.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3710,8 +3611,7 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "tree3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("tree3.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3728,8 +3628,7 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "tree4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("tree4.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3745,8 +3644,7 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "tree5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("tree5.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3767,7 +3665,6 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
pos.y += height;
SetPosition(0, pos);
- delete pModFile;
return true;
}
@@ -3776,10 +3673,9 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height,
bool CObject::CreateMushroom(Math::Vector pos, float angle, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -3788,8 +3684,7 @@ bool CObject::CreateMushroom(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mush1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mush1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3805,8 +3700,7 @@ bool CObject::CreateMushroom(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mush2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("mush2.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -3827,7 +3721,6 @@ bool CObject::CreateMushroom(Math::Vector pos, float angle, float height,
pos.y += height;
SetPosition(0, pos);
- delete pModFile;
return true;
}
@@ -3836,14 +3729,13 @@ bool CObject::CreateMushroom(Math::Vector pos, float angle, float height,
bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
Math::Matrix* mat;
Gfx::Color color;
int rank;
float fShadow;
bool bFloorAdjust = true;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -3854,8 +3746,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen0.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen0.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -3874,8 +3765,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -3896,8 +3786,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen2.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -3919,8 +3808,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
//? m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_METAL);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen3.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -3935,8 +3823,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen4.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -3957,8 +3844,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen5.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -3974,8 +3860,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen6.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen6.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -3995,8 +3880,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen7.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen7.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4016,8 +3900,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen8.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen8.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4038,8 +3921,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen9.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen9.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4060,8 +3942,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen10.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen10.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4086,8 +3967,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen11.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen11.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -4111,8 +3991,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
//? m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_METAL);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen12.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen12.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4127,8 +4006,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen13.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen13.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4152,8 +4030,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen14.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen14.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4177,8 +4054,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen15.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen15.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4202,8 +4078,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen16.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen16.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4220,8 +4095,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen17.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen17.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4236,8 +4110,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen18.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen18.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4252,8 +4125,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen19.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen19.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4268,8 +4140,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen20.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen20.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4289,8 +4160,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen21.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen21.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4301,8 +4171,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen22.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen22.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4318,8 +4187,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen23.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen23.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4345,8 +4213,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen24.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen24.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4361,8 +4228,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen25.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen25.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4377,8 +4243,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen26.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen26.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4401,8 +4266,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen27.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen27.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4417,8 +4281,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
//? m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_METAL);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen28.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen28.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4432,8 +4295,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen29.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen29.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4445,8 +4307,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen30.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen30.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4461,8 +4322,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen31.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen31.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4480,8 +4340,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen32.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen32.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4499,8 +4358,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen33.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen33.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4514,8 +4372,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen34.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen34.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4529,8 +4386,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen35.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen35.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4548,8 +4404,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen36.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen36.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4561,8 +4416,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen37.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen37.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4574,8 +4428,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen38a.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen38a.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4584,16 +4437,14 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen38b.mod")); // engine
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen38b.mod", false, rank); // engine
SetPosition(1, Math::Vector(0.0f, 30.0f, 0.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 1);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen38c.mod")); // propeller
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen38c.mod", false, rank); // propeller
SetPosition(2, Math::Vector(0.0f, 0.0f, 0.0f));
CreateCrashSphere(Math::Vector(0.0f, 2.0f, 0.0f), 10.0f, SOUND_BOUM, 0.10f);
@@ -4606,8 +4457,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen39.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen39.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4622,8 +4472,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen40.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen40.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4638,8 +4487,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen41.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen41.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4650,8 +4498,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen42.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen42.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4665,8 +4512,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen43.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen43.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4680,8 +4526,7 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "teen44.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("teen44.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, zoom);
@@ -4706,7 +4551,6 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
pos.y += height;
SetPosition(0, pos);
- delete pModFile;
return true;
}
@@ -4715,11 +4559,10 @@ bool CObject::CreateTeen(Math::Vector pos, float angle, float zoom, float height
bool CObject::CreateQuartz(Math::Vector pos, float angle, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
float radius;
int rank;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -4728,8 +4571,7 @@ bool CObject::CreateQuartz(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "quartz0.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("quartz0.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -4743,8 +4585,7 @@ bool CObject::CreateQuartz(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "quartz1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("quartz1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -4758,8 +4599,7 @@ bool CObject::CreateQuartz(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "quartz2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("quartz2.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -4773,8 +4613,7 @@ bool CObject::CreateQuartz(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "quartz3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("quartz3.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -4817,7 +4656,6 @@ bool CObject::CreateQuartz(Math::Vector pos, float angle, float height,
m_particle->CreateParticle(pos, pos, Math::Point(2.0f, 2.0f), Gfx::PARTIQUARTZ, 0.7f+Math::Rand()*0.7f, radius, 0.0f);
m_particle->CreateParticle(pos, pos, Math::Point(2.0f, 2.0f), Gfx::PARTIQUARTZ, 0.7f+Math::Rand()*0.7f, radius, 0.0f);
- delete pModFile;
return true;
}
@@ -4826,10 +4664,9 @@ bool CObject::CreateQuartz(Math::Vector pos, float angle, float height,
bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -4838,8 +4675,7 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "root0.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("root0.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 2.0f);
@@ -4860,8 +4696,7 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "root1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("root1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 2.0f);
@@ -4882,8 +4717,7 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "root2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("root2.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 2.0f);
@@ -4903,8 +4737,7 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "root3.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("root3.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 2.0f);
@@ -4926,8 +4759,7 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "root4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("root4.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 2.0f);
@@ -4951,8 +4783,7 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "root4.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("root4.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 2.0f);
@@ -4961,8 +4792,7 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "root5.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("root5.mod", false, rank);
SetPosition(1, Math::Vector(-5.0f, 28.0f, -4.0f));
SetAngleX(1, -30.0f*Math::PI/180.0f);
SetAngleZ(1, 20.0f*Math::PI/180.0f);
@@ -4992,7 +4822,6 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
pos.y += height;
SetPosition(0, pos);
- delete pModFile;
return true;
}
@@ -5001,10 +4830,9 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height,
bool CObject::CreateHome(Math::Vector pos, float angle, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -5013,8 +4841,7 @@ bool CObject::CreateHome(Math::Vector pos, float angle, float height,
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "home1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("home1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 1.3f);
@@ -5034,7 +4861,6 @@ bool CObject::CreateHome(Math::Vector pos, float angle, float height,
pos.y += height;
SetPosition(0, pos);
- delete pModFile;
return true;
}
@@ -5043,10 +4869,9 @@ bool CObject::CreateHome(Math::Vector pos, float angle, float height,
bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -5055,22 +4880,21 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(0, rank);
std::string name;
- if ( type == OBJECT_RUINmobilew1 ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin1.mod");
- if ( type == OBJECT_RUINmobilew2 ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin1.mod");
- if ( type == OBJECT_RUINmobilet1 ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin2.mod");
- if ( type == OBJECT_RUINmobilet2 ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin2.mod");
- if ( type == OBJECT_RUINmobiler1 ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin3.mod");
- if ( type == OBJECT_RUINmobiler2 ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin3.mod");
- if ( type == OBJECT_RUINfactory ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin4.mod");
- if ( type == OBJECT_RUINdoor ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin5.mod");
- if ( type == OBJECT_RUINsupport ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin6.mod");
- if ( type == OBJECT_RUINradar ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin7.mod");
- if ( type == OBJECT_RUINconvert ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin8.mod");
- if ( type == OBJECT_RUINbase ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin9.mod");
- if ( type == OBJECT_RUINhead ) name = m_app->GetDataFilePath(DIR_MODEL, "ruin10.mod");
-
- pModFile->ReadModel(name);
- pModFile->CreateEngineObject(rank);
+ if ( type == OBJECT_RUINmobilew1 ) name = "ruin1.mod";
+ if ( type == OBJECT_RUINmobilew2 ) name = "ruin1.mod";
+ if ( type == OBJECT_RUINmobilet1 ) name = "ruin2.mod";
+ if ( type == OBJECT_RUINmobilet2 ) name = "ruin2.mod";
+ if ( type == OBJECT_RUINmobiler1 ) name = "ruin3.mod";
+ if ( type == OBJECT_RUINmobiler2 ) name = "ruin3.mod";
+ if ( type == OBJECT_RUINfactory ) name = "ruin4.mod";
+ if ( type == OBJECT_RUINdoor ) name = "ruin5.mod";
+ if ( type == OBJECT_RUINsupport ) name = "ruin6.mod";
+ if ( type == OBJECT_RUINradar ) name = "ruin7.mod";
+ if ( type == OBJECT_RUINconvert ) name = "ruin8.mod";
+ if ( type == OBJECT_RUINbase ) name = "ruin9.mod";
+ if ( type == OBJECT_RUINhead ) name = "ruin10.mod";
+
+ modelManager->AddModelReference(name, false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
@@ -5083,8 +4907,7 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(6, rank);
SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ruin1w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ruin1w.mod", false, rank);
SetPosition(6, Math::Vector(-3.0f, 1.8f, -4.0f));
SetAngleX(6, -Math::PI/2.0f);
@@ -5095,8 +4918,7 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(7, rank);
SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ruin1w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ruin1w.mod", false, rank);
SetPosition(7, Math::Vector(-3.0f, 1.0f, 3.0f));
SetAngleY(7, Math::PI-0.3f);
@@ -5108,8 +4930,7 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(8, rank);
SetObjectParent(8, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ruin1w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ruin1w.mod", false, rank);
SetPosition(8, Math::Vector(2.0f, 1.6f, -3.0f));
SetAngleY(8, 0.3f);
@@ -5120,8 +4941,7 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(9, rank);
SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ruin1w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ruin1w.mod", false, rank);
SetPosition(9, Math::Vector(2.0f, 1.0f, 3.0f));
SetAngleY(9, Math::PI-0.2f);
@@ -5141,8 +4961,7 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(7, rank);
SetObjectParent(7, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ruin1w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ruin1w.mod", false, rank);
SetPosition(7, Math::Vector(-3.0f, 1.0f, 3.0f));
SetAngleY(7, Math::PI+0.3f);
@@ -5154,8 +4973,7 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(9, rank);
SetObjectParent(9, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ruin1w.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ruin1w.mod", false, rank);
SetPosition(9, Math::Vector(2.0f, 1.0f, 3.0f));
SetAngleY(9, Math::PI+0.3f);
@@ -5175,8 +4993,7 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ruin2c.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("ruin2c.mod", false, rank);
SetPosition(1, Math::Vector(3.0f, 5.0f, -2.5f));
SetAngleX(1, -Math::PI*0.85f);
@@ -5458,7 +5275,6 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
SetAngleX(0, angle);
}
- delete pModFile;
return true;
}
@@ -5466,10 +5282,9 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height,
bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
{
- Gfx::CModelFile* pModFile;
int rank, i;
- pModFile = new Gfx::CModelFile(m_iMan);
+ Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
SetType(type);
@@ -5478,8 +5293,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apollol1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apollol1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetZoom(0, 1.2f);
@@ -5491,8 +5305,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(i+1, rank);
SetObjectParent(i+1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apollol2.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apollol2.mod", false, rank);
SetAngleY(i+1, Math::PI/2.0f*i);
}
@@ -5500,8 +5313,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(5, rank);
SetObjectParent(5, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apollol3.mod")); // ladder
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apollol3.mod", false, rank); // ladder
//? m_terrain->AddBuildingLevel(pos, 10.0f, 13.0f, 12.0f, 0.0f);
@@ -5521,8 +5333,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); //it is a stationary object
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj1.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj1.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -5532,32 +5343,28 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
SetPosition(1, Math::Vector(-5.75f, 1.65f, -5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(2, rank);
SetObjectParent(2, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
SetPosition(2, Math::Vector(-5.75f, 1.65f, 5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(3, rank);
SetObjectParent(3, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
SetPosition(3, Math::Vector(5.75f, 1.65f, -5.0f));
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(4, rank);
SetObjectParent(4, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel
SetPosition(4, Math::Vector(5.75f, 1.65f, 5.0f));
// Accessories:
@@ -5565,8 +5372,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(5, rank);
SetObjectParent(5, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj2.mod")); // antenna
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj2.mod", false, rank); // antenna
SetPosition(5, Math::Vector(5.5f, 8.8f, 2.0f));
SetAngleY(5, -120.0f*Math::PI/180.0f);
SetAngleZ(5, 45.0f*Math::PI/180.0f);
@@ -5575,8 +5381,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(6, rank);
SetObjectParent(6, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj3.mod")); // camera
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj3.mod", false, rank); // camera
SetPosition(6, Math::Vector(5.5f, 2.8f, -2.0f));
SetAngleY(6, 30.0f*Math::PI/180.0f);
@@ -5594,8 +5399,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apollof.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apollof.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -5609,8 +5413,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apollom.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apollom.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -5626,8 +5429,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
rank = m_engine->CreateObject();
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object
SetObjectRank(0, rank);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloa.mod"));
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloa.mod", false, rank);
SetPosition(0, pos);
SetAngleY(0, angle);
SetFloorHeight(0.0f);
@@ -5636,8 +5438,7 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
SetObjectRank(1, rank);
SetObjectParent(1, 0);
- pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj2.mod")); // antenna
- pModFile->CreateEngineObject(rank);
+ modelManager->AddModelReference("apolloj2.mod", false, rank); // antenna
SetPosition(1, Math::Vector(0.0f, 5.0f, 0.0f));
SetAngleY(1, -120.0f*Math::PI/180.0f);
SetAngleZ(1, 45.0f*Math::PI/180.0f);
@@ -5651,7 +5452,6 @@ bool CObject::CreateApollo(Math::Vector pos, float angle, ObjectType type)
pos = GetPosition(0);
SetPosition(0, pos); // to display the shadows immediately
- delete pModFile;
return true;
}
@@ -5661,91 +5461,91 @@ void CObject::CreateOtherObject(ObjectType type)
{
if ( type == OBJECT_BASE )
{
- m_auto = new CAutoBase(m_iMan, this);
+ m_auto = new CAutoBase(this);
}
if ( type == OBJECT_PORTICO )
{
- m_auto = new CAutoPortico(m_iMan, this);
+ m_auto = new CAutoPortico(this);
}
if ( type == OBJECT_DERRICK )
{
- m_auto = new CAutoDerrick(m_iMan, this);
+ m_auto = new CAutoDerrick(this);
}
if ( type == OBJECT_FACTORY )
{
- m_auto = new CAutoFactory(m_iMan, this);
+ m_auto = new CAutoFactory(this);
}
if ( type == OBJECT_REPAIR )
{
- m_auto = new CAutoRepair(m_iMan, this);
+ m_auto = new CAutoRepair(this);
}
if ( type == OBJECT_DESTROYER )
{
- m_auto = new CAutoDestroyer(m_iMan, this);
+ m_auto = new CAutoDestroyer(this);
}
if ( type == OBJECT_STATION )
{
- m_auto = new CAutoStation(m_iMan, this);
+ m_auto = new CAutoStation(this);
}
if ( type == OBJECT_CONVERT )
{
- m_auto = new CAutoConvert(m_iMan, this);
+ m_auto = new CAutoConvert(this);
}
if ( type == OBJECT_TOWER )
{
- m_auto = new CAutoTower(m_iMan, this);
+ m_auto = new CAutoTower(this);
}
if ( type == OBJECT_RESEARCH )
{
- m_auto = new CAutoResearch(m_iMan, this);
+ m_auto = new CAutoResearch(this);
}
if ( type == OBJECT_RADAR )
{
- m_auto = new CAutoRadar(m_iMan, this);
+ m_auto = new CAutoRadar(this);
}
if ( type == OBJECT_INFO )
{
- m_auto = new CAutoInfo(m_iMan, this);
+ m_auto = new CAutoInfo(this);
}
if ( type == OBJECT_ENERGY )
{
- m_auto = new CAutoEnergy(m_iMan, this);
+ m_auto = new CAutoEnergy(this);
}
if ( type == OBJECT_LABO )
{
- m_auto = new CAutoLabo(m_iMan, this);
+ m_auto = new CAutoLabo(this);
}
if ( type == OBJECT_NUCLEAR )
{
- m_auto = new CAutoNuclear(m_iMan, this);
+ m_auto = new CAutoNuclear(this);
}
if ( type == OBJECT_PARA )
{
- m_auto = new CAutoPara(m_iMan, this);
+ m_auto = new CAutoPara(this);
}
if ( type == OBJECT_SAFE )
{
- m_auto = new CAutoSafe(m_iMan, this);
+ m_auto = new CAutoSafe(this);
}
if ( type == OBJECT_HUSTON )
{
- m_auto = new CAutoHuston(m_iMan, this);
+ m_auto = new CAutoHuston(this);
}
if ( type == OBJECT_EGG )
{
- m_auto = new CAutoEgg(m_iMan, this);
+ m_auto = new CAutoEgg(this);
}
if ( type == OBJECT_NEST )
{
- m_auto = new CAutoNest(m_iMan, this);
+ m_auto = new CAutoNest(this);
}
if ( type == OBJECT_ROOT5 )
{
- m_auto = new CAutoRoot(m_iMan, this);
+ m_auto = new CAutoRoot(this);
}
if ( type == OBJECT_MUSHROOM2 )
{
- m_auto = new CAutoMush(m_iMan, this);
+ m_auto = new CAutoMush(this);
}
if ( type == OBJECT_FLAGb ||
type == OBJECT_FLAGr ||
@@ -5753,13 +5553,13 @@ void CObject::CreateOtherObject(ObjectType type)
type == OBJECT_FLAGy ||
type == OBJECT_FLAGv )
{
- m_auto = new CAutoFlag(m_iMan, this);
+ m_auto = new CAutoFlag(this);
}
if ( type == OBJECT_TEEN36 || // trunk?
type == OBJECT_TEEN37 || // boat?
type == OBJECT_TEEN38 ) // fan?
{
- m_auto = new CAutoKid(m_iMan, this);
+ m_auto = new CAutoKid(this);
}
}
@@ -6005,21 +5805,16 @@ void CObject::FlatParent()
void CObject::UpdateEnergyMapping()
{
- Gfx::Material mat;
- float a, b, i, s, au, bu;
- float limit[6];
- int j;
+ if (Math::IsEqual(m_energy, m_lastEnergy, 0.01f))
+ return;
- if ( fabs(m_energy-m_lastEnergy) < 0.01f ) return;
m_lastEnergy = m_energy;
- memset(&mat, 0, sizeof(mat));
- mat.diffuse.r = 1.0f;
- mat.diffuse.g = 1.0f;
- mat.diffuse.b = 1.0f; // white
- mat.ambient.r = 0.5f;
- mat.ambient.g = 0.5f;
- mat.ambient.b = 0.5f;
+ Gfx::Material mat;
+ mat.diffuse = Gfx::Color(1.0f, 1.0f, 1.0f); // white
+ mat.ambient = Gfx::Color(0.5f, 0.5f, 0.5f);
+
+ float a = 0.0f, b = 0.0f;
if ( m_type == OBJECT_POWER ||
m_type == OBJECT_ATOMIC )
@@ -6027,35 +5822,30 @@ void CObject::UpdateEnergyMapping()
a = 2.0f;
b = 0.0f; // dimensions of the battery (according to y)
}
- if ( m_type == OBJECT_STATION )
+ else if ( m_type == OBJECT_STATION )
{
a = 10.0f;
b = 4.0f; // dimensions of the battery (according to y)
}
- if ( m_type == OBJECT_ENERGY )
+ else if ( m_type == OBJECT_ENERGY )
{
a = 9.0f;
b = 3.0f; // dimensions of the battery (according to y)
}
- i = 0.50f+0.25f*m_energy; // origin
- s = i+0.25f; // width
+ float i = 0.50f+0.25f*m_energy; // origin
+ float s = i+0.25f; // width
- au = (s-i)/(b-a);
- bu = s-b*(s-i)/(b-a);
+ float au = (s-i)/(b-a);
+ float bu = s-b*(s-i)/(b-a);
- limit[0] = 0.0f;
- limit[1] = m_engine->GetLimitLOD(0);
- limit[2] = limit[1];
- limit[3] = m_engine->GetLimitLOD(1);
- limit[4] = limit[3];
- limit[5] = 1000000.0f;
+ Gfx::LODLevel lodLevels[3] = { Gfx::LOD_High, Gfx::LOD_Medium, Gfx::LOD_Low };
- for ( j=0 ; j<3 ; j++ )
+ for (int j = 0; j < 3; j++)
{
m_engine->ChangeTextureMapping(m_objectPart[0].object,
mat, Gfx::ENG_RSTATE_PART3, "lemt.png", "",
- limit[j*2+0], limit[j*2+1], Gfx::ENG_TEX_MAPPING_1Y,
+ lodLevels[j], Gfx::ENG_TEX_MAPPING_1Y,
au, bu, 1.0f, 0.0f);
}
}
@@ -6183,7 +5973,7 @@ bool CObject::EventFrame(const Event &event)
m_bProxyActivate = false;
m_main->CreateShortcuts();
m_sound->Play(SOUND_FINDING);
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_FINDING, this, 0.0f);
m_displayText->DisplayError(INFO_FINDING, this);
}
@@ -6437,12 +6227,12 @@ void CObject::SetViewFromHere(Math::Vector &eye, float &dirH, float &dirV,
void CObject::SetCharacter(Character* character)
{
- memcpy(&m_character, character, sizeof(m_character));
+ memcpy(&m_character, character, sizeof(Character));
}
void CObject::GetCharacter(Character* character)
{
- memcpy(character, &m_character, sizeof(character));
+ memcpy(character, &m_character, sizeof(Character));
}
Character* CObject::GetCharacter()
@@ -6657,7 +6447,7 @@ bool CObject::JostleObject(float force)
{
if ( m_auto != 0 ) return false;
- m_auto = new CAutoJostle(m_iMan, this);
+ m_auto = new CAutoJostle(this);
pa = static_cast<CAutoJostle*>(m_auto);
pa->Start(0, force);
}
@@ -6821,7 +6611,7 @@ void CObject::SetSelect(bool bMode, bool bDisplayError)
if ( !m_bSelect )
{
- SetGunGoalH(0.0f); // puts the cannon right
+ //SetGunGoalH(0.0f); // puts the cannon right
return; // selects if not finished
}
@@ -7197,7 +6987,7 @@ void CObject::CreateSelectParticle()
}
}
- if ( m_bSelect || IsProgram() )
+ if ( m_bSelect || IsProgram() || m_main->GetRetroMode() )
{
// Creates particles lens for the headlights.
if ( m_type == OBJECT_MOBILEfa ||
@@ -7251,7 +7041,7 @@ void CObject::UpdateSelectParticle()
float angle;
int i;
- if ( !m_bSelect && !IsProgram() ) return;
+ if ( !m_bSelect && !IsProgram() && !m_main->GetRetroMode() ) return;
dim[0].x = 1.0f;
dim[1].x = 1.0f;
@@ -7374,7 +7164,8 @@ void CObject::UpdateSelectParticle()
zoom[2] = 1.0f;
zoom[3] = 1.0f;
- if ( IsProgram() && // current program?
+ if ( ( IsProgram() || // current program?
+ m_main->GetRetroMode() ) && // Retro mode?
Math::Mod(m_aTime, 0.7f) < 0.3f )
{
zoom[0] = 0.0f; // blinks
diff --git a/src/object/object.h b/src/object/object.h
index 8d8baca..4d8cc02 100644
--- a/src/object/object.h
+++ b/src/object/object.h
@@ -28,7 +28,6 @@
#include "sound/sound.h"
-class CInstanceManager;
class CApplication;
class CPhysics;
class CBrain;
@@ -39,8 +38,7 @@ class CRobotMain;
class CBotVar;
class CScript;
-namespace Ui
-{
+namespace Ui {
class CDisplayText;
}
@@ -377,7 +375,7 @@ enum RadarFilter
class CObject
{
public:
- CObject(CInstanceManager* iMan);
+ CObject();
~CObject();
void DeleteObject(bool bAll=false);
@@ -679,7 +677,6 @@ protected:
void UpdateSelectParticle();
protected:
- CInstanceManager* m_iMan;
CApplication* m_app;
Gfx::CEngine* m_engine;
Gfx::CLightManager* m_lightMan;
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index aa2fe22..c1e4140 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -80,7 +80,7 @@
#include "ui/window.h"
-template<> CRobotMain* CSingleton<CRobotMain>::mInstance = nullptr;
+template<> CRobotMain* CSingleton<CRobotMain>::m_instance = nullptr;
// TODO: remove once using std::string
@@ -606,29 +606,27 @@ bool rPoint(CBotVar* pThis, CBotVar* var, CBotVar* pResult, int& Exception)
//! Constructor of robot application
-CRobotMain::CRobotMain(CInstanceManager* iMan, CApplication* app)
+CRobotMain::CRobotMain(CApplication* app)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_MAIN, this);
-
m_app = app;
- m_eventQueue = static_cast<CEventQueue*>(m_iMan->SearchInstance(CLASS_EVENT));
- m_engine = static_cast<Gfx::CEngine*>(m_iMan->SearchInstance(CLASS_ENGINE));
- m_lightMan = static_cast<Gfx::CLightManager*>(m_iMan->SearchInstance(CLASS_LIGHT));
- m_particle = static_cast<Gfx::CParticle*>(m_iMan->SearchInstance(CLASS_PARTICULE));
- m_water = static_cast<Gfx::CWater*>(m_iMan->SearchInstance(CLASS_WATER));
- m_cloud = static_cast<Gfx::CCloud*>(m_iMan->SearchInstance(CLASS_CLOUD));
- m_lightning = static_cast<Gfx::CLightning*>(m_iMan->SearchInstance(CLASS_BLITZ));
- m_planet = static_cast<Gfx::CPlanet*>(m_iMan->SearchInstance(CLASS_PLANET));
- m_sound = static_cast<CSoundInterface*>(m_iMan->SearchInstance(CLASS_SOUND));
+ m_eventQueue = m_app->GetEventQueue();
+ m_sound = m_app->GetSound();
+
+ m_engine = Gfx::CEngine::GetInstancePointer();
+ m_lightMan = m_engine->GetLightManager();
+ m_particle = m_engine->GetParticle();
+ m_water = m_engine->GetWater();
+ m_cloud = m_engine->GetCloud();
+ m_lightning = m_engine->GetLightning();
+ m_planet = m_engine->GetPlanet();
m_interface = new Ui::CInterface();
- m_terrain = new Gfx::CTerrain(m_iMan);
- m_camera = new Gfx::CCamera(m_iMan);
+ m_terrain = new Gfx::CTerrain();
+ m_camera = new Gfx::CCamera();
m_displayText = new Ui::CDisplayText();
- m_movie = new CMainMovie(m_iMan);
- m_dialog = new Ui::CMainDialog(m_iMan);
+ m_movie = new CMainMovie();
+ m_dialog = new Ui::CMainDialog();
m_short = new Ui::CMainShort();
m_map = new Ui::CMainMap();
m_displayInfo = nullptr;
@@ -651,8 +649,17 @@ CRobotMain::CRobotMain(CInstanceManager* iMan, CApplication* app)
m_selectObject = 0;
m_infoUsed = 0;
+ m_beginObject = false;
+ m_terrainGenerate = false;
+ m_terrainInit = false;
+ m_terrainInitTextures = false;
+ m_terrainCreate = false;
+
+ m_version = 1;
+ m_retroStyle = false;
m_immediatSatCom = false;
m_beginSatCom = false;
+ m_lockedSatCom = false;
m_movieLock = false;
m_satComLock = false;
m_editLock = false;
@@ -663,7 +670,11 @@ CRobotMain::CRobotMain(CInstanceManager* iMan, CApplication* app)
m_showPos = false;
m_selectInsect = false;
m_showSoluce = false;
+ #ifdef NDEBUG
+ m_showAll = false;
+ #else
m_showAll = true; // for development
+ #endif
m_cheatRadar = false;
m_fixScene = false;
m_trainerPilot = false;
@@ -857,10 +868,29 @@ CRobotMain::~CRobotMain()
delete m_map;
m_map = nullptr;
- m_iMan = nullptr;
m_app = nullptr;
}
+Gfx::CCamera* CRobotMain::GetCamera()
+{
+ return m_camera;
+}
+
+Gfx::CTerrain* CRobotMain::GetTerrain()
+{
+ return m_terrain;
+}
+
+Ui::CInterface* CRobotMain::GetInterface()
+{
+ return m_interface;
+}
+
+Ui::CDisplayText* CRobotMain::GetDisplayText()
+{
+ return m_displayText;
+}
+
//! Creates the file colobot.ini at the first time
void CRobotMain::CreateIni()
@@ -1010,7 +1040,7 @@ void CRobotMain::ChangePhase(Phase phase)
ChangePause(false);
FlushDisplayInfo();
m_engine->SetRankView(0);
- m_engine->FlushObject();
+ m_engine->DeleteAllObjects();
m_engine->SetWaterAddColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f));
m_engine->SetBackground("");
m_engine->SetBackForce(false);
@@ -1027,10 +1057,6 @@ void CRobotMain::ChangePhase(Phase phase)
m_cloud->Flush();
m_lightning->Flush();
m_planet->Flush();
- m_iMan->Flush(CLASS_OBJECT);
- m_iMan->Flush(CLASS_PHYSICS);
- m_iMan->Flush(CLASS_BRAIN);
- m_iMan->Flush(CLASS_PYRO);
m_interface->Flush();
ClearInterface();
FlushNewScriptName();
@@ -1042,6 +1068,12 @@ void CRobotMain::ChangePhase(Phase phase)
m_cameraZoom = 0.0f;
m_shortCut = true;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+ iMan->Flush(CLASS_OBJECT);
+ iMan->Flush(CLASS_PHYSICS);
+ iMan->Flush(CLASS_BRAIN);
+ iMan->Flush(CLASS_PYRO);
+
Math::Point dim, pos;
// Creates and hide the command console.
@@ -1105,13 +1137,13 @@ void CRobotMain::ChangePhase(Phase phase)
if (m_mapImage)
m_map->SetFixImage(m_mapFilename);
- Math::Point ddim;
+ /*Math::Point ddim;
pos.x = 620.0f/640.0f;
pos.y = 460.0f/480.0f;
ddim.x = 20.0f/640.0f;
ddim.y = 20.0f/480.0f;
- m_interface->CreateButton(pos, ddim, 11, EVENT_BUTTON_QUIT);
+ m_interface->CreateButton(pos, ddim, 11, EVENT_BUTTON_QUIT);*/
if (m_immediatSatCom && !loading &&
m_infoFilename[SATCOM_HUSTON][0] != 0)
@@ -1123,6 +1155,7 @@ void CRobotMain::ChangePhase(Phase phase)
if (m_phase == PHASE_WIN)
{
+ m_sound->StopAll();
if (m_endingWinRank == -1)
{
ChangePhase(PHASE_TERM);
@@ -1162,20 +1195,20 @@ void CRobotMain::ChangePhase(Phase phase)
pe->SetGenericMode(true);
pe->SetFontType(Gfx::FONT_COLOBOT);
pe->SetEditCap(false);
- pe->SetHiliteCap(false);
- pe->ReadText("help/win.txt");
+ pe->SetHighlightCap(false);
+ pe->ReadText(std::string("help/") + m_app->GetLanguageChar() + std::string("/win.txt"));
}
else
{
m_displayText->DisplayError(INFO_WIN, Math::Vector(0.0f,0.0f,0.0f), 15.0f, 60.0f, 1000.0f);
}
+ StartMusic();
}
- m_sound->StopAll();
- StartMusic();
}
if (m_phase == PHASE_LOST)
{
+ m_sound->StopAll();
if (m_endingLostRank == -1)
{
ChangePhase(PHASE_TERM);
@@ -1192,9 +1225,9 @@ void CRobotMain::ChangePhase(Phase phase)
ddim.x = dim.x*2; ddim.y = dim.y*2;
m_interface->CreateButton(pos, ddim, 16, EVENT_BUTTON_OK);
m_displayText->DisplayError(INFO_LOST, Math::Vector(0.0f,0.0f,0.0f), 15.0f, 60.0f, 1000.0f);
+
+ StartMusic();
}
- m_sound->StopAll();
- StartMusic();
}
if (m_phase == PHASE_LOADING)
@@ -1299,6 +1332,7 @@ bool CRobotMain::EventProcess(Event &event)
// Management of the console.
if (m_phase != PHASE_NAME &&
!m_movie->IsExist() &&
+ !m_movieLock && !m_editLock &&
event.type == EVENT_KEY_DOWN &&
event.key.key == KEY(PAUSE)) // Pause ?
{
@@ -1986,7 +2020,7 @@ void CRobotMain::FlushDisplayInfo()
m_infoFilename[i][0] = 0;
m_infoPos[i] = 0;
}
- strcpy(m_infoFilename[SATCOM_OBJECT], "help/objects.txt");
+ strcpy(m_infoFilename[SATCOM_OBJECT], "help/") + m_app->GetLanguageChar() + std::string("/objects.txt");
m_infoIndex = 0;
}
@@ -1994,7 +2028,7 @@ void CRobotMain::FlushDisplayInfo()
//! index: SATCOM_*
void CRobotMain::StartDisplayInfo(int index, bool movie)
{
- if (m_cmdEdit || m_satComLock) return;
+ if (m_cmdEdit || m_satComLock || m_lockedSatCom) return;
CObject* obj = GetSelect();
bool human = obj != nullptr && obj->GetType() == OBJECT_HUMAN;
@@ -2058,6 +2092,8 @@ void CRobotMain::StartDisplayInfo(const char *filename, int index)
//! End of displaying of instructions
void CRobotMain::StopDisplayInfo()
{
+ if (m_cmdEdit) return;
+
if (m_movieInfoIndex != -1) // film to read the SatCom?
m_movie->Start(MM_SATCOMclose, 2.0f);
@@ -2392,10 +2428,11 @@ CObject* CRobotMain::GetSelectObject()
//! Deselects everything, and returns the object that was selected
CObject* CRobotMain::DeselectAll()
{
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
CObject* prev = nullptr;
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->GetSelect()) prev = obj;
@@ -2503,10 +2540,12 @@ bool CRobotMain::DeselectObject()
//! Quickly removes all objects
void CRobotMain::DeleteAllObjects()
{
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
// Removes all pyrotechnic effects in progress.
while (true)
{
- Gfx::CPyro* pyro = static_cast<Gfx::CPyro*>(m_iMan->SearchInstance(CLASS_PYRO, 0));
+ Gfx::CPyro* pyro = static_cast<Gfx::CPyro*>(iMan->SearchInstance(CLASS_PYRO, 0));
if (pyro == nullptr) break;
pyro->DeleteObject();
@@ -2526,7 +2565,7 @@ void CRobotMain::DeleteAllObjects()
while (true)
{
- CObject* obj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, 0));
+ CObject* obj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, 0));
if (obj == nullptr) break;
obj->DeleteObject(true); // destroys rapidly
@@ -2543,9 +2582,10 @@ void CRobotMain::SelectHuman()
//! Returns the object human
CObject* CRobotMain::SearchHuman()
{
+ 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 == 0) break;
ObjectType type = obj->GetType();
@@ -2558,9 +2598,10 @@ CObject* CRobotMain::SearchHuman()
//! Returns the object toto
CObject* CRobotMain::SearchToto()
{
+ 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;
ObjectType type = obj->GetType();
@@ -2573,11 +2614,12 @@ CObject* CRobotMain::SearchToto()
//! Returns the nearest selectable object from a given position
CObject* CRobotMain::SearchNearest(Math::Vector pos, CObject* exclu)
{
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
float min = 100000.0f;
CObject* best = 0;
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 == exclu) continue;
@@ -2600,9 +2642,10 @@ CObject* CRobotMain::SearchNearest(Math::Vector pos, CObject* exclu)
//! Returns the selected object
CObject* CRobotMain::GetSelect()
{
+ 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->GetSelect())
@@ -2613,9 +2656,10 @@ CObject* CRobotMain::GetSelect()
CObject* CRobotMain::SearchObject(ObjectType type)
{
+ 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->GetType() == type)
@@ -2628,10 +2672,11 @@ CObject* CRobotMain::SearchObject(ObjectType type)
CObject* CRobotMain::DetectObject(Math::Point pos)
{
int objRank = m_engine->DetectObject(pos);
+ 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;
@@ -2850,7 +2895,7 @@ bool CRobotMain::DeleteObject()
CObject* obj = GetSelect();
if (obj == nullptr) return false;
- Gfx::CPyro* pyro = new Gfx::CPyro(m_iMan);
+ Gfx::CPyro* pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_FRAGT, obj);
obj->SetSelect(false); // deselects the object
@@ -2873,9 +2918,11 @@ void CRobotMain::HiliteClear()
int rank = -1;
m_engine->SetHighlightRank(&rank); // nothing more selected
+ 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;
obj->SetHilite(false);
@@ -3025,7 +3072,7 @@ void CRobotMain::HelpObject()
CObject* obj = GetSelect();
if (obj == nullptr) return;
- const char* filename = GetHelpFilename(obj->GetType());
+ const char* filename = GetHelpFilename(obj->GetType()).c_str();
if (filename[0] == 0) return;
StartDisplayInfo(filename, -1);
@@ -3035,9 +3082,11 @@ void CRobotMain::HelpObject()
//! Change the mode of the camera
void CRobotMain::ChangeCamera()
{
+ 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->GetSelect())
@@ -3191,9 +3240,11 @@ void CRobotMain::RemoteCamera(float pan, float zoom, float rTime)
//! Cancels the current movie
void CRobotMain::AbortMovie()
{
+ 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;
CAuto* automat = obj->GetAuto();
@@ -3261,13 +3312,15 @@ bool CRobotMain::EventFrame(const Event &event)
if (pm != nullptr) pm->FlushObject();
}
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
CObject* toto = nullptr;
if (!m_freePhoto)
{
// Advances all the robots, but not toto.
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 (pm != nullptr) pm->UpdateObject(obj);
if (obj->GetTruck() != nullptr) continue;
@@ -3280,7 +3333,7 @@ bool CRobotMain::EventFrame(const Event &event)
// Advances all objects transported by robots.
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->GetTruck() == nullptr) continue;
obj->EventProcess(event);
@@ -3289,7 +3342,7 @@ bool CRobotMain::EventFrame(const Event &event)
// Advances pyrotechnic effects.
for (int i = 0; i < 1000000; i++)
{
- Gfx::CPyro* pyro = static_cast<Gfx::CPyro*>(m_iMan->SearchInstance(CLASS_PYRO, i));
+ Gfx::CPyro* pyro = static_cast<Gfx::CPyro*>(iMan->SearchInstance(CLASS_PYRO, i));
if (pyro == nullptr) break;
pyro->EventProcess(event);
@@ -3439,9 +3492,11 @@ bool CRobotMain::EventObject(const Event &event)
m_resetCreate = 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 == nullptr) break;
obj->EventProcess(event);
@@ -3673,16 +3728,18 @@ void CRobotMain::Convert()
void CRobotMain::ScenePerso()
{
DeleteAllObjects(); // removes all the current 3D Scene
- m_engine->FlushObject();
+ m_engine->DeleteAllObjects();
m_terrain->FlushRelief(); // all flat
m_terrain->FlushBuildingLevel();
m_terrain->FlushFlyingLimit();
m_lightMan->FlushLights();
m_particle->FlushParticle();
- m_iMan->Flush(CLASS_OBJECT);
- m_iMan->Flush(CLASS_PHYSICS);
- m_iMan->Flush(CLASS_BRAIN);
- m_iMan->Flush(CLASS_PYRO);
+
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+ iMan->Flush(CLASS_OBJECT);
+ iMan->Flush(CLASS_PHYSICS);
+ iMan->Flush(CLASS_BRAIN);
+ iMan->Flush(CLASS_PYRO);
m_dialog->SetSceneName("perso");
m_dialog->SetSceneRank(0);
@@ -3733,6 +3790,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
m_displayText->SetDelay(1.0f);
m_displayText->SetEnable(true);
m_immediatSatCom = false;
+ m_lockedSatCom = false;
m_endingWinRank = 0;
m_endingLostRank = 0;
m_endTakeTotal = 0;
@@ -3773,31 +3831,49 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
m_dialog->BuildResumeName(m_resume, base, rank);
GetResource(RES_TEXT, RT_SCRIPT_NEW, m_scriptName);
m_scriptFile[0] = 0;
+
+ m_beginObject = false;
+ m_terrainGenerate = false;
+ m_terrainInit = false;
+ m_terrainInitTextures = false;
+ m_terrainCreate = false;
+
+ m_version = 1;
+ m_retroStyle = false;
}
char line[500];
char name[200];
char dir[100];
char op[100];
+ char filename[500];
+ int lineNum = 0;
memset(line, 0, 500);
memset(name, 0, 200);
memset(dir, 0, 100);
memset(op, 0, 100);
+ memset(filename, 0, 500);
std::string tempLine;
m_dialog->BuildSceneName(tempLine, base, rank);
- strcpy(line, tempLine.c_str());
- FILE* file = fopen(line, "r");
+ strcpy(filename, tempLine.c_str());
+ FILE* file = fopen(filename, "r");
if (file == NULL) return;
int rankObj = 0;
int rankGadget = 0;
CObject* sel = 0;
+
+ std::string oldLocale;
char *locale = setlocale(LC_NUMERIC, nullptr);
+ if (locale != nullptr)
+ oldLocale = locale;
+
setlocale(LC_NUMERIC, "C");
while (fgets(line, 500, file) != NULL)
{
+ lineNum++;
for (int i = 0; i < 500; i++)
{
if (line[i] == '\t' ) line[i] = ' '; // replace tab by space
@@ -3808,6 +3884,9 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
}
}
+ if (Cmd(line, "MissionFile") && !resetObject)
+ m_version = OpInt(line, "version", 1);
+
// TODO: Fallback to an non-localized entry
sprintf(op, "Title.%c", m_app->GetLanguageChar());
if (Cmd(line, op) && !resetObject)
@@ -3831,6 +3910,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
strcpy(m_infoFilename[SATCOM_HUSTON], path.c_str());
m_immediatSatCom = OpInt(line, "immediat", 0);
+ if(m_version >= 2) m_beginSatCom = m_lockedSatCom = OpInt(line, "lock", 0);
}
if (Cmd(line, "Satellite") && !resetObject)
@@ -3950,34 +4030,96 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
m_engine->SetForegroundName(name);
}
- if (Cmd(line, "Global") && !resetObject)
+ if (((m_version == 1 && Cmd(line, "Global")) || (m_version >= 2 && Cmd(line, "Mission"))) && !resetObject)
{
g_unit = OpFloat(line, "unitScale", 4.0f);
m_engine->SetTracePrecision(OpFloat(line, "traceQuality", 1.0f));
m_shortCut = OpInt(line, "shortcut", 1);
+ if(m_version >= 2) {
+ m_retroStyle = OpInt(line, "retro", 0);
+ if(m_retroStyle) GetLogger()->Info("Retro mode enabled.\n");
+ }
}
if (Cmd(line, "TerrainGenerate") && !resetObject)
{
+ if(m_terrainCreate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainGenerate after TerrainCreate\n", filename, lineNum);
+ continue;
+ }
+
+ if(m_terrainInit) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainGenerate after TerrainInit\n", filename, lineNum);
+ continue;
+ }
+
m_terrain->Generate(OpInt(line, "mosaic", 20),
OpInt(line, "brick", 3),
OpFloat(line, "size", 20.0f),
OpFloat(line, "vision", 500.0f)*g_unit,
OpInt(line, "depth", 2),
OpFloat(line, "hard", 0.5f));
+
+ m_terrainGenerate = true;
}
- if (Cmd(line, "TerrainWind") && !resetObject)
+ if (Cmd(line, "TerrainWind") && !resetObject) {
+ if(m_terrainCreate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainWind after TerrainCreate\n", filename, lineNum);
+ continue;
+ }
+
+ if(m_terrainInit) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainWind after TerrainInit\n", filename, lineNum);
+ continue;
+ }
+
+ if(!m_terrainGenerate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainWind before TerrainGenerate\n", filename, lineNum);
+ continue;
+ }
+
m_terrain->SetWind(OpPos(line, "speed"));
+ }
if (Cmd(line, "TerrainRelief") && !resetObject)
{
+ if(m_terrainCreate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainRelief after TerrainCreate\n", filename, lineNum);
+ continue;
+ }
+
+ if(m_terrainInit) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainRelief after TerrainInit\n", filename, lineNum);
+ continue;
+ }
+
+ if(!m_terrainGenerate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainRelief before TerrainGenerate\n", filename, lineNum);
+ continue;
+ }
+
OpString(line, "image", name);
m_terrain->LoadRelief(name, OpFloat(line, "factor", 1.0f), OpInt(line, "border", 1));
}
if (Cmd(line, "TerrainResource") && !resetObject)
{
+ if(m_terrainCreate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainResource after TerrainCreate\n", filename, lineNum);
+ continue;
+ }
+
+ if(m_terrainInit) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainResource after TerrainInit\n", filename, lineNum);
+ continue;
+ }
+
+ if(!m_terrainGenerate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainResource before TerrainGenerate\n", filename, lineNum);
+ continue;
+ }
+
OpString(line, "image", name);
m_terrain->LoadResources(name);
}
@@ -4022,6 +4164,11 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
if (Cmd(line, "TerrainInitTextures") && !resetObject)
{
+ if(m_terrainInit) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainInitTextures and TerrainInit at same time\n", filename, lineNum);
+ continue;
+ }
+
OpString(line, "image", name);
AddExt(name, ".png");
int dx = OpInt(line, "dx", 1);
@@ -4035,17 +4182,42 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
CopyFileListToTemp(name, tt, dx*dy);
m_terrain->InitTextures(name, tt, dx, dy);
+
+ m_terrainInitTextures = true;
}
- if (Cmd(line, "TerrainInit") && !resetObject)
+ if (Cmd(line, "TerrainInit") && !resetObject) {
+ if(m_terrainInitTextures) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainInit and TerrainInitTextures at same time\n", filename, lineNum);
+ continue;
+ }
+
m_terrain->InitMaterials(OpInt(line, "id", 1));
+ m_terrainInit = true;
+ }
if (Cmd(line, "TerrainMaterial") && !resetObject)
{
+ if(m_terrainCreate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainMaterial after TerrainCreate\n", filename, lineNum);
+ continue;
+ }
+
+ if(m_terrainInit) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainMaterial after TerrainInit\n", filename, lineNum);
+ continue;
+ }
+
+ if(m_terrainInitTextures) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainMaterial and TerrainInitTextures at same time\n", filename, lineNum);
+ continue;
+ }
+
OpString(line, "image", name);
AddExt(name, ".png");
- if (strstr(name, "%user%") != 0)
- CopyFileToTemp(name);
+ if (strstr(name, "%user%") != 0) {
+ GetProfile().CopyFileToTemp(std::string(name));
+ }
m_terrain->AddMaterial(OpInt(line, "id", 0),
name,
@@ -4060,6 +4232,26 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
if (Cmd(line, "TerrainLevel") && !resetObject)
{
+ if(m_terrainCreate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel after TerrainCreate\n", filename, lineNum);
+ continue;
+ }
+
+ if(!m_terrainInit) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel before TerrainInit\n", filename, lineNum);
+ continue;
+ }
+
+ if(m_terrainInitTextures) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel and TerrainInitTextures at same time\n", filename, lineNum);
+ continue;
+ }
+
+ if(!m_terrainGenerate) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel before TerrainGenerate\n", filename, lineNum);
+ continue;
+ }
+
char* op = SearchOp(line, "id");
int id[50];
int i = 0;
@@ -4078,8 +4270,10 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
OpFloat(line, "radius", 0.0f)*g_unit);
}
- if (Cmd(line, "TerrainCreate") && !resetObject)
+ if (Cmd(line, "TerrainCreate") && !resetObject) {
m_terrain->CreateObjects();
+ m_terrainCreate = true;
+ }
if (Cmd(line, "BeginObject"))
{
@@ -4088,10 +4282,17 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
if (read[0] != 0) // loading file ?
sel = IOReadScene(read, stack);
+
+ m_beginObject = true;
}
if (Cmd(line, "CreateObject") && read[0] == 0)
{
+ if (!m_beginObject) {
+ GetLogger()->Error("Syntax error in file '%s' (line %d): CreateObject before BeginObject\n", filename, lineNum);
+ continue;
+ }
+
ObjectType type = OpTypeObject(line, "type", OBJECT_NULL);
int gadget = OpInt(line, "gadget", -1);
@@ -4130,12 +4331,13 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
Math::Vector pos = OpPos(line, "pos")*g_unit;
float dir = OpFloat(line, "dir", 0.0f)*Math::PI;
+ bool trainer = OpInt(line, "trainer", 0);
CObject* obj = CreateObject(pos, dir,
OpFloat(line, "z", 1.0f),
OpFloat(line, "h", 0.0f),
type,
OpFloat(line, "power", 1.0f),
- OpInt(line, "trainer", 0),
+ trainer,
OpInt(line, "toy", 0),
OpInt(line, "option", 0));
@@ -4155,7 +4357,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
Gfx::PyroType pType = OpPyro(line, "pyro");
if (pType != Gfx::PT_NULL)
{
- Gfx::CPyro* pyro = new Gfx::CPyro(m_iMan);
+ Gfx::CPyro* pyro = new Gfx::CPyro();
pyro->Create(pType, obj);
}
@@ -4197,8 +4399,14 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
obj->SetShield(OpFloat(line, "shield", 1.0f));
obj->SetMagnifyDamage(OpFloat(line, "magnifyDamage", 1.0f));
obj->SetClip(OpInt(line, "clip", 1));
- obj->SetCheckToken(OpInt(line, "checkToken", 1));
- obj->SetManual(OpInt(line, "manual", 0));
+ obj->SetCheckToken(m_version >= 2 ? trainer : OpInt(line, "manual", 1));
+ obj->SetManual(m_version >= 2 ? !trainer : OpInt(line, "manual", 0));
+
+ if(m_version >= 2) {
+ Math::Vector zoom = OpDir(line, "zoom");
+ if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f)
+ obj->SetZoom(0, zoom);
+ }
CMotion* motion = obj->GetMotion();
if (motion != nullptr)
@@ -4528,8 +4736,8 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
}
m_dialog->SetSceneRead("");
m_dialog->SetStackRead("");
-
- setlocale(LC_NUMERIC, locale);
+
+ setlocale(LC_NUMERIC, oldLocale.c_str());
}
//! Creates an object of decoration mobile or stationary
@@ -4572,7 +4780,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_START ||
type == OBJECT_END )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateBuilding(pos, angle, height, type, power);
CAuto* automat = object->GetAuto();
@@ -4614,7 +4822,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_MARKKEYd ||
type == OBJECT_EGG )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateResource(pos, angle, type, power);
}
else
@@ -4624,7 +4832,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_FLAGy ||
type == OBJECT_FLAGv )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateFlag(pos, angle, type);
}
else
@@ -4634,7 +4842,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_BARRIER3 ||
type == OBJECT_BARRIER4 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateBarrier(pos, angle, height, type);
}
else
@@ -4669,7 +4877,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_TREE8 ||
type == OBJECT_TREE9 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreatePlant(pos, angle, height, type);
}
else
@@ -4684,7 +4892,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_MUSHROOM8 ||
type == OBJECT_MUSHROOM9 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateMushroom(pos, angle, height, type);
}
else
@@ -4739,7 +4947,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_TEEN48 ||
type == OBJECT_TEEN49 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->SetOption(option);
object->CreateTeen(pos, angle, zoom, height, type);
}
@@ -4755,7 +4963,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_QUARTZ8 ||
type == OBJECT_QUARTZ9 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateQuartz(pos, angle, height, type);
}
else
@@ -4770,13 +4978,13 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_ROOT8 ||
type == OBJECT_ROOT9 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateRoot(pos, angle, height, type);
}
else
if ( type == OBJECT_HOME1 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateHome(pos, angle, height, type);
}
else
@@ -4794,7 +5002,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_RUINbase ||
type == OBJECT_RUINhead )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateRuin(pos, angle, height, type);
}
else
@@ -4803,7 +5011,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_APOLLO4 ||
type == OBJECT_APOLLO5 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateApollo(pos, angle, type);
}
else
@@ -4813,7 +5021,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_BEE ||
type == OBJECT_WORM )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->CreateInsect(pos, angle, type); // no eggs
}
else
@@ -4849,7 +5057,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo
type == OBJECT_MOBILEdr ||
type == OBJECT_APOLLO2 )
{
- object = new CObject(m_iMan);
+ object = new CObject();
object->SetOption(option);
object->CreateVehicle(pos, angle, type, power, trainer, toy);
}
@@ -4877,6 +5085,7 @@ int CRobotMain::CreateLight(Math::Vector direction, Gfx::Color color)
Gfx::Light light;
light.type = Gfx::LIGHT_DIRECTIONAL;
light.diffuse = color;
+ light.ambient = color * 0.1f;
light.direction = direction;
int obj = m_lightMan->CreateLight(Gfx::LIGHT_PRI_HIGH);
m_lightMan->SetLight(obj, light);
@@ -4894,6 +5103,7 @@ int CRobotMain::CreateSpot(Math::Vector pos, Gfx::Color color)
Gfx::Light light;
light.type = Gfx::LIGHT_SPOT;
light.diffuse = color;
+ light.ambient = color * 0.1f;
light.position = pos;
light.direction = Math::Vector(0.0f, -1.0f, 0.0f);
light.spotIntensity = 1.0f;
@@ -5069,10 +5279,12 @@ bool CRobotMain::TestGadgetQuantity(int rank)
//! Calculates the distance to the nearest object
float CRobotMain::SearchNearestObject(Math::Vector center, CObject *exclu)
{
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
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?
@@ -5218,12 +5430,14 @@ void CRobotMain::ShowDropZone(CObject* metal, CObject* truck)
Math::Vector center = metal->GetPosition(0);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
// Calculates the maximum radius possible depending on other items.
float oMax = 30.0f; // radius to build the biggest building
float tMax;
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?
@@ -5441,13 +5655,15 @@ void CRobotMain::CompileScript(bool soluce)
int nbError = 0;
int lastError = 0;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
do
{
lastError = nbError;
nbError = 0;
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->GetTruck() != nullptr) continue;
@@ -5476,7 +5692,7 @@ void CRobotMain::CompileScript(bool soluce)
{
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->GetTruck() != 0) continue;
@@ -5494,7 +5710,7 @@ void CRobotMain::CompileScript(bool soluce)
// Start all programs according to the command "run".
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->GetTruck() != nullptr) continue;
@@ -5569,9 +5785,11 @@ void CRobotMain::LoadFileScript(CObject *obj, const char* filename, int objRank,
//! Saves all programs of all the robots
void CRobotMain::SaveAllScript()
{
+ 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;
SaveOneScript(obj);
@@ -5706,9 +5924,11 @@ bool CRobotMain::IsBusy()
{
if (m_CompteurFileOpen > 0) return true;
+ 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;
CBrain* brain = obj->GetBrain();
@@ -5851,10 +6071,12 @@ bool CRobotMain::IOWriteScene(const char *filename, const char *filecbot, char *
fputs(line, file);
}
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
int objRank = 0;
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->GetType() == OBJECT_TOTO) continue;
@@ -5892,7 +6114,7 @@ bool CRobotMain::IOWriteScene(const char *filename, const char *filecbot, char *
objRank = 0;
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->GetType() == OBJECT_TOTO) continue;
@@ -6047,7 +6269,7 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot)
if (fret != nullptr)
{
obj->SetFret(fret);
- CTaskManip* task = new CTaskManip(m_iMan, obj);
+ CTaskManip* task = new CTaskManip(obj);
task->Start(TMO_AUTO, TMA_GRAB); // holds the object!
delete task;
}
@@ -6065,6 +6287,8 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot)
fclose(file);
#if CBOT_STACK
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
// Compiles scripts.
int nbError = 0;
int lastError = 0;
@@ -6074,7 +6298,7 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot)
nbError = 0;
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->GetTruck() != nullptr) continue;
@@ -6100,7 +6324,7 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot)
objRank = 0;
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->GetType() == OBJECT_TOTO) continue;
@@ -6176,10 +6400,12 @@ void CRobotMain::ResetObject()
Math::Vector pos, angle;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
// Removes all pyrotechnic effects in progress.
while ( true )
{
- pyro = static_cast<CPyro*>(m_iMan->SearchInstance(CLASS_PYRO, 0));
+ pyro = static_cast<CPyro*>(iMan->SearchInstance(CLASS_PYRO, 0));
if ( pyro == 0 ) break;
pyro->DeleteObject();
@@ -6194,7 +6420,7 @@ void CRobotMain::ResetObject()
for ( i=0 ; i<1000000 ; i++ )
{
- obj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ obj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( obj == 0 ) break;
cap = obj->GetResetCap();
@@ -6243,7 +6469,7 @@ void CRobotMain::ResetObject()
if ( pos == obj->GetPosition(0) &&
angle == obj->GetAngle(0) ) continue;
- pyro = new CPyro(m_iMan);
+ pyro = new CPyro();
pyro->Create(PT_RESET, obj);
brain = obj->GetBrain();
@@ -6273,10 +6499,13 @@ void CRobotMain::ResetCreate()
m_particle->FlushParticle();
m_terrain->FlushBuildingLevel();
- m_iMan->Flush(CLASS_OBJECT);
- m_iMan->Flush(CLASS_PHYSICS);
- m_iMan->Flush(CLASS_BRAIN);
- m_iMan->Flush(CLASS_PYRO);
+
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+ iMan->Flush(CLASS_OBJECT);
+ iMan->Flush(CLASS_PHYSICS);
+ iMan->Flush(CLASS_BRAIN);
+ iMan->Flush(CLASS_PYRO);
+
m_camera->SetType(Gfx::CAM_TYPE_DIALOG);
CreateScene(m_dialog->GetSceneSoluce(), false, true);
@@ -6285,13 +6514,13 @@ void CRobotMain::ResetCreate()
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;
ResetCap cap = obj->GetResetCap();
if (cap == RESET_NONE) continue;
- Gfx::CPyro* pyro = new Gfx::CPyro(m_iMan);
+ Gfx::CPyro* pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_RESET, obj);
}
}
@@ -6299,6 +6528,8 @@ void CRobotMain::ResetCreate()
//! Checks if the mission is over
Error CRobotMain::CheckEndMission(bool frame)
{
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for (int t = 0; t < m_endTakeTotal; t++)
{
if (m_endTake[t].message[0] != 0) continue;
@@ -6311,7 +6542,7 @@ Error CRobotMain::CheckEndMission(bool frame)
int nb = 0;
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;
// Do not use GetActif () because an invisible worm (underground)
@@ -6545,9 +6776,11 @@ bool CRobotMain::GetRadar()
if (m_cheatRadar)
return true;
+ 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 == 0) break;
ObjectType type = obj->GetType();
@@ -6572,6 +6805,10 @@ const char* CRobotMain::GetFilesDir()
return m_dialog->GetFilesDir().c_str();
}
+bool CRobotMain::GetRetroMode()
+{
+ return m_retroStyle;
+}
//! Change the player's name
void CRobotMain::SetGamerName(const char *name)
diff --git a/src/object/robotmain.h b/src/object/robotmain.h
index cb0cd7f..fe5fbd5 100644
--- a/src/object/robotmain.h
+++ b/src/object/robotmain.h
@@ -71,12 +71,10 @@ enum Phase
};
-class CInstanceManager;
class CEventQueue;
class CSoundInterface;
-namespace Gfx
-{
+namespace Gfx {
class CEngine;
class CLightManager;
class CWater;
@@ -84,17 +82,16 @@ class CCloud;
class CLightning;
class CPlanet;
class CTerrain;
-};
+}
-namespace Ui
-{
+namespace Ui {
class CMainDialog;
class CMainShort;
class CMainMap;
class CInterface;
class CDisplayText;
class CDisplayInfo;
-};
+}
struct EndTake
@@ -178,9 +175,14 @@ const int AXIS_INVALID = -1;
class CRobotMain : public CSingleton<CRobotMain>
{
public:
- CRobotMain(CInstanceManager* iMan, CApplication* app);
+ CRobotMain(CApplication* app);
~CRobotMain();
+ Gfx::CCamera* GetCamera();
+ Gfx::CTerrain* GetTerrain();
+ Ui::CInterface* GetInterface();
+ Ui::CDisplayText* GetDisplayText();
+
void CreateIni();
//! Sets the default input bindings (key and axes)
@@ -302,6 +304,7 @@ public:
const char* GetSavegameDir();
const char* GetPublicDir();
const char* GetFilesDir();
+ bool GetRetroMode();
void SetGamerName(const char *name);
char* GetGamerName();
@@ -358,7 +361,6 @@ protected:
void Convert();
void CreateScene(bool soluce, bool fixScene, bool resetObject);
- void CreateModel();
Math::Vector LookatPoint(Math::Vector eye, float angleH, float angleV, float length);
CObject* CreateObject(Math::Vector pos, float angle, float zoom,
float height, ObjectType type, float power=1.0f,
@@ -390,7 +392,6 @@ protected:
void UpdateSpeedLabel();
protected:
- CInstanceManager* m_iMan;
CApplication* m_app;
CEventQueue* m_eventQueue;
CMainMovie* m_movie;
@@ -447,8 +448,18 @@ protected:
int m_delayWriteMessage;
int m_movieInfoIndex;
+ //Level Checker flags
+ bool m_beginObject;
+ bool m_terrainGenerate;
+ bool m_terrainInitTextures;
+ bool m_terrainInit;
+ bool m_terrainCreate;
+
+ int m_version; // Mission file version
+ bool m_retroStyle; // Retro
bool m_immediatSatCom; // SatCom immediately?
bool m_beginSatCom; // messages SatCom poster?
+ bool m_lockedSatCom; // SatCom locked?
bool m_movieLock; // movie in progress?
bool m_satComLock; // call of SatCom is possible?
bool m_editLock; // edition in progress?
diff --git a/src/object/task/task.cpp b/src/object/task/task.cpp
index b310fd5..39fdccf 100644
--- a/src/object/task/task.cpp
+++ b/src/object/task/task.cpp
@@ -14,33 +14,28 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// task.cpp
-
-
-// #include <stdio.h>
#include "object/task/task.h"
-#include "common/iman.h"
-#include "object/object.h"
+#include "app/app.h"
+#include "object/object.h"
+#include "object/robotmain.h"
// Object's constructor.
-CTask::CTask(CInstanceManager* iMan, CObject* object)
+CTask::CTask(CObject* object)
{
- m_iMan = iMan;
-
- m_engine = static_cast<Gfx::CEngine*>(m_iMan->SearchInstance(CLASS_ENGINE));
- m_lightMan = static_cast<Gfx::CLightManager*>(m_iMan->SearchInstance(CLASS_LIGHT));
- m_terrain = static_cast<Gfx::CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
- m_water = static_cast<Gfx::CWater*>(m_iMan->SearchInstance(CLASS_WATER));
- m_particle = static_cast<Gfx::CParticle*>(m_iMan->SearchInstance(CLASS_PARTICULE));
- m_camera = static_cast<Gfx::CCamera*>(m_iMan->SearchInstance(CLASS_CAMERA));
- 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_sound = CApplication::GetInstancePointer()->GetSound();
+ m_engine = Gfx::CEngine::GetInstancePointer();
+ m_lightMan = m_engine->GetLightManager();
+ m_water = m_engine->GetWater();
+ m_particle = m_engine->GetParticle();
+ m_main = CRobotMain::GetInstancePointer();
+ m_terrain = m_main->GetTerrain();
+ m_camera = m_main->GetCamera();
+ m_displayText = m_main->GetDisplayText();
m_object = object;
m_physics = m_object->GetPhysics();
diff --git a/src/object/task/task.h b/src/object/task/task.h
index 7239d48..12961ef 100644
--- a/src/object/task/task.h
+++ b/src/object/task/task.h
@@ -21,10 +21,10 @@
#include "common/event.h"
#include "common/global.h"
+
#include "math/const.h"
-class CInstanceManager;
class CBrain;
class CPhysics;
class CMotion;
@@ -64,7 +64,7 @@ const float ARM_STOCK_ANGLE3 = -70.0f*Math::PI/180.0f;
class CTask
{
public:
- CTask(CInstanceManager* iMan, CObject* object);
+ CTask(CObject* object);
virtual ~CTask();
virtual bool EventProcess(const Event &event);
@@ -73,7 +73,6 @@ public:
virtual bool Abort();
protected:
- CInstanceManager* m_iMan;
Gfx::CEngine* m_engine;
Gfx::CLightManager* m_lightMan;
Gfx::CParticle* m_particle;
diff --git a/src/object/task/taskadvance.cpp b/src/object/task/taskadvance.cpp
index 0d159d2..58eb939 100644
--- a/src/object/task/taskadvance.cpp
+++ b/src/object/task/taskadvance.cpp
@@ -14,11 +14,11 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskadvance.cpp
#include "object/task/taskadvance.h"
#include "math/geometry.h"
+
#include "physics/physics.h"
@@ -26,8 +26,7 @@
// Object's constructor.
-CTaskAdvance::CTaskAdvance(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskAdvance::CTaskAdvance(CObject* object) : CTask(object)
{
}
diff --git a/src/object/task/taskadvance.h b/src/object/task/taskadvance.h
index dbb80d9..f8c672d 100644
--- a/src/object/task/taskadvance.h
+++ b/src/object/task/taskadvance.h
@@ -20,6 +20,7 @@
#include "object/task/task.h"
+
#include "math/vector.h"
@@ -27,7 +28,7 @@
class CTaskAdvance : public CTask
{
public:
- CTaskAdvance(CInstanceManager* iMan, CObject* object);
+ CTaskAdvance(CObject* object);
~CTaskAdvance();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp
index d82874c..b9af475 100644
--- a/src/object/task/taskbuild.cpp
+++ b/src/object/task/taskbuild.cpp
@@ -14,29 +14,32 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskbuild.cpp
#include "object/task/taskbuild.h"
#include "common/iman.h"
+
#include "graphics/core/color.h"
#include "graphics/core/light.h"
#include "graphics/engine/lightman.h"
#include "graphics/engine/terrain.h"
#include "graphics/engine/water.h"
+
#include "math/geometry.h"
+
#include "object/auto/auto.h"
#include "object/motion/motionhuman.h"
#include "object/robotmain.h"
+
#include "physics/physics.h"
+
#include "ui/displaytext.h"
#include <string.h>
// Object's constructor.
-CTaskBuild::CTaskBuild(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskBuild::CTaskBuild(CObject* object) : CTask(object)
{
int i;
@@ -75,7 +78,7 @@ CTaskBuild::~CTaskBuild()
bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle)
{
- m_building = new CObject(m_iMan);
+ m_building = new CObject();
if ( !m_building->CreateBuilding(pos, angle, 0.0f, m_type, 0.0f) )
{
delete m_building;
@@ -98,6 +101,7 @@ bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle)
if ( m_type == OBJECT_NUCLEAR ) m_buildingHeight = 40.0f;
if ( m_type == OBJECT_PARA ) m_buildingHeight = 68.0f;
if ( m_type == OBJECT_INFO ) m_buildingHeight = 19.0f;
+ if ( m_type == OBJECT_DESTROYER) m_buildingHeight = 35.0f;
m_buildingHeight *= 0.25f;
m_buildingPos = m_building->GetPosition(0);
@@ -110,7 +114,6 @@ bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle)
void CTaskBuild::CreateLight()
{
- Gfx::Light light;
Gfx::Color color;
Math::Vector center, pos, dir;
Math::Point c, p;
@@ -137,18 +140,12 @@ void CTaskBuild::CreateLight()
pos.y = center.y+40.0f;
dir = center-pos;
- memset(&light, 0, sizeof(light));
+ Gfx::Light light;
light.type = Gfx::LIGHT_SPOT;
- light.diffuse.r = 0.0f;
- light.diffuse.g = 0.0f;
- light.diffuse.b = 0.0f; // white (invisible)
- light.position.x = pos.x;
- light.position.y = pos.y;
- light.position.z = pos.z;
- light.direction.x = dir.x;
- light.direction.y = dir.y;
- light.direction.z = dir.z;
- //TODO Is this value correct
+ light.ambient = Gfx::Color(0.0f, 0.0f, 0.0f);
+ light.diffuse = Gfx::Color(0.0f, 0.0f, 0.0f); // invisible
+ light.position = pos;
+ light.direction = dir;
light.spotIntensity = 128;
light.attenuation0 = 1.0f;
light.attenuation1 = 0.0f;
@@ -578,6 +575,7 @@ Error CTaskBuild::FlatFloor()
if ( m_type == OBJECT_NUCLEAR ) radius = 20.0f;
if ( m_type == OBJECT_PARA ) radius = 20.0f;
if ( m_type == OBJECT_INFO ) radius = 5.0f;
+ if ( m_type == OBJECT_DESTROYER) radius = 20.0f;
if ( radius == 0.0f ) return ERR_GENERIC;
center = m_metal->GetPosition(0);
@@ -594,11 +592,13 @@ Error CTaskBuild::FlatFloor()
return bLittleFlat?ERR_BUILD_FLATLIT:ERR_BUILD_FLAT;
}
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
max = 100000.0f;
bBase = false;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( !pObj->GetActif() ) continue; // inactive?
@@ -646,7 +646,7 @@ Error CTaskBuild::FlatFloor()
max = 100000.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( !pObj->GetActif() ) continue; // inactive?
@@ -666,6 +666,7 @@ Error CTaskBuild::FlatFloor()
type == OBJECT_ENERGY ||
type == OBJECT_LABO ||
type == OBJECT_NUCLEAR ||
+ type == OBJECT_DESTROYER||
type == OBJECT_START ||
type == OBJECT_END ||
type == OBJECT_INFO ||
@@ -712,12 +713,14 @@ CObject* CTaskBuild::SearchMetalObject(float &angle, float dMin, float dMax,
iAngle = m_object->GetAngleY(0);
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 1000000.0f;
pBest = 0;
bMetal = false;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( !pObj->GetActif() ) continue; // objet inactive?
@@ -776,9 +779,11 @@ void CTaskBuild::DeleteMark(Math::Vector pos, float radius)
float distance;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
diff --git a/src/object/task/taskbuild.h b/src/object/task/taskbuild.h
index 25300b3..b3193a0 100644
--- a/src/object/task/taskbuild.h
+++ b/src/object/task/taskbuild.h
@@ -45,7 +45,7 @@ enum TaskBuildPhase
class CTaskBuild : public CTask
{
public:
- CTaskBuild(CInstanceManager* iMan, CObject* object);
+ CTaskBuild(CObject* object);
~CTaskBuild();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskfire.cpp b/src/object/task/taskfire.cpp
index 99a88b8..beb4944 100644
--- a/src/object/task/taskfire.cpp
+++ b/src/object/task/taskfire.cpp
@@ -14,12 +14,13 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskfire.cpp
#include "object/task/taskfire.h"
#include "graphics/engine/particle.h"
+
#include "math/geometry.h"
+
#include "physics/physics.h"
@@ -31,8 +32,7 @@ const float ENERGY_FIREi = (0.10f/2.5f); // energy consumed/organic
// Object's constructor.
-CTaskFire::CTaskFire(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskFire::CTaskFire(CObject* object) : CTask(object)
{
m_soundChannel = -1;
}
diff --git a/src/object/task/taskfire.h b/src/object/task/taskfire.h
index 5cf4f0c..81058df 100644
--- a/src/object/task/taskfire.h
+++ b/src/object/task/taskfire.h
@@ -26,7 +26,7 @@
class CTaskFire : public CTask
{
public:
- CTaskFire(CInstanceManager* iMan, CObject* object);
+ CTaskFire(CObject* object);
~CTaskFire();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskfireant.cpp b/src/object/task/taskfireant.cpp
index 2044685..c0acf64 100644
--- a/src/object/task/taskfireant.cpp
+++ b/src/object/task/taskfireant.cpp
@@ -14,13 +14,15 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskfireant.cpp
#include "object/task/taskfireant.h"
#include "graphics/engine/particle.h"
+
#include "math/geometry.h"
+
#include "object/motion/motionant.h"
+
#include "physics/physics.h"
@@ -28,8 +30,7 @@
// Object's constructor.
-CTaskFireAnt::CTaskFireAnt(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskFireAnt::CTaskFireAnt(CObject* object) : CTask(object)
{
m_phase = TFA_NULL;
}
diff --git a/src/object/task/taskfireant.h b/src/object/task/taskfireant.h
index 4fa77b8..2a0ead8 100644
--- a/src/object/task/taskfireant.h
+++ b/src/object/task/taskfireant.h
@@ -38,7 +38,7 @@ enum TaskFireAnt
class CTaskFireAnt : public CTask
{
public:
- CTaskFireAnt(CInstanceManager* iMan, CObject* object);
+ CTaskFireAnt(CObject* object);
~CTaskFireAnt();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskflag.cpp b/src/object/task/taskflag.cpp
index c88b5c0..dd5e11d 100644
--- a/src/object/task/taskflag.cpp
+++ b/src/object/task/taskflag.cpp
@@ -14,26 +14,28 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskflag.cpp
#include "object/task/taskflag.h"
-#include "math/geometry.h"
#include "common/iman.h"
+
+#include "math/geometry.h"
+
#include "graphics/engine/particle.h"
#include "graphics/engine/pyro.h"
#include "graphics/engine/water.h"
-#include "physics/physics.h"
+
#include "object/motion/motionhuman.h"
+#include "physics/physics.h"
+
// Object's constructor.
-CTaskFlag::CTaskFlag(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskFlag::CTaskFlag(CObject* object) : CTask(object)
{
}
@@ -137,11 +139,13 @@ CObject* CTaskFlag::SearchNearest(Math::Vector pos, ObjectType type)
float min, dist;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 100000.0f;
pBest = 0;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( !pObj->GetEnable() ) continue;
@@ -180,10 +184,12 @@ int CTaskFlag::CountObject(ObjectType type)
Math::Vector oPos;
int i, count;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
count = 0;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( !pObj->GetEnable() ) continue;
@@ -247,7 +253,7 @@ Error CTaskFlag::CreateFlag(int rank)
return ERR_FLAG_CREATE;
}
- pNew = new CObject(m_iMan);
+ pNew = new CObject();
if ( !pNew->CreateFlag(pos, 0.0f, table[i]) )
{
delete pNew;
@@ -256,7 +262,7 @@ Error CTaskFlag::CreateFlag(int rank)
//pNew->SetZoom(0, 0.0f);
m_sound->Play(SOUND_WAYPOINT, pos);
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_FLCREATE, pNew);
return ERR_OK;
@@ -295,7 +301,7 @@ Error CTaskFlag::DeleteFlag()
}
m_sound->Play(SOUND_WAYPOINT, iPos);
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_FLDELETE, pObj);
return ERR_OK;
diff --git a/src/object/task/taskflag.h b/src/object/task/taskflag.h
index 5b0a058..7e3e4ef 100644
--- a/src/object/task/taskflag.h
+++ b/src/object/task/taskflag.h
@@ -20,6 +20,7 @@
#include "object/task/task.h"
#include "object/object.h"
+
#include "math/vector.h"
@@ -35,7 +36,7 @@ enum TaskFlagOrder
class CTaskFlag : public CTask
{
public:
- CTaskFlag(CInstanceManager* iMan, CObject* object);
+ CTaskFlag(CObject* object);
~CTaskFlag();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp
index cab57f1..c4a2939 100644
--- a/src/object/task/taskgoto.cpp
+++ b/src/object/task/taskgoto.cpp
@@ -14,8 +14,6 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskgoto.cpp
-
#include <stdio.h>
@@ -23,9 +21,12 @@
#include "common/event.h"
#include "common/iman.h"
+
#include "graphics/engine/terrain.h"
#include "graphics/engine/water.h"
+
#include "math/geometry.h"
+
#include "physics/physics.h"
#include <string.h>
@@ -40,8 +41,7 @@ const float BM_DIM_STEP = 5.0f;
// Object's constructor.
-CTaskGoto::CTaskGoto(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskGoto::CTaskGoto(CObject* object) : CTask(object)
{
m_bmArray = 0;
}
@@ -494,12 +494,14 @@ CObject* CTaskGoto::WormSearch(Math::Vector &impact)
float distance, min, radius;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
iPos = m_object->GetPosition(0);
min = 1000000.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
oType = pObj->GetType();
@@ -1026,11 +1028,13 @@ CObject* CTaskGoto::SearchTarget(Math::Vector pos, float margin)
float dist, min;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
pBest = 0;
min = 1000000.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( !pObj->GetActif() ) continue;
@@ -1170,9 +1174,11 @@ bool CTaskGoto::AdjustBuilding(Math::Vector &pos, float margin, float &distance)
float dist, suppl;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( !pObj->GetActif() ) continue;
@@ -1339,11 +1345,13 @@ bool CTaskGoto::LeakSearch(Math::Vector &pos, float &delay)
m_object->GetCrashSphere(0, iPos, iRadius);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 100000.0f;
bRadius = 0.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue;
@@ -1401,7 +1409,7 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir)
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue;
@@ -1522,9 +1530,11 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir)
bAlien = true;
}
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue;
@@ -1614,9 +1624,11 @@ void CTaskGoto::ComputeFlyingRepulse(float &dir)
fac = 1.5f;
dir = 0.0f;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue;
@@ -1928,9 +1940,11 @@ void CTaskGoto::BitmapObject()
m_object->GetCrashSphere(0, iPos, iRadius);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
diff --git a/src/object/task/taskgoto.h b/src/object/task/taskgoto.h
index 1382d4c..d2b2d7e 100644
--- a/src/object/task/taskgoto.h
+++ b/src/object/task/taskgoto.h
@@ -20,6 +20,7 @@
#include "object/task/task.h"
+
#include "math/vector.h"
@@ -72,7 +73,7 @@ enum TaskGotoPhase
class CTaskGoto : public CTask
{
public:
- CTaskGoto(CInstanceManager* iMan, CObject* object);
+ CTaskGoto(CObject* object);
~CTaskGoto();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskgungoal.cpp b/src/object/task/taskgungoal.cpp
index aed3355..3373610 100644
--- a/src/object/task/taskgungoal.cpp
+++ b/src/object/task/taskgungoal.cpp
@@ -14,7 +14,6 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskgungoal.cpp
#include "object/task/taskgungoal.h"
@@ -25,8 +24,7 @@
// Object's constructor.
-CTaskGunGoal::CTaskGunGoal(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskGunGoal::CTaskGunGoal(CObject* object) : CTask(object)
{
}
diff --git a/src/object/task/taskgungoal.h b/src/object/task/taskgungoal.h
index 0c063d1..c6f010b 100644
--- a/src/object/task/taskgungoal.h
+++ b/src/object/task/taskgungoal.h
@@ -26,7 +26,7 @@
class CTaskGunGoal : public CTask
{
public:
- CTaskGunGoal(CInstanceManager* iMan, CObject* object);
+ CTaskGunGoal(CObject* object);
~CTaskGunGoal();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskinfo.cpp b/src/object/task/taskinfo.cpp
index 4e64584..32ac342 100644
--- a/src/object/task/taskinfo.cpp
+++ b/src/object/task/taskinfo.cpp
@@ -14,12 +14,13 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskinfo.cpp
#include "object/task/taskinfo.h"
#include "common/iman.h"
+
#include "graphics/engine/particle.h"
+
#include "object/auto/autoinfo.h"
#include <string.h>
@@ -28,8 +29,7 @@
// Object's constructor.
-CTaskInfo::CTaskInfo(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskInfo::CTaskInfo(CObject* object) : CTask(object)
{
}
@@ -189,11 +189,13 @@ CObject* CTaskInfo::SearchInfo(float power)
iPos = m_object->GetPosition(0);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 100000.0f;
pBest = 0;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
diff --git a/src/object/task/taskinfo.h b/src/object/task/taskinfo.h
index 036b57d..1ce3dca 100644
--- a/src/object/task/taskinfo.h
+++ b/src/object/task/taskinfo.h
@@ -26,7 +26,7 @@
class CTaskInfo : public CTask
{
public:
- CTaskInfo(CInstanceManager* iMan, CObject* object);
+ CTaskInfo(CObject* object);
~CTaskInfo();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskmanager.cpp b/src/object/task/taskmanager.cpp
index 26e389d..a2ce8b8 100644
--- a/src/object/task/taskmanager.cpp
+++ b/src/object/task/taskmanager.cpp
@@ -14,14 +14,13 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskmanager.cpp
-
#include <stdio.h>
#include "object/task/taskmanager.h"
#include "common/iman.h"
+
#include "object/task/taskwait.h"
#include "object/task/taskadvance.h"
#include "object/task/taskturn.h"
@@ -43,12 +42,9 @@
// Object's constructor.
-CTaskManager::CTaskManager(CInstanceManager* iMan, CObject* object)
+CTaskManager::CTaskManager(CObject* object)
{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_TASKMANAGER, this, 100);
-
- m_task = 0;
+ m_task = nullptr;
m_object = object;
m_bPilot = false;
}
@@ -66,7 +62,7 @@ CTaskManager::~CTaskManager()
Error CTaskManager::StartTaskWait(float time)
{
- m_task = new CTaskWait(m_iMan, m_object);
+ m_task = new CTaskWait(m_object);
return (static_cast<CTaskWait*>(m_task))->Start(time);
}
@@ -74,7 +70,7 @@ Error CTaskManager::StartTaskWait(float time)
Error CTaskManager::StartTaskAdvance(float length)
{
- m_task = new CTaskAdvance(m_iMan, m_object);
+ m_task = new CTaskAdvance(m_object);
return (static_cast<CTaskAdvance*>(m_task))->Start(length);
}
@@ -82,7 +78,7 @@ Error CTaskManager::StartTaskAdvance(float length)
Error CTaskManager::StartTaskTurn(float angle)
{
- m_task = new CTaskTurn(m_iMan, m_object);
+ m_task = new CTaskTurn(m_object);
return (static_cast<CTaskTurn*>(m_task))->Start(angle);
}
@@ -90,7 +86,7 @@ Error CTaskManager::StartTaskTurn(float angle)
Error CTaskManager::StartTaskGoto(Math::Vector pos, float altitude, TaskGotoGoal goalMode, TaskGotoCrash crashMode)
{
- m_task = new CTaskGoto(m_iMan, m_object);
+ m_task = new CTaskGoto(m_object);
return (static_cast<CTaskGoto*>(m_task))->Start(pos, altitude, goalMode, crashMode);
}
@@ -98,7 +94,7 @@ Error CTaskManager::StartTaskGoto(Math::Vector pos, float altitude, TaskGotoGoal
Error CTaskManager::StartTaskTake()
{
- m_task = new CTaskTake(m_iMan, m_object);
+ m_task = new CTaskTake(m_object);
return (static_cast<CTaskTake*>(m_task))->Start();
}
@@ -106,7 +102,7 @@ Error CTaskManager::StartTaskTake()
Error CTaskManager::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
{
- m_task = new CTaskManip(m_iMan, m_object);
+ m_task = new CTaskManip(m_object);
return (static_cast<CTaskManip*>(m_task))->Start(order, arm);
}
@@ -114,7 +110,7 @@ Error CTaskManager::StartTaskManip(TaskManipOrder order, TaskManipArm arm)
Error CTaskManager::StartTaskFlag(TaskFlagOrder order, int rank)
{
- m_task = new CTaskFlag(m_iMan, m_object);
+ m_task = new CTaskFlag(m_object);
return (static_cast<CTaskFlag*>(m_task))->Start(order, rank);
}
@@ -122,7 +118,7 @@ Error CTaskManager::StartTaskFlag(TaskFlagOrder order, int rank)
Error CTaskManager::StartTaskBuild(ObjectType type)
{
- m_task = new CTaskBuild(m_iMan, m_object);
+ m_task = new CTaskBuild(m_object);
return (static_cast<CTaskBuild*>(m_task))->Start(type);
}
@@ -130,7 +126,7 @@ Error CTaskManager::StartTaskBuild(ObjectType type)
Error CTaskManager::StartTaskSearch()
{
- m_task = new CTaskSearch(m_iMan, m_object);
+ m_task = new CTaskSearch(m_object);
return (static_cast<CTaskSearch*>(m_task))->Start();
}
@@ -138,7 +134,7 @@ Error CTaskManager::StartTaskSearch()
Error CTaskManager::StartTaskInfo(const char *name, float value, float power, bool bSend)
{
- m_task = new CTaskInfo(m_iMan, m_object);
+ m_task = new CTaskInfo(m_object);
return (static_cast<CTaskInfo*>(m_task))->Start(name, value, power, bSend);
}
@@ -146,7 +142,7 @@ Error CTaskManager::StartTaskInfo(const char *name, float value, float power, bo
Error CTaskManager::StartTaskTerraform()
{
- m_task = new CTaskTerraform(m_iMan, m_object);
+ m_task = new CTaskTerraform(m_object);
return (static_cast<CTaskTerraform*>(m_task))->Start();
}
@@ -154,7 +150,7 @@ Error CTaskManager::StartTaskTerraform()
Error CTaskManager::StartTaskPen(bool bDown, int color)
{
- m_task = new CTaskPen(m_iMan, m_object);
+ m_task = new CTaskPen(m_object);
return (static_cast<CTaskPen*>(m_task))->Start(bDown, color);
}
@@ -162,7 +158,7 @@ Error CTaskManager::StartTaskPen(bool bDown, int color)
Error CTaskManager::StartTaskRecover()
{
- m_task = new CTaskRecover(m_iMan, m_object);
+ m_task = new CTaskRecover(m_object);
return (static_cast<CTaskRecover*>(m_task))->Start();
}
@@ -172,7 +168,7 @@ Error CTaskManager::StartTaskShield(TaskShieldMode mode, float delay)
{
if ( mode == TSM_UP )
{
- m_task = new CTaskShield(m_iMan, m_object);
+ m_task = new CTaskShield(m_object);
return (static_cast<CTaskShield*>(m_task))->Start(mode, delay);
}
if ( mode == TSM_DOWN && m_task != 0 )
@@ -191,7 +187,7 @@ Error CTaskManager::StartTaskShield(TaskShieldMode mode, float delay)
Error CTaskManager::StartTaskFire(float delay)
{
m_bPilot = true;
- m_task = new CTaskFire(m_iMan, m_object);
+ m_task = new CTaskFire(m_object);
return (static_cast<CTaskFire*>(m_task))->Start(delay);
}
@@ -199,7 +195,7 @@ Error CTaskManager::StartTaskFire(float delay)
Error CTaskManager::StartTaskFireAnt(Math::Vector impact)
{
- m_task = new CTaskFireAnt(m_iMan, m_object);
+ m_task = new CTaskFireAnt(m_object);
return (static_cast<CTaskFireAnt*>(m_task))->Start(impact);
}
@@ -207,7 +203,7 @@ Error CTaskManager::StartTaskFireAnt(Math::Vector impact)
Error CTaskManager::StartTaskGunGoal(float dirV, float dirH)
{
- m_task = new CTaskGunGoal(m_iMan, m_object);
+ m_task = new CTaskGunGoal(m_object);
return (static_cast<CTaskGunGoal*>(m_task))->Start(dirV, dirH);
}
@@ -215,7 +211,7 @@ Error CTaskManager::StartTaskGunGoal(float dirV, float dirH)
Error CTaskManager::StartTaskSpiderExplo()
{
- m_task = new CTaskSpiderExplo(m_iMan, m_object);
+ m_task = new CTaskSpiderExplo(m_object);
return (static_cast<CTaskSpiderExplo*>(m_task))->Start();
}
@@ -223,7 +219,7 @@ Error CTaskManager::StartTaskSpiderExplo()
Error CTaskManager::StartTaskReset(Math::Vector goal, Math::Vector angle)
{
- m_task = new CTaskReset(m_iMan, m_object);
+ m_task = new CTaskReset(m_object);
return (static_cast<CTaskReset*>(m_task))->Start(goal, angle);
}
diff --git a/src/object/task/taskmanager.h b/src/object/task/taskmanager.h
index 6ce023a..80a78fd 100644
--- a/src/object/task/taskmanager.h
+++ b/src/object/task/taskmanager.h
@@ -19,8 +19,8 @@
#pragma once
-#include "object/task/task.h"
#include "object/object.h"
+#include "object/task/task.h"
#include "object/task/taskmanip.h"
#include "object/task/taskgoto.h"
#include "object/task/taskshield.h"
@@ -31,7 +31,7 @@
class CTaskManager
{
public:
- CTaskManager(CInstanceManager* iMan, CObject* object);
+ CTaskManager(CObject* object);
~CTaskManager();
Error StartTaskWait(float time);
@@ -61,9 +61,6 @@ public:
bool Abort();
protected:
-
-protected:
- CInstanceManager* m_iMan;
CTask* m_task;
CObject* m_object;
bool m_bPilot;
diff --git a/src/object/task/taskmanip.cpp b/src/object/task/taskmanip.cpp
index b0b146c..0608b6e 100644
--- a/src/object/task/taskmanip.cpp
+++ b/src/object/task/taskmanip.cpp
@@ -14,15 +14,18 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskmanip.cpp
#include "object/task/taskmanip.h"
#include "common/iman.h"
+
#include "graphics/engine/terrain.h"
#include "graphics/engine/pyro.h"
+
#include "math/geometry.h"
+
#include "object/robotmain.h"
+
#include "physics/physics.h"
@@ -40,8 +43,7 @@ const float MARGIN_BEE = 5.0f; //OK 1.9
// Object's constructor.
-CTaskManip::CTaskManip(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskManip::CTaskManip(CObject* object) : CTask(object)
{
m_arm = TMA_NEUTRAL;
m_hand = TMH_OPEN;
@@ -338,7 +340,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm)
pos.y += 2.0f;
m_object->SetPosition(0, pos); // against the top of jump
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_FALL, other); // the ball falls
}
@@ -728,11 +730,13 @@ CObject* CTaskManip::SearchTakeUnderObject(Math::Vector &pos, float dLimit)
iPos = m_object->GetPosition(0);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 1000000.0f;
pBest = 0;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
@@ -798,12 +802,14 @@ CObject* CTaskManip::SearchTakeFrontObject(bool bAdvance, Math::Vector &pos,
dLimit = MARGIN_FRONT;
}
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 1000000.0f;
pBest = 0;
bAngle = 0.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
@@ -889,12 +895,14 @@ CObject* CTaskManip::SearchTakeBackObject(bool bAdvance, Math::Vector &pos,
dLimit = MARGIN_BACK;
}
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 1000000.0f;
pBest = 0;
bAngle = 0.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
@@ -989,9 +997,11 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos,
dLimit = MARGIN_FRIEND;
}
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue; // yourself?
@@ -1345,9 +1355,11 @@ bool CTaskManip::IsFreeDeposeObject(Math::Vector pos)
mat = m_object->GetWorldMatrix(0);
iPos = Transform(*mat, pos);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue;
diff --git a/src/object/task/taskmanip.h b/src/object/task/taskmanip.h
index 79d9ad5..e80602c 100644
--- a/src/object/task/taskmanip.h
+++ b/src/object/task/taskmanip.h
@@ -54,7 +54,7 @@ enum TaskManipHand
class CTaskManip : public CTask
{
public:
- CTaskManip(CInstanceManager* iMan, CObject* object);
+ CTaskManip(CObject* object);
~CTaskManip();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskpen.cpp b/src/object/task/taskpen.cpp
index 6e04233..03c2322 100644
--- a/src/object/task/taskpen.cpp
+++ b/src/object/task/taskpen.cpp
@@ -14,20 +14,20 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskpen.cpp
#include "object/task/taskpen.h"
#include "graphics/engine/particle.h"
-#include "math/geometry.h"
+
#include "object/object.h"
+#include "math/geometry.h"
+
// Object's constructor.
-CTaskPen::CTaskPen(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskPen::CTaskPen(CObject* object) : CTask(object)
{
}
diff --git a/src/object/task/taskpen.h b/src/object/task/taskpen.h
index 0974322..adaba6c 100644
--- a/src/object/task/taskpen.h
+++ b/src/object/task/taskpen.h
@@ -36,7 +36,7 @@ enum TaskPenPhase
class CTaskPen : public CTask
{
public:
- CTaskPen(CInstanceManager* iMan, CObject* object);
+ CTaskPen(CObject* object);
~CTaskPen();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskrecover.cpp b/src/object/task/taskrecover.cpp
index 4c8ead8..b86e9a5 100644
--- a/src/object/task/taskrecover.cpp
+++ b/src/object/task/taskrecover.cpp
@@ -14,17 +14,19 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskrecover.cpp
-
#include <stdio.h>
#include "object/task/taskrecover.h"
-#include "math/geometry.h"
#include "common/iman.h"
+
#include "graphics/engine/particle.h"
+
+#include "math/geometry.h"
+
#include "physics/physics.h"
+
#include "ui/displaytext.h"
@@ -35,8 +37,7 @@ const float RECOVER_DIST = 11.8f;
// Object's constructor.
-CTaskRecover::CTaskRecover(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskRecover::CTaskRecover(CObject* object) : CTask(object)
{
m_ruin = 0;
m_soundChannel = -1;
@@ -297,7 +298,7 @@ Error CTaskRecover::IsEnded()
if ( m_phase == TRP_DOWN )
{
- m_metal = new CObject(m_iMan);
+ m_metal = new CObject();
if ( !m_metal->CreateResource(m_recoverPos, 0.0f, OBJECT_METAL) )
{
delete m_metal;
@@ -385,11 +386,13 @@ CObject* CTaskRecover::SearchRuin()
float dist, min;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
pBest = 0;
min = 100000.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
diff --git a/src/object/task/taskrecover.h b/src/object/task/taskrecover.h
index 151ab6b..817ed5f 100644
--- a/src/object/task/taskrecover.h
+++ b/src/object/task/taskrecover.h
@@ -20,6 +20,7 @@
#include "object/task/task.h"
+
#include "math/vector.h"
@@ -38,7 +39,7 @@ enum TaskRecoverPhase
class CTaskRecover : public CTask
{
public:
- CTaskRecover(CInstanceManager* iMan, CObject* object);
+ CTaskRecover(CObject* object);
~CTaskRecover();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskreset.cpp b/src/object/task/taskreset.cpp
index 7e097bf..98d9730 100644
--- a/src/object/task/taskreset.cpp
+++ b/src/object/task/taskreset.cpp
@@ -14,11 +14,11 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskreset.cpp
#include "object/task/taskreset.h"
#include "common/iman.h"
+
#include "object/brain.h"
#include "object/robotmain.h"
@@ -32,8 +32,7 @@ const float RESET_DELAY_MOVE = 0.7f;
// Object's constructor.
-CTaskReset::CTaskReset(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskReset::CTaskReset(CObject* object) : CTask(object)
{
}
@@ -273,9 +272,11 @@ bool CTaskReset::SearchVehicle()
float oRadius, dist;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue;
diff --git a/src/object/task/taskreset.h b/src/object/task/taskreset.h
index e3dacf7..5f1bb34 100644
--- a/src/object/task/taskreset.h
+++ b/src/object/task/taskreset.h
@@ -36,7 +36,7 @@ enum TaskResetPhase
class CTaskReset : public CTask
{
public:
- CTaskReset(CInstanceManager* iMan, CObject* object);
+ CTaskReset(CObject* object);
~CTaskReset();
bool EventProcess(const Event &event);
diff --git a/src/object/task/tasksearch.cpp b/src/object/task/tasksearch.cpp
index 578b41e..b219185 100644
--- a/src/object/task/tasksearch.cpp
+++ b/src/object/task/tasksearch.cpp
@@ -14,15 +14,18 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// tasksearch.cpp
#include "object/task/tasksearch.h"
-#include "math/geometry.h"
#include "common/iman.h"
+
#include "graphics/engine/particle.h"
#include "graphics/engine/terrain.h"
+
+#include "math/geometry.h"
+
#include "physics/physics.h"
+
#include "ui/displaytext.h"
@@ -30,8 +33,7 @@
// Object's constructor.
-CTaskSearch::CTaskSearch(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskSearch::CTaskSearch(CObject* object) : CTask(object)
{
m_hand = TSH_UP;
}
@@ -280,7 +282,7 @@ bool CTaskSearch::CreateMark()
//? DeleteMark(type);
- fret = new CObject(m_iMan);
+ fret = new CObject();
if ( !fret->CreateResource(pos, 0.0f, type) )
{
delete fret;
@@ -301,9 +303,11 @@ void CTaskSearch::DeleteMark(ObjectType type)
Math::Vector oPos;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( type == pObj->GetType() )
diff --git a/src/object/task/tasksearch.h b/src/object/task/tasksearch.h
index bffec16..582d45a 100644
--- a/src/object/task/tasksearch.h
+++ b/src/object/task/tasksearch.h
@@ -42,7 +42,7 @@ enum TaskSearchPhase
class CTaskSearch : public CTask
{
public:
- CTaskSearch(CInstanceManager* iMan, CObject* object);
+ CTaskSearch(CObject* object);
~CTaskSearch();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskshield.cpp b/src/object/task/taskshield.cpp
index 93afd62..929dd5c 100644
--- a/src/object/task/taskshield.cpp
+++ b/src/object/task/taskshield.cpp
@@ -14,16 +14,19 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskshield.cpp
#include "object/task/taskshield.h"
#include "common/iman.h"
+
#include "graphics/core/light.h"
#include "graphics/engine/particle.h"
#include "graphics/engine/lightman.h"
+
#include "math/geometry.h"
+
#include "object/brain.h"
+
#include "physics/physics.h"
#include <string.h>
@@ -34,8 +37,7 @@ const float ENERGY_TIME = 20.0f; // maximum duration if full battery
// Object's constructor.
-CTaskShield::CTaskShield(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskShield::CTaskShield(CObject* object) : CTask(object)
{
m_rankSphere = -1;
m_soundChannel = -1;
@@ -486,15 +488,10 @@ bool CTaskShield::CreateLight(Math::Vector pos)
memset(&light, 0, sizeof(light));
light.type = Gfx::LIGHT_SPOT;
- light.diffuse.r = 0.0f;
- light.diffuse.g = 1.0f;
- light.diffuse.b = 2.0f;
- light.position.x = pos.x;
- light.position.y = pos.y;
- light.position.z = pos.z;
- light.direction.x = 0.0f;
- light.direction.y = -1.0f; // against the bottom
- light.direction.z = 0.0f;
+ light.ambient = Gfx::Color(0.0f, 0.0f, 0.0f);
+ light.diffuse = Gfx::Color(0.0f, 1.0f, 2.0f);
+ light.position = pos;
+ light.direction = Math::Vector(0.0f, -1.0f, 0.0f); // against the bottom
light.spotIntensity = 128;
light.attenuation0 = 1.0f;
light.attenuation1 = 0.0f;
@@ -521,9 +518,11 @@ void CTaskShield::IncreaseShield()
float dist, shield;
int i;
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
diff --git a/src/object/task/taskshield.h b/src/object/task/taskshield.h
index 4a6811c..36d3819 100644
--- a/src/object/task/taskshield.h
+++ b/src/object/task/taskshield.h
@@ -20,6 +20,7 @@
#include "object/task/task.h"
+
#include "math/vector.h"
@@ -49,7 +50,7 @@ enum TaskShieldMode
class CTaskShield : public CTask
{
public:
- CTaskShield(CInstanceManager* iMan, CObject* object);
+ CTaskShield(CObject* object);
~CTaskShield();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskspiderexplo.cpp b/src/object/task/taskspiderexplo.cpp
index 8110870..f629714 100644
--- a/src/object/task/taskspiderexplo.cpp
+++ b/src/object/task/taskspiderexplo.cpp
@@ -14,12 +14,13 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskspiderexplo.cpp
#include "object/task/taskspiderexplo.h"
#include "graphics/engine/pyro.h"
+
#include "object/motion/motionspider.h"
+
#include "physics/physics.h"
@@ -27,8 +28,7 @@
// Object's constructor.
-CTaskSpiderExplo::CTaskSpiderExplo(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskSpiderExplo::CTaskSpiderExplo(CObject* object) : CTask(object)
{
m_time = 0.0f;
m_bError = false;
@@ -91,7 +91,7 @@ Error CTaskSpiderExplo::IsEnded()
if ( m_time < 1.0f ) return ERR_CONTINUE;
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_SPIDER, m_object); // the spider explodes (suicide)
Abort();
diff --git a/src/object/task/taskspiderexplo.h b/src/object/task/taskspiderexplo.h
index 50f3ad2..0984020 100644
--- a/src/object/task/taskspiderexplo.h
+++ b/src/object/task/taskspiderexplo.h
@@ -26,7 +26,7 @@
class CTaskSpiderExplo : public CTask
{
public:
- CTaskSpiderExplo(CInstanceManager* iMan, CObject* object);
+ CTaskSpiderExplo(CObject* object);
~CTaskSpiderExplo();
bool EventProcess(const Event &event);
diff --git a/src/object/task/tasktake.cpp b/src/object/task/tasktake.cpp
index 2737324..0037f85 100644
--- a/src/object/task/tasktake.cpp
+++ b/src/object/task/tasktake.cpp
@@ -14,16 +14,19 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// tasktake.cpp
#include "object/task/tasktake.h"
#include "common/iman.h"
+
#include "graphics/engine/terrain.h"
#include "graphics/engine/water.h"
+
#include "math/geometry.h"
+
#include "object/motion/motionhuman.h"
#include "object/robotmain.h"
+
#include "physics/physics.h"
@@ -31,10 +34,9 @@
// Object's constructor.
-CTaskTake::CTaskTake(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskTake::CTaskTake(CObject* object) : CTask(object)
{
- m_terrain = static_cast<Gfx::CTerrain*>(m_iMan->SearchInstance(CLASS_TERRAIN));
+ m_terrain = CRobotMain::GetInstancePointer()->GetTerrain();
m_arm = TTA_NEUTRAL;
}
@@ -305,12 +307,14 @@ CObject* CTaskTake::SearchTakeObject(float &angle,
iAngle = m_object->GetAngleY(0);
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
min = 1000000.0f;
pBest = 0;
bAngle = 0.0f;
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
@@ -374,9 +378,11 @@ CObject* CTaskTake::SearchFriendObject(float &angle,
iAngle = m_object->GetAngleY(0);
iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue; // yourself?
@@ -569,9 +575,11 @@ bool CTaskTake::IsFreeDeposeObject(Math::Vector pos)
mat = m_object->GetWorldMatrix(0);
iPos = Transform(*mat, pos);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
if ( pObj == m_object ) continue;
diff --git a/src/object/task/tasktake.h b/src/object/task/tasktake.h
index c7950fe..7f3f831 100644
--- a/src/object/task/tasktake.h
+++ b/src/object/task/tasktake.h
@@ -42,7 +42,7 @@ enum TaskTakeArm
class CTaskTake : public CTask
{
public:
- CTaskTake(CInstanceManager* iMan, CObject* object);
+ CTaskTake(CObject* object);
~CTaskTake();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskterraform.cpp b/src/object/task/taskterraform.cpp
index 6afece4..1f5ef7b 100644
--- a/src/object/task/taskterraform.cpp
+++ b/src/object/task/taskterraform.cpp
@@ -14,23 +14,25 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskterraform.cpp
-
#include <stdio.h>
#include "object/task/taskterraform.h"
-#include "math/geometry.h"
#include "common/iman.h"
+
#include "graphics/engine/pyro.h"
#include "graphics/engine/particle.h"
#include "graphics/engine/terrain.h"
-#include "physics/physics.h"
+
+#include "math/geometry.h"
+
#include "object/brain.h"
#include "object/motion/motionant.h"
#include "object/motion/motionspider.h"
+#include "physics/physics.h"
+
const float ENERGY_TERRA = 0.40f; // energy consumed by blow
const float ACTION_RADIUS = 400.0f;
@@ -39,8 +41,7 @@ const float ACTION_RADIUS = 400.0f;
// Object's constructor.
-CTaskTerraform::CTaskTerraform(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskTerraform::CTaskTerraform(CObject* object) : CTask(object)
{
m_lastParticle = 0.0f;
m_soundChannel = -1;
@@ -370,9 +371,11 @@ bool CTaskTerraform::Terraform()
m_sound->Play(SOUND_THUMP, m_terraPos);
+ CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
+
for ( i=0 ; i<1000000 ; i++ )
{
- pObj = static_cast<CObject*>(m_iMan->SearchInstance(CLASS_OBJECT, i));
+ pObj = static_cast<CObject*>(iMan->SearchInstance(CLASS_OBJECT, i));
if ( pObj == 0 ) break;
type = pObj->GetType();
@@ -383,7 +386,7 @@ bool CTaskTerraform::Terraform()
dist = Math::Distance(m_terraPos, pObj->GetPosition(0));
if ( dist > 20.0f ) continue;
- pyro = new Gfx::CPyro(m_iMan);
+ pyro = new Gfx::CPyro();
pyro->Create(Gfx::PT_FRAGT, pObj);
}
else
diff --git a/src/object/task/taskterraform.h b/src/object/task/taskterraform.h
index 91526b6..8ae0d64 100644
--- a/src/object/task/taskterraform.h
+++ b/src/object/task/taskterraform.h
@@ -20,6 +20,7 @@
#include "object/task/task.h"
+
#include "math/vector.h"
@@ -37,7 +38,7 @@ enum TaskTerraPhase
class CTaskTerraform : public CTask
{
public:
- CTaskTerraform(CInstanceManager* iMan, CObject* object);
+ CTaskTerraform(CObject* object);
~CTaskTerraform();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskturn.cpp b/src/object/task/taskturn.cpp
index 8f4bbd2..7a924cb 100644
--- a/src/object/task/taskturn.cpp
+++ b/src/object/task/taskturn.cpp
@@ -14,7 +14,6 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskturn.cpp
#include "object/task/taskturn.h"
@@ -26,8 +25,7 @@
// Object's constructor.
-CTaskTurn::CTaskTurn(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskTurn::CTaskTurn(CObject* object) : CTask(object)
{
}
diff --git a/src/object/task/taskturn.h b/src/object/task/taskturn.h
index 1ee40d9..11de476 100644
--- a/src/object/task/taskturn.h
+++ b/src/object/task/taskturn.h
@@ -26,7 +26,7 @@
class CTaskTurn : public CTask
{
public:
- CTaskTurn(CInstanceManager* iMan, CObject* object);
+ CTaskTurn(CObject* object);
~CTaskTurn();
bool EventProcess(const Event &event);
diff --git a/src/object/task/taskwait.cpp b/src/object/task/taskwait.cpp
index f612c24..3e201e0 100644
--- a/src/object/task/taskwait.cpp
+++ b/src/object/task/taskwait.cpp
@@ -14,7 +14,6 @@
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
-// taskwait.cpp
#include "object/task/taskwait.h"
@@ -22,8 +21,7 @@
// Object's constructor.
-CTaskWait::CTaskWait(CInstanceManager* iMan, CObject* object)
- : CTask(iMan, object)
+CTaskWait::CTaskWait(CObject* object) : CTask(object)
{
}
diff --git a/src/object/task/taskwait.h b/src/object/task/taskwait.h
index 3434c36..3225c9a 100644
--- a/src/object/task/taskwait.h
+++ b/src/object/task/taskwait.h
@@ -26,7 +26,7 @@
class CTaskWait : public CTask
{
public:
- CTaskWait(CInstanceManager* iMan, CObject* object);
+ CTaskWait(CObject* object);
~CTaskWait();
bool EventProcess(const Event &event);