diff options
Diffstat (limited to 'src/object/object.cpp')
-rw-r--r-- | src/object/object.cpp | 921 |
1 files changed, 356 insertions, 565 deletions
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 |