From 5574eccebd16ae38a2a21ed202d1f9d1ba8f67a4 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Wed, 26 Dec 2012 20:58:02 +0100 Subject: Engine optimization - rewritten model management - new class CModelManager - rewritten engine object structure in CEngine - created shared model data instead of separate objects per each model instance - minor refactoring --- src/object/motion/motionant.cpp | 123 +++---- src/object/motion/motionbee.cpp | 83 ++--- src/object/motion/motionhuman.cpp | 120 ++----- src/object/motion/motionmother.cpp | 74 ++-- src/object/motion/motionspider.cpp | 36 +- src/object/motion/motiontoto.cpp | 39 +- src/object/motion/motionvehicle.cpp | 482 ++++++++++--------------- src/object/motion/motionworm.cpp | 20 +- src/object/object.cpp | 698 +++++++++++++----------------------- src/object/robotmain.cpp | 4 +- 10 files changed, 598 insertions(+), 1081 deletions(-) (limited to 'src/object') diff --git a/src/object/motion/motionant.cpp b/src/object/motion/motionant.cpp index 07ee6b8..db8ff37 100644 --- a/src/object/motion/motionant.cpp +++ b/src/object/motion/motionant.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "graphics/engine/modelfile.h" +#include "graphics/engine/modelmanager.h" #include "graphics/engine/particle.h" #include "physics/physics.h" @@ -69,12 +69,8 @@ void CMotionAnt::DeleteObject(bool bAll) bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; - int rank; - -// if ( m_engine->GetRestCreate() < 3+18 ) return false; - - pModFile = new Gfx::CModelFile(m_iMan); + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); + int rank; m_object->SetType(type); @@ -82,10 +78,7 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant1.mod")); - pModFile->CreateEngineObject(rank); - + modelManager->AddModelReference("ant1.mod", false, rank); m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); @@ -96,29 +89,26 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type, // Creates the head. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant2.mod", false, rank); m_object->SetPosition(1, Math::Vector(2.0f, 0.0f, 0.0f)); // Creates the tail. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant3.mod", false, rank); m_object->SetPosition(2, Math::Vector(-1.0f, 0.0f, 0.0f)); // Creates a right-back thigh. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(3, Math::Vector(-0.4f, -0.1f, -0.3f)); // Creates a right-back leg. @@ -126,161 +116,135 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(4, rank); m_object->SetObjectParent(4, 3); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(4, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates a right-back foot. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(5, rank); m_object->SetObjectParent(5, 4); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates two middle-right thighs. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.1f, -0.1f, -0.4f)); // Creates two middle-right legs. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 6); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates two middle-right foots. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 7); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(8, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates the right front thigh. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(9, Math::Vector(1.4f, -0.1f, -0.6f)); // Creates the right front leg. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(10, rank); m_object->SetObjectParent(10, 9); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(10, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates the right front foot. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(11, rank); m_object->SetObjectParent(11, 10); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates a left-back thigh. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(12, rank); m_object->SetObjectParent(12, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", true, rank); m_object->SetPosition(12, Math::Vector(-0.4f, -0.1f, 0.3f)); // Creates a left-back leg. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(13, rank); m_object->SetObjectParent(13, 12); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", true, rank); m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, 1.0f)); // Creates a left-back foot. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(14, rank); m_object->SetObjectParent(14, 13); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", true, rank); m_object->SetPosition(14, Math::Vector(0.0f, 0.0f, 2.0f)); // Creates two middle-left thighs. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(15, rank); m_object->SetObjectParent(15, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", true, rank); m_object->SetPosition(15, Math::Vector(0.1f, -0.1f, 0.4f)); // Creates two middle-left legs. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(16, rank); m_object->SetObjectParent(16, 15); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", true, rank); m_object->SetPosition(16, Math::Vector(0.0f, 0.0f, 1.0f)); // Creates two middle-left foot. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(17, rank); m_object->SetObjectParent(17, 16); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", true, rank); m_object->SetPosition(17, Math::Vector(0.0f, 0.0f, 2.0f)); // Creates the left front thigh. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(18, rank); m_object->SetObjectParent(18, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", true, rank); m_object->SetPosition(18, Math::Vector(1.4f, -0.1f, 0.6f)); // Creates the left front leg. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(19, rank); m_object->SetObjectParent(19, 18); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", true, rank); m_object->SetPosition(19, Math::Vector(0.0f, 0.0f, 1.0f)); // Creates the left front foot. rank = m_engine->CreateObject(); - m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT); + m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(20, rank); m_object->SetObjectParent(20, 19); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", true, rank); m_object->SetPosition(20, Math::Vector(0.0f, 0.0f, 2.0f)); m_object->CreateShadowCircle(4.0f, 0.5f); @@ -293,7 +257,6 @@ bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/motion/motionbee.cpp b/src/object/motion/motionbee.cpp index a3421b8..111339d 100644 --- a/src/object/motion/motionbee.cpp +++ b/src/object/motion/motionbee.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "graphics/engine/modelfile.h" +#include "graphics/engine/modelmanager.h" #include "physics/physics.h" @@ -67,12 +67,8 @@ void CMotionBee::DeleteObject(bool bAll) bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; - int rank; - -// if ( m_engine->GetRestCreate() < 3+18+2 ) return false; - - pModFile = new Gfx::CModelFile(m_iMan); + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); + int rank; m_object->SetType(type); @@ -80,10 +76,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee1.mod")); - pModFile->CreateEngineObject(rank); - + modelManager->AddModelReference("bee1.mod", false, rank); m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); @@ -97,8 +90,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("bee2.mod", false, rank); m_object->SetPosition(1, Math::Vector(1.6f, 0.3f, 0.0f)); // Creates the tail. @@ -106,8 +98,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("bee3.mod", false, rank); m_object->SetPosition(2, Math::Vector(-0.8f, 0.0f, 0.0f)); // Creates a right-back thigh. @@ -115,8 +106,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(3, Math::Vector(-0.3f, -0.1f, -0.2f)); // Creates a right-back leg. @@ -124,8 +114,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(4, rank); m_object->SetObjectParent(4, 3); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(4, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates a right-back foot. @@ -133,8 +122,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(5, rank); m_object->SetObjectParent(5, 4); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates two middle-right thighs. @@ -142,8 +130,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.3f, -0.1f, -0.4f)); // Creates two middle-right legs. @@ -151,8 +138,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 6); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates two middle-right feet. @@ -160,8 +146,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 7); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(8, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates the right front thigh. @@ -169,8 +154,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(9, Math::Vector(1.0f, -0.1f, -0.7f)); // Creates the right front leg. @@ -178,8 +162,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(10, rank); m_object->SetObjectParent(10, 9); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(10, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates the right front foot. @@ -187,8 +170,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(11, rank); m_object->SetObjectParent(11, 10); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates a left-back thigh. @@ -196,8 +178,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(12, rank); m_object->SetObjectParent(12, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(12, Math::Vector(-0.3f, -0.1f, 0.2f)); m_object->SetAngleY(12, Math::PI); @@ -206,8 +187,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(13, rank); m_object->SetObjectParent(13, 12); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates a left-back foot. @@ -215,8 +195,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(14, rank); m_object->SetObjectParent(14, 13); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(14, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates two middle-left thigh. @@ -224,8 +203,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(15, rank); m_object->SetObjectParent(15, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(15, Math::Vector(0.3f, -0.1f, 0.4f)); m_object->SetAngleY(15, Math::PI); @@ -234,8 +212,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(16, rank); m_object->SetObjectParent(16, 15); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(16, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates two middle-left feet. @@ -243,8 +220,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(17, rank); m_object->SetObjectParent(17, 16); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(17, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates front-left thigh. @@ -252,8 +228,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(18, rank); m_object->SetObjectParent(18, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant4.mod", false, rank); m_object->SetPosition(18, Math::Vector(1.0f, -0.1f, 0.7f)); m_object->SetAngleY(18, Math::PI); @@ -262,8 +237,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(19, rank); m_object->SetObjectParent(19, 18); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant5.mod", false, rank); m_object->SetPosition(19, Math::Vector(0.0f, 0.0f, -1.0f)); // Creates front-left foot. @@ -271,8 +245,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(20, rank); m_object->SetObjectParent(20, 19); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "ant6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("ant6.mod", false, rank); m_object->SetPosition(20, Math::Vector(0.0f, 0.0f, -2.0f)); // Creates the right wing. @@ -280,8 +253,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(21, rank); m_object->SetObjectParent(21, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee7.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("bee7.mod", false, rank); m_object->SetPosition(21, Math::Vector(0.8f, 0.4f, -0.5f)); // Creates the left wing. @@ -289,9 +261,7 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(22, rank); m_object->SetObjectParent(22, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "bee7.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("bee7.mod", true, rank); m_object->SetPosition(22, Math::Vector(0.8f, 0.4f, 0.5f)); m_object->CreateShadowCircle(6.0f, 0.5f); @@ -304,7 +274,6 @@ bool CMotionBee::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/motion/motionhuman.cpp b/src/object/motion/motionhuman.cpp index a9b79b5..5ff4af3 100644 --- a/src/object/motion/motionhuman.cpp +++ b/src/object/motion/motionhuman.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "graphics/engine/modelfile.h" +#include "graphics/engine/modelmanager.h" #include "graphics/engine/terrain.h" #include "graphics/engine/water.h" @@ -97,30 +97,22 @@ Error CMotionHuman::SetAction(int action, float time) bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; char filename[100]; int rank, option, face, glasses; -// if ( m_engine->GetRestCreate() < 16 ) return false; - - - pModFile = new Gfx::CModelFile(m_iMan); + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); m_object->SetType(type); option = m_object->GetOption(); - std::string baseName; - if ( m_main->GetGamerOnlyHead() ) { rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); face = m_main->GetGamerFace(); - baseName = m_app->GetDataFilePath(DIR_MODEL, "human2h%d.mod"); - sprintf(filename, baseName.c_str(), face+1); - pModFile->ReadModel(filename); - pModFile->CreateEngineObject(rank); + sprintf(filename, "human2h%d.mod", face+1); + modelManager->AddModelReference(filename, false, rank); glasses = m_main->GetGamerGlasses(); if ( glasses != 0 ) @@ -129,10 +121,8 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - baseName = m_app->GetDataFilePath(DIR_MODEL, "human2g%d.mod"); - sprintf(filename, baseName.c_str(), glasses); - pModFile->ReadModel(filename); - pModFile->CreateEngineObject(rank); + sprintf(filename, "human2g%d.mod", glasses); + modelManager->AddModelReference(filename, false, rank); } CreatePhysics(type); @@ -140,7 +130,6 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } @@ -149,19 +138,12 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - if ( option == 0 ) // head in helmet? - { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human1c.mod")); - } - if ( option == 1 ) // head without helmet? - { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human1h.mod")); - } - if ( option == 2 ) // without a backpack? - { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human1v.mod")); - } - pModFile->CreateEngineObject(rank); + if (option == 0) // head in helmet? + modelManager->AddModelReference("human1c.mod", false, rank); + else if (option == 1) // head without helmet? + modelManager->AddModelReference("human1h.mod", false, rank); + else if (option == 2) // without a backpack? + modelManager->AddModelReference("human1v.mod", false, rank); m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); @@ -178,30 +160,28 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, if ( type == OBJECT_HUMAN ) { - if ( option == 0 ) // head in helmet? + if (option == 0) // head in helmet? { face = m_main->GetGamerFace(); - baseName = m_app->GetDataFilePath(DIR_MODEL, "human2c%d.mod"); - sprintf(filename, baseName.c_str(), face+1); - pModFile->ReadModel(filename); + sprintf(filename, "human2c%d.mod", face+1); + modelManager->AddModelReference(filename, false, rank); } - if ( option == 1 || // head without helmet? - option == 2 ) // without a backpack? + else if (option == 1 || // head without helmet? + option == 2) // without a backpack? { face = m_main->GetGamerFace(); - baseName = m_app->GetDataFilePath(DIR_MODEL, "human2h%d.mod"); - sprintf(filename, baseName.c_str(), face+1); - pModFile->ReadModel(filename); + sprintf(filename, "human2h%d.mod", face+1); + modelManager->AddModelReference(filename, false, rank); } } - if ( type == OBJECT_TECH ) + else if (type == OBJECT_TECH) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human2t.mod")); + modelManager->AddModelReference("human2t.mod", false, rank); } - pModFile->CreateEngineObject(rank); + m_object->SetPosition(1, Math::Vector(0.0f, 2.7f, 0.0f)); - if ( option == 1 || // head without helmet? - option == 2 ) // without a backpack? + if (option == 1 || // head without helmet? + option == 2) // without a backpack? { m_object->SetZoom(1, Math::Vector(1.0f, 1.05f, 1.0f)); } @@ -214,10 +194,8 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(15, rank); m_object->SetObjectParent(15, 1); - baseName = m_app->GetDataFilePath(DIR_MODEL, "human2g%d.mod"); - sprintf(filename, baseName.c_str(), glasses); - pModFile->ReadModel(filename); - pModFile->CreateEngineObject(rank); + sprintf(filename, "human2g%d.mod", glasses); + modelManager->AddModelReference(filename, false, rank); } // Creates the right arm. @@ -225,8 +203,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human3.mod", false, rank); m_object->SetPosition(2, Math::Vector(0.0f, 2.3f, -1.2f)); m_object->SetAngle(2, Math::Vector(90.0f*Math::PI/180.0f, 90.0f*Math::PI/180.0f, -50.0f*Math::PI/180.0f)); @@ -235,8 +212,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 2); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human4r.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human4r.mod", false, rank); m_object->SetPosition(3, Math::Vector(1.3f, 0.0f, 0.0f)); m_object->SetAngle(3, Math::Vector(0.0f*Math::PI/180.0f, -20.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f)); @@ -245,8 +221,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(4, rank); m_object->SetObjectParent(4, 3); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human5.mod", false, rank); m_object->SetPosition(4, Math::Vector(1.2f, 0.0f, 0.0f)); // Creates the right thigh. @@ -254,8 +229,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(5, rank); m_object->SetObjectParent(5, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human6.mod", false, rank); m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -0.7f)); m_object->SetAngle(5, Math::Vector(10.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f)); @@ -264,8 +238,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 5); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human7.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human7.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.0f, -1.5f, 0.0f)); m_object->SetAngle(6, Math::Vector(0.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, -10.0f*Math::PI/180.0f)); @@ -274,8 +247,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 6); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human8.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human8.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, -1.5f, 0.0f)); m_object->SetAngle(7, Math::Vector(-10.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f)); @@ -284,9 +256,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human3.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human3.mod", true, rank); m_object->SetPosition(8, Math::Vector(0.0f, 2.3f, 1.2f)); m_object->SetAngle(8, Math::Vector(-90.0f*Math::PI/180.0f, -90.0f*Math::PI/180.0f, -50.0f*Math::PI/180.0f)); @@ -295,9 +265,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 8); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human4l.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human4l.mod", true, rank); m_object->SetPosition(9, Math::Vector(1.3f, 0.0f, 0.0f)); m_object->SetAngle(9, Math::Vector(0.0f*Math::PI/180.0f, 20.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f)); @@ -306,9 +274,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(10, rank); m_object->SetObjectParent(10, 9); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human5.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human5.mod", true, rank); m_object->SetPosition(10, Math::Vector(1.2f, 0.0f, 0.0f)); // Creates the left thigh. @@ -316,9 +282,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(11, rank); m_object->SetObjectParent(11, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human6.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human6.mod", true, rank); m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, 0.7f)); m_object->SetAngle(11, Math::Vector(-10.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f)); @@ -327,9 +291,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(12, rank); m_object->SetObjectParent(12, 11); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human7.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human7.mod", true, rank); m_object->SetPosition(12, Math::Vector(0.0f, -1.5f, 0.0f)); m_object->SetAngle(12, Math::Vector(0.0f*Math::PI/180.0f, 0.0f*Math::PI/180.0f, -10.0f*Math::PI/180.0f)); @@ -338,9 +300,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(13, rank); m_object->SetObjectParent(13, 12); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human8.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human8.mod", true, rank); m_object->SetPosition(13, Math::Vector(0.0f, -1.5f, 0.0f)); m_object->SetAngle(13, Math::Vector(10.0f*Math::PI/180.0f, -5.0f*Math::PI/180.0f, 5.0f*Math::PI/180.0f)); @@ -351,8 +311,7 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(14, rank); m_object->SetObjectParent(14, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "human9.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("human9.mod", false, rank); m_object->SetPosition(14, Math::Vector(-1.5f, 0.3f, -1.35f)); m_object->SetAngleZ(14, Math::PI); } @@ -367,7 +326,6 @@ bool CMotionHuman::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/motion/motionmother.cpp b/src/object/motion/motionmother.cpp index 8ea77a5..ce1362f 100644 --- a/src/object/motion/motionmother.cpp +++ b/src/object/motion/motionmother.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "graphics/engine/modelfile.h" +#include "graphics/engine/modelmanager.h" #include "physics/physics.h" @@ -68,12 +68,8 @@ void CMotionMother::DeleteObject(bool bAll) bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; - int rank; - -// if ( m_engine->GetRestCreate() < 2+12+6 ) return false; - - pModFile = new Gfx::CModelFile(m_iMan); + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); + int rank; m_object->SetType(type); @@ -81,10 +77,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother1.mod")); - pModFile->CreateEngineObject(rank); - + modelManager->AddModelReference("mother1.mod", false, rank); m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); @@ -98,8 +91,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother2.mod", false, rank); m_object->SetPosition(1, Math::Vector(16.0f, 3.0f, 0.0f)); // Creates a right-back leg. @@ -107,8 +99,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother3.mod", false, rank); m_object->SetPosition(2, Math::Vector(-5.0f, -1.0f, -12.0f)); // Creates a right-back foot. @@ -116,8 +107,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 2); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother4.mod", false, rank); m_object->SetPosition(3, Math::Vector(0.0f, 0.0f, -8.5f)); // Creates a middle-right leg. @@ -125,8 +115,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(4, rank); m_object->SetObjectParent(4, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother3.mod", false, rank); m_object->SetPosition(4, Math::Vector(3.5f, -1.0f, -12.0f)); // Creates a middle-right foot. @@ -134,8 +123,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(5, rank); m_object->SetObjectParent(5, 4); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother4.mod", false, rank); m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -8.5f)); // Creates a right-front leg. @@ -143,8 +131,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother3.mod", false, rank); m_object->SetPosition(6, Math::Vector(10.0f, -1.0f, -10.0f)); // Creates a right-front foot. @@ -152,8 +139,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 6); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother4.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -8.5f)); // Creates a left-back leg. @@ -161,8 +147,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother3.mod", false, rank); m_object->SetPosition(8, Math::Vector(-5.0f, -1.0f, 12.0f)); m_object->SetAngleY(8, Math::PI); @@ -171,8 +156,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 8); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother4.mod", false, rank); m_object->SetPosition(9, Math::Vector(0.0f, 0.0f, -8.5f)); // Creates a middle-left leg. @@ -180,8 +164,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(10, rank); m_object->SetObjectParent(10, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother3.mod", false, rank); m_object->SetPosition(10, Math::Vector(3.5f, -1.0f, 12.0f)); m_object->SetAngleY(10, Math::PI); @@ -190,8 +173,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(11, rank); m_object->SetObjectParent(11, 10); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother4.mod", false, rank); m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -8.5f)); // Creates a left-front leg. @@ -199,8 +181,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(12, rank); m_object->SetObjectParent(12, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother3.mod", false, rank); m_object->SetPosition(12, Math::Vector(10.0f, -1.0f, 10.0f)); m_object->SetAngleY(12, Math::PI); @@ -209,8 +190,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(13, rank); m_object->SetObjectParent(13, 12); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother4.mod", false, rank); m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, -8.5f)); // Creates the right antenna. @@ -218,16 +198,14 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(14, rank); m_object->SetObjectParent(14, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother5.mod", false, rank); m_object->SetPosition(14, Math::Vector(6.0f, 1.0f, -2.5f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(15, rank); m_object->SetObjectParent(15, 14); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother6.mod", false, rank); m_object->SetPosition(15, Math::Vector(8.0f, 0.0f, 0.0f)); // Creates the left antenna. @@ -235,16 +213,14 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(16, rank); m_object->SetObjectParent(16, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother5.mod", false, rank); m_object->SetPosition(16, Math::Vector(6.0f, 1.0f, 2.5f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(17, rank); m_object->SetObjectParent(17, 16); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother6.mod", false, rank); m_object->SetPosition(17, Math::Vector(8.0f, 0.0f, 0.0f)); // Creates the right claw. @@ -252,8 +228,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(18, rank); m_object->SetObjectParent(18, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother7.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother7.mod", false, rank); m_object->SetPosition(18, Math::Vector(-4.0f, -3.5f, -8.0f)); m_object->SetZoomX(18, 1.2f); @@ -262,9 +237,7 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(19, rank); m_object->SetObjectParent(19, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "mother7.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("mother7.mod", true, rank); m_object->SetPosition(19, Math::Vector(-4.0f, -3.5f, 8.0f)); m_object->SetZoomX(19, 1.2f); @@ -278,7 +251,6 @@ bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/motion/motionspider.cpp b/src/object/motion/motionspider.cpp index 516ec6e..66d89fb 100644 --- a/src/object/motion/motionspider.cpp +++ b/src/object/motion/motionspider.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "graphics/engine/modelfile.h" +#include "graphics/engine/modelmanager.h" #include "graphics/engine/particle.h" #include "physics/physics.h" @@ -69,12 +69,9 @@ void CMotionSpider::DeleteObject(bool bAll) bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; int rank, i, j, parent; char name[50]; - std::string baseName; - float table[] = { // x y z @@ -99,9 +96,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, 0.0f, 0.0f, -2.0f, }; -// if ( m_engine->GetRestCreate() < 3+32+2 ) return false; - - pModFile = new Gfx::CModelFile(m_iMan); + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); m_object->SetType(type); @@ -109,8 +104,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider0.mod")); // doesn't exist - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("spider0.mod", false, rank); m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); @@ -124,8 +118,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider1.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("spider1.mod", false, rank); m_object->SetPosition(1, Math::Vector(1.0f, 0.0f, 0.0f)); // Creates the head. @@ -133,8 +126,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("spider2.mod", false, rank); m_object->SetPosition(2, Math::Vector(1.0f, 0.0f, 0.0f)); // Creates legs. @@ -142,8 +134,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, { for ( j=0 ; j<4 ; j++ ) { - baseName = m_app->GetDataFilePath(DIR_MODEL, "spider%d.mod"); - sprintf(name, baseName.c_str(), j+3); // 3..6 + sprintf(name, "spider%d.mod", j+3); // 3..6 // Creates the right leg. rank = m_engine->CreateObject(); @@ -152,8 +143,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, if ( j == 0 ) parent = 0; else parent = 3+i*4+j-1; m_object->SetObjectParent(3+i*4+j, parent); - pModFile->ReadModel(name); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference(name, false, rank); pos.x = table[i*12+j*3+0]; pos.y = table[i*12+j*3+1]; pos.z = table[i*12+j*3+2]; @@ -166,9 +156,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, if ( j == 0 ) parent = 0; else parent = 19+i*4+j-1; m_object->SetObjectParent(19+i*4+j, parent); - pModFile->ReadModel(name); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference(name, true, rank); pos.x = table[i*12+j*3+0]; pos.y = table[i*12+j*3+1]; pos.z = -table[i*12+j*3+2]; @@ -181,8 +169,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(35, rank); m_object->SetObjectParent(35, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider7.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("spider7.mod", false, rank); m_object->SetPosition(35, Math::Vector(0.0f, 0.0f, -0.3f)); // Creates the left mandible. @@ -190,9 +177,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(36, rank); m_object->SetObjectParent(36, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "spider7.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("spider7.mod", true, rank); m_object->SetPosition(36, Math::Vector(0.0f, 0.0f, 0.3f)); m_object->CreateShadowCircle(4.0f, 0.5f); @@ -205,7 +190,6 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/motion/motiontoto.cpp b/src/object/motion/motiontoto.cpp index 274f171..3a7f1ac 100644 --- a/src/object/motion/motiontoto.cpp +++ b/src/object/motion/motiontoto.cpp @@ -21,9 +21,9 @@ #include "math/geometry.h" +#include "graphics/engine/modelmanager.h" #include "graphics/engine/terrain.h" #include "graphics/engine/water.h" -#include "graphics/engine/modelfile.h" #include "object/robotmain.h" @@ -81,12 +81,9 @@ void CMotionToto::DeleteObject(bool bAll) bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); int rank; -// if ( m_engine->GetRestCreate() < 10 ) return false; - - pModFile = new Gfx::CModelFile(m_iMan); m_object->SetType(type); @@ -94,8 +91,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto1.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto1.mod", false, rank); m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); @@ -104,8 +100,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto2.mod", false, rank); m_object->SetPosition(1, Math::Vector(1.00f, 0.17f, 0.00f)); // Creates the left eye. @@ -113,9 +108,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto3.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto3.mod", true, rank); m_object->SetPosition(2, Math::Vector(0.85f, 1.04f, 0.25f)); m_object->SetAngleY(2, -20.0f*Math::PI/180.0f); @@ -124,8 +117,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto3.mod", false, rank); m_object->SetPosition(3, Math::Vector(0.85f, 1.04f, -0.25f)); m_object->SetAngleY(3, 20.0f*Math::PI/180.0f); @@ -134,8 +126,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(4, rank); m_object->SetObjectParent(4, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto4.mod", false, rank); m_object->SetPosition(4, Math::Vector(0.0f, 1.9f, 0.3f)); m_object->SetAngleX(4, 30.0f*Math::PI/180.0f); @@ -143,8 +134,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(5, rank); m_object->SetObjectParent(5, 4); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto4.mod", false, rank); m_object->SetPosition(5, Math::Vector(0.0f, 0.67f, 0.0f)); m_object->SetAngleX(5, 30.0f*Math::PI/180.0f); @@ -152,8 +142,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 5); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto5.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.0f, 0.70f, 0.0f)); m_object->SetAngleX(6, 30.0f*Math::PI/180.0f); @@ -162,8 +151,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto4.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 1.9f, -0.3f)); m_object->SetAngleX(7, -30.0f*Math::PI/180.0f); @@ -171,8 +159,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 7); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto4.mod", false, rank); m_object->SetPosition(8, Math::Vector(0.0f, 0.67f, 0.0f)); m_object->SetAngleX(8, -30.0f*Math::PI/180.0f); @@ -180,8 +167,7 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 8); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "toto5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("toto5.mod", false, rank); m_object->SetPosition(9, Math::Vector(0.0f, 0.70f, 0.0f)); m_object->SetAngleX(9, -30.0f*Math::PI/180.0f); @@ -193,7 +179,6 @@ bool CMotionToto::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index 849d53e..d331f13 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "graphics/engine/modelfile.h" +#include "graphics/engine/modelmanager.h" #include "graphics/engine/particle.h" #include "graphics/engine/terrain.h" @@ -92,15 +92,12 @@ void CMotionVehicle::DeleteObject(bool bAll) bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; CObject* pPower; int rank, i, j, parent; Gfx::Color color; char name[50]; -// if ( m_engine->GetRestCreate() < 1+5+18+1 ) return false; - - pModFile = new Gfx::CModelFile(m_iMan); + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); m_object->SetType(type); @@ -109,106 +106,105 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - if ( type == OBJECT_MOBILEfa || - type == OBJECT_MOBILEfc || - type == OBJECT_MOBILEfi || - type == OBJECT_MOBILEfs ) + if (type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfc || + type == OBJECT_MOBILEfi || + type == OBJECT_MOBILEfs) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1f.mod")); + modelManager->AddModelReference("lem1f.mod", false, rank); } - if ( type == OBJECT_MOBILEta || - type == OBJECT_MOBILEtc || - type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) + else if (type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtc || + type == OBJECT_MOBILEti || + type == OBJECT_MOBILEts) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1t.mod")); + modelManager->AddModelReference("lem1t.mod", false, rank); } - if ( type == OBJECT_MOBILEwa || - type == OBJECT_MOBILEwc || - type == OBJECT_MOBILEwi || - type == OBJECT_MOBILEws ) + else if (type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwc || + type == OBJECT_MOBILEwi || + type == OBJECT_MOBILEws) { - if ( m_object->GetTrainer() ) + if (m_object->GetTrainer()) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1wt.mod")); + modelManager->AddModelReference("lem1wt.mod", false, rank); } else { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1w.mod")); + modelManager->AddModelReference("lem1w.mod", false, rank); } } - if ( type == OBJECT_MOBILEia || - type == OBJECT_MOBILEic || - type == OBJECT_MOBILEii || - type == OBJECT_MOBILEis ) + else if (type == OBJECT_MOBILEia || + type == OBJECT_MOBILEic || + type == OBJECT_MOBILEii || + type == OBJECT_MOBILEis) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem1i.mod")); + modelManager->AddModelReference("lem1i.mod", false, rank); } - if ( type == OBJECT_MOBILErt || - type == OBJECT_MOBILErc || - type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + else if (type == OBJECT_MOBILErt || + type == OBJECT_MOBILErc || + type == OBJECT_MOBILErr || + type == OBJECT_MOBILErs) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller1.mod")); + modelManager->AddModelReference("roller1.mod", false, rank); } - if ( type == OBJECT_MOBILEsa ) + else if (type == OBJECT_MOBILEsa) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm1.mod")); + modelManager->AddModelReference("subm1.mod", false, rank); } - if ( type == OBJECT_MOBILEtg ) + else if (type == OBJECT_MOBILEtg) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "target.mod")); + modelManager->AddModelReference("target.mod", false, rank); } - if ( type == OBJECT_MOBILEwt ) + else if (type == OBJECT_MOBILEwt) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "trainerw.mod")); + modelManager->AddModelReference("trainerw.mod", false, rank); } - if ( type == OBJECT_MOBILEft ) + else if (type == OBJECT_MOBILEft) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "trainerf.mod")); + modelManager->AddModelReference("trainerf.mod", false, rank); } - if ( type == OBJECT_MOBILEtt ) + else if (type == OBJECT_MOBILEtt) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "trainert.mod")); + modelManager->AddModelReference("trainert.mod", false, rank); } - if ( type == OBJECT_MOBILEit ) + else if (type == OBJECT_MOBILEit) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "traineri.mod")); + modelManager->AddModelReference("traineri.mod", false, rank); } - if ( type == OBJECT_MOBILEdr ) + else if (type == OBJECT_MOBILEdr) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer1.mod")); + modelManager->AddModelReference("drawer1.mod", false, rank); } - if ( type == OBJECT_APOLLO2 ) + else if (type == OBJECT_APOLLO2) { - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj1.mod")); + modelManager->AddModelReference("apolloj1.mod", false, rank); } - pModFile->CreateEngineObject(rank); m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); // A vehicle must have a obligatory collision // with a sphere of center (0, y, 0) (see GetCrashSphere). - if ( type == OBJECT_MOBILErt || - type == OBJECT_MOBILErc || - type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + if (type == OBJECT_MOBILErt || + type == OBJECT_MOBILErc || + type == OBJECT_MOBILErr || + type == OBJECT_MOBILErs) { m_object->CreateCrashSphere(Math::Vector(0.0f, 4.0f, 0.0f), 6.5f, SOUND_BOUMm, 0.45f); m_object->SetGlobalSphere(Math::Vector(0.0f, 3.0f, 0.0f), 7.0f); } - else if ( type == OBJECT_MOBILEsa ) + else if (type == OBJECT_MOBILEsa) { m_object->CreateCrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 4.5f, SOUND_BOUMm, 0.45f); m_object->SetGlobalSphere(Math::Vector(0.0f, 3.0f, 0.0f), 6.0f); } - else if ( type == OBJECT_MOBILEdr ) + else if (type == OBJECT_MOBILEdr) { m_object->CreateCrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f); m_object->SetGlobalSphere(Math::Vector(0.0f, 3.0f, 0.0f), 7.0f); } - else if ( type == OBJECT_APOLLO2 ) + else if (type == OBJECT_APOLLO2) { m_object->CreateCrashSphere(Math::Vector(0.0f, 0.0f, 0.0f), 8.0f, SOUND_BOUMm, 0.45f); } @@ -218,18 +214,17 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetGlobalSphere(Math::Vector(0.0f, 4.0f, 0.0f), 6.0f); } - if ( type == OBJECT_MOBILEfa || - type == OBJECT_MOBILEta || - type == OBJECT_MOBILEwa || - type == OBJECT_MOBILEia ) + if (type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEta || + type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEia) { // Creates the arm. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2.mod", false, rank); m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetAngleZ(1, ARM_NEUTRAL_ANGLE1); @@ -238,8 +233,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem3.mod", false, rank); m_object->SetPosition(2, Math::Vector(5.0f, 0.0f, 0.0f)); m_object->SetAngleZ(2, ARM_NEUTRAL_ANGLE2); @@ -248,8 +242,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 2); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem4.mod", false, rank); m_object->SetPosition(3, Math::Vector(3.5f, 0.0f, 0.0f)); m_object->SetAngleZ(3, ARM_NEUTRAL_ANGLE3); m_object->SetAngleX(3, Math::PI/2.0f); @@ -259,8 +252,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(4, rank); m_object->SetObjectParent(4, 3); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem5.mod", false, rank); m_object->SetPosition(4, Math::Vector(1.5f, 0.0f, 0.0f)); m_object->SetAngleZ(4, -Math::PI*0.10f); @@ -269,24 +261,22 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(5, rank); m_object->SetObjectParent(5, 3); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem6.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem6.mod", false, rank); m_object->SetPosition(5, Math::Vector(1.5f, 0.0f, 0.0f)); m_object->SetAngleZ(5, Math::PI*0.10f); } - if ( type == OBJECT_MOBILEfs || - type == OBJECT_MOBILEts || - type == OBJECT_MOBILEws || - type == OBJECT_MOBILEis ) + if (type == OBJECT_MOBILEfs || + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEws || + type == OBJECT_MOBILEis) { // Creates the arm. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2.mod", false, rank); m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetAngleZ(1, 110.0f*Math::PI/180.0f); @@ -295,8 +285,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem3.mod", false, rank); m_object->SetPosition(2, Math::Vector(5.0f, 0.0f, 0.0f)); m_object->SetAngleZ(2, -110.0f*Math::PI/180.0f); @@ -305,41 +294,38 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 2); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem4s.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem4s.mod", false, rank); m_object->SetPosition(3, Math::Vector(3.5f, 0.0f, 0.0f)); m_object->SetAngleZ(3, -65.0f*Math::PI/180.0f); } - if ( type == OBJECT_MOBILEfc || - type == OBJECT_MOBILEtc || - type == OBJECT_MOBILEwc || - type == OBJECT_MOBILEic ) + if (type == OBJECT_MOBILEfc || + type == OBJECT_MOBILEtc || + type == OBJECT_MOBILEwc || + type == OBJECT_MOBILEic) { // Creates the cannon. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "canon.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("canon.mod", false, rank); //? m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetAngleZ(1, 0.0f); } - if ( type == OBJECT_MOBILEfi || - type == OBJECT_MOBILEti || - type == OBJECT_MOBILEwi || - type == OBJECT_MOBILEii ) + if (type == OBJECT_MOBILEfi || + type == OBJECT_MOBILEti || + type == OBJECT_MOBILEwi || + type == OBJECT_MOBILEii) { // Creates the insect cannon. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "canoni1.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("canoni1.mod", false, rank); m_object->SetPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetAngleZ(1, 0.0f); @@ -347,25 +333,23 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "canoni2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("canoni2.mod", false, rank); m_object->SetPosition(2, Math::Vector(0.0f, 2.5f, 0.0f)); m_object->SetAngleZ(2, 0.0f); } - if ( type == OBJECT_MOBILEwa || - type == OBJECT_MOBILEwc || - type == OBJECT_MOBILEws || - type == OBJECT_MOBILEwi || - type == OBJECT_MOBILEwt ) + if (type == OBJECT_MOBILEwa || + type == OBJECT_MOBILEwc || + type == OBJECT_MOBILEws || + type == OBJECT_MOBILEwi || + type == OBJECT_MOBILEwt) { // Creates the right-back wheel. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(6, Math::Vector(-3.0f, 1.0f, -3.0f)); // Creates the left-back wheel. @@ -373,8 +357,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(7, Math::Vector(-3.0f, 1.0f, 3.0f)); m_object->SetAngleY(7, Math::PI); @@ -383,8 +366,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(8, Math::Vector(2.0f, 1.0f, -3.0f)); // Creates the left-front wheel. @@ -392,21 +374,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(9, Math::Vector(2.0f, 1.0f, 3.0f)); m_object->SetAngleY(9, Math::PI); } - if ( type == OBJECT_MOBILEtg ) + if (type == OBJECT_MOBILEtg) { // Creates the right-back wheel. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(6, Math::Vector(-2.0f, 1.0f, -3.0f)); // Creates the left-back wheel. @@ -414,8 +394,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(7, Math::Vector(-2.0f, 1.0f, 3.0f)); m_object->SetAngleY(7, Math::PI); @@ -424,8 +403,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(8, Math::Vector(3.0f, 1.0f, -3.0f)); // Creates the left-front wheel. @@ -433,24 +411,22 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2w.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2w.mod", false, rank); m_object->SetPosition(9, Math::Vector(3.0f, 1.0f, 3.0f)); m_object->SetAngleY(9, Math::PI); } - if ( type == OBJECT_MOBILEta || - type == OBJECT_MOBILEtc || - type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) // caterpillars? + if (type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtc || + type == OBJECT_MOBILEti || + type == OBJECT_MOBILEts) // caterpillars? { // Creates the right caterpillar. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2t.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("lem2t.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); // Creates the left caterpillar. @@ -458,23 +434,21 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem3t.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("lem3t.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); } - if ( type == OBJECT_MOBILErt || - type == OBJECT_MOBILErc || - type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) // large caterpillars? + if (type == OBJECT_MOBILErt || + type == OBJECT_MOBILErc || + type == OBJECT_MOBILErr || + type == OBJECT_MOBILErs) // large caterpillars? { // Creates the right caterpillar. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("roller2.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); // Creates the left caterpillar. @@ -482,20 +456,18 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("roller3.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); } - if ( type == OBJECT_MOBILEsa ) // underwater caterpillars? + if (type == OBJECT_MOBILEsa) // underwater caterpillars? { // Creates the right caterpillar. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("subm4.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.0f, 1.0f, -3.0f)); // Creates the left caterpillar. @@ -503,20 +475,18 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("subm5.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 1.0f, 3.0f)); } - if ( type == OBJECT_MOBILEdr ) // caterpillars? + if (type == OBJECT_MOBILEdr) // caterpillars? { // Creates the right caterpillar. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("drawer2.mod", false, rank); m_object->SetPosition(6, Math::Vector(0.0f, 1.0f, -3.0f)); // Creates the left caterpillar. @@ -524,24 +494,22 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelCopy("drawer3.mod", false, rank); m_object->SetPosition(7, Math::Vector(0.0f, 1.0f, 3.0f)); } - if ( type == OBJECT_MOBILEfa || - type == OBJECT_MOBILEfc || - type == OBJECT_MOBILEfs || - type == OBJECT_MOBILEfi || - type == OBJECT_MOBILEft ) // flying? + if (type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfc || + type == OBJECT_MOBILEfs || + type == OBJECT_MOBILEfi || + type == OBJECT_MOBILEft) // flying? { // Creates the front foot. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2f.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2f.mod", false, rank); m_object->SetPosition(6, Math::Vector(1.7f, 3.0f, 0.0f)); // Creates the right-back foot. @@ -549,8 +517,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2f.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2f.mod", false, rank); m_object->SetPosition(7, Math::Vector(-1.8f, 3.0f, -1.5f)); m_object->SetAngleY(7, 120.0f*Math::PI/180.0f); @@ -559,16 +526,15 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "lem2f.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("lem2f.mod", false, rank); m_object->SetPosition(8, Math::Vector(-1.8f, 3.0f, 1.5f)); m_object->SetAngleY(8, -120.0f*Math::PI/180.0f); } - if ( type == OBJECT_MOBILEia || - type == OBJECT_MOBILEic || - type == OBJECT_MOBILEis || - type == OBJECT_MOBILEii ) // insect legs? + if (type == OBJECT_MOBILEia || + type == OBJECT_MOBILEic || + type == OBJECT_MOBILEis || + type == OBJECT_MOBILEii) // insect legs? { float table[] = { @@ -590,8 +556,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, { for ( j=0 ; j<3 ; j++ ) { - std::string baseName = m_app->GetDataFilePath(DIR_MODEL, "ant%d.mod"); - sprintf(name, baseName.c_str(), j+4); // 4..6 + sprintf(name, "ant%d.mod", j+4); // 4..6 // Creates the right leg. rank = m_engine->CreateObject(); @@ -600,8 +565,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, if ( j == 0 ) parent = 0; else parent = 6+i*3+j-1; m_object->SetObjectParent(6+i*3+j, parent); - pModFile->ReadModel(name); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference(name, false, rank); pos.x = table[i*9+j*3+0]; pos.y = table[i*9+j*3+1]; pos.z = table[i*9+j*3+2]; @@ -614,9 +578,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, if ( j == 0 ) parent = 0; else parent = 15+i*3+j-1; m_object->SetObjectParent(15+i*3+j, parent); - pModFile->ReadModel(name); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference(name, true, rank); pos.x = table[i*9+j*3+0]; pos.y = table[i*9+j*3+1]; pos.z = -table[i*9+j*3+2]; @@ -625,15 +587,14 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, } } - if ( type == OBJECT_MOBILErt ) + if (type == OBJECT_MOBILErt) { // Creates the holder. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2t.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("roller2t.mod", false, rank); m_object->SetPosition(1, Math::Vector(0.0f, 0.0f, 0.0f)); m_object->SetAngleZ(1, 0.0f); @@ -642,21 +603,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3t.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("roller3t.mod", false, rank); m_object->SetPosition(2, Math::Vector(9.0f, 4.0f, 0.0f)); m_object->SetAngleZ(2, 0.0f); } - if ( type == OBJECT_MOBILErc ) + if (type == OBJECT_MOBILErc) { // Creates the holder. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2c.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("roller2c.mod", false, rank); m_object->SetPosition(1, Math::Vector(3.0f, 4.6f, 0.0f)); m_object->SetAngleZ(1, Math::PI/8.0f); @@ -665,21 +624,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3p.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("roller3p.mod", false, rank); m_object->SetPosition(2, Math::Vector(7.0f, 6.5f, 0.0f)); m_object->SetAngleZ(2, 0.0f); } - if ( type == OBJECT_MOBILErr ) + if (type == OBJECT_MOBILErr) { // Creates the holder. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover1.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("recover1.mod", false, rank); m_object->SetPosition(1, Math::Vector(2.0f, 5.0f, 0.0f)); // Creates the right arm. @@ -687,8 +644,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("recover2.mod", false, rank); m_object->SetPosition(2, Math::Vector(0.1f, 0.0f, -5.0f)); m_object->SetAngleZ(2, 126.0f*Math::PI/180.0f); @@ -697,8 +653,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 2); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("recover3.mod", false, rank); m_object->SetPosition(3, Math::Vector(5.0f, 0.0f, -0.5f)); m_object->SetAngleZ(3, -144.0f*Math::PI/180.0f); @@ -707,9 +662,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(4, rank); m_object->SetObjectParent(4, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover2.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("recover2.mod", true, rank); m_object->SetPosition(4, Math::Vector(0.1f, 0.0f, 5.0f)); m_object->SetAngleZ(4, 126.0f*Math::PI/180.0f); @@ -718,22 +671,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(5, rank); m_object->SetObjectParent(5, 4); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "recover3.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("recover3.mod", true, rank); m_object->SetPosition(5, Math::Vector(5.0f, 0.0f, 0.5f)); m_object->SetAngleZ(5, -144.0f*Math::PI/180.0f); } - if ( type == OBJECT_MOBILErs ) + if (type == OBJECT_MOBILErs) { // Creates the holder. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller2s.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("roller2s.mod", false, rank); m_object->SetPosition(1, Math::Vector(0.0f, 0.0f, 0.0f)); m_object->SetAngleZ(1, 0.0f); @@ -742,8 +692,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller3s.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("roller3s.mod", false, rank); m_object->SetPosition(2, Math::Vector(7.0f, 4.5f, 0.0f)); m_object->SetAngleZ(2, 0.0f); @@ -752,21 +701,19 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 2); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "roller4s.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("roller4s.mod", false, rank); m_object->SetPosition(3, Math::Vector(0.0f, 1.0f, 0.0f)); m_object->SetAngleZ(3, 0.0f); } - if ( type == OBJECT_MOBILEsa ) + if (type == OBJECT_MOBILEsa) { // Creates the holder. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("subm2.mod", false, rank); m_object->SetPosition(1, Math::Vector(4.2f, 3.0f, 0.0f)); // Creates the right tong. @@ -774,8 +721,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("subm3.mod", false, rank); m_object->SetPosition(2, Math::Vector(0.5f, 0.0f, -1.5f)); // Creates the left tong. @@ -783,21 +729,18 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(3, rank); m_object->SetObjectParent(3, 1); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "subm3.mod")); - pModFile->Mirror(); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("subm3.mod", true, rank); m_object->SetPosition(3, Math::Vector(0.5f, 0.0f, 1.5f)); } - if ( type == OBJECT_MOBILEdr ) + if (type == OBJECT_MOBILEdr) { // Creates the carousel. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer4.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("drawer4.mod", false, rank); m_object->SetPosition(1, Math::Vector(-3.0f, 3.0f, 0.0f)); // Creates the key. @@ -807,8 +750,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("drawer5.mod", false, rank); m_posKey = Math::Vector(3.0f, 5.7f, 0.0f); m_object->SetPosition(2, m_posKey); m_object->SetAngleY(2, 90.0f*Math::PI/180.0f); @@ -821,16 +763,14 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(10+i, rank); m_object->SetObjectParent(10+i, 1); - std::string baseName = m_app->GetDataFilePath(DIR_MODEL, "drawer%d.mod"); - sprintf(name, baseName.c_str(), 10+i); - pModFile->ReadModel(name); - pModFile->CreateEngineObject(rank); + sprintf(name, "drawer%d.mod", 10+i); + modelManager->AddModelReference(name, false, rank); m_object->SetPosition(10+i, Math::Vector(0.0f, 0.0f, 0.0f)); m_object->SetAngleY(10+i, 45.0f*Math::PI/180.0f*i); } } - if ( type == OBJECT_MOBILEwt ) + if (type == OBJECT_MOBILEwt) { // Creates the key. if ( m_object->GetToy() ) @@ -839,23 +779,21 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "drawer5.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("drawer5.mod", false, rank); m_posKey = Math::Vector(0.2f, 4.1f, 0.0f); m_object->SetPosition(2, m_posKey); m_object->SetAngleY(2, 90.0f*Math::PI/180.0f); } } - if ( type == OBJECT_APOLLO2 ) + if (type == OBJECT_APOLLO2) { // Creates the accessories. rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj2.mod")); // antenna - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj2.mod", false, rank); // antenna m_object->SetPosition(1, Math::Vector(5.5f, 8.8f, 2.0f)); m_object->SetAngleY(1, -120.0f*Math::PI/180.0f); m_object->SetAngleZ(1, 45.0f*Math::PI/180.0f); @@ -864,8 +802,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2, rank); m_object->SetObjectParent(2, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj3.mod")); // camera - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj3.mod", false, rank); // camera m_object->SetPosition(2, Math::Vector(5.5f, 2.8f, -2.0f)); m_object->SetAngleY(2, 30.0f*Math::PI/180.0f); @@ -874,32 +811,28 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(6, rank); m_object->SetObjectParent(6, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel m_object->SetPosition(6, Math::Vector(-5.75f, 1.65f, -5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(7, rank); m_object->SetObjectParent(7, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel m_object->SetPosition(7, Math::Vector(-5.75f, 1.65f, 5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(8, rank); m_object->SetObjectParent(8, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel m_object->SetPosition(8, Math::Vector(5.75f, 1.65f, -5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(9, rank); m_object->SetObjectParent(9, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj4.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel m_object->SetPosition(9, Math::Vector(5.75f, 1.65f, 5.00f)); // Creates mud guards. @@ -907,56 +840,51 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(10, rank); m_object->SetObjectParent(10, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj6.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj6.mod", false, rank); // wheel m_object->SetPosition(10, Math::Vector(-5.75f, 1.65f, -5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(11, rank); m_object->SetObjectParent(11, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj6.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj6.mod", false, rank); // wheel m_object->SetPosition(11, Math::Vector(-5.75f, 1.65f, 5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(12, rank); m_object->SetObjectParent(12, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj5.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj5.mod", false, rank); // wheel m_object->SetPosition(12, Math::Vector(5.75f, 1.65f, -5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(13, rank); m_object->SetObjectParent(13, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "apolloj5.mod")); // wheel - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("apolloj5.mod", false, rank); // wheel m_object->SetPosition(13, Math::Vector(5.75f, 1.65f, 5.00f)); } -#if 1 - if ( type == OBJECT_MOBILErt || - type == OBJECT_MOBILErc || - type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) + if (type == OBJECT_MOBILErt || + type == OBJECT_MOBILErc || + type == OBJECT_MOBILErr || + type == OBJECT_MOBILErs) { m_object->CreateShadowCircle(6.0f, 1.0f); } - else if ( type == OBJECT_MOBILEta || - type == OBJECT_MOBILEtc || - type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts || - type == OBJECT_MOBILEsa ) + else if (type == OBJECT_MOBILEta || + type == OBJECT_MOBILEtc || + type == OBJECT_MOBILEti || + type == OBJECT_MOBILEts || + type == OBJECT_MOBILEsa) { m_object->CreateShadowCircle(5.0f, 1.0f); } - else if ( type == OBJECT_MOBILEdr ) + else if (type == OBJECT_MOBILEdr) { m_object->CreateShadowCircle(4.5f, 1.0f); } - else if ( type == OBJECT_APOLLO2 ) + else if (type == OBJECT_APOLLO2) { m_object->CreateShadowCircle(7.0f, 0.8f); } @@ -964,50 +892,12 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, { m_object->CreateShadowCircle(4.0f, 1.0f); } -#else - if ( type == OBJECT_MOBILErt || - type == OBJECT_MOBILErc || - type == OBJECT_MOBILErr || - type == OBJECT_MOBILErs ) - { - m_object->CreateShadowCircle(6.0f, 1.0f, D3DSHADOWTANK); - } - else if ( type == OBJECT_MOBILEta || - type == OBJECT_MOBILEtc || - type == OBJECT_MOBILEti || - type == OBJECT_MOBILEts ) - { - m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWTANK); - } - else if ( type == OBJECT_MOBILEfa || - type == OBJECT_MOBILEfc || - type == OBJECT_MOBILEfi || - type == OBJECT_MOBILEfs ) - { - m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWFLY); - } - else if ( type == OBJECT_MOBILEwa || - type == OBJECT_MOBILEwc || - type == OBJECT_MOBILEwi || - type == OBJECT_MOBILEws ) - { - m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWWHEEL); - } - else if ( type == OBJECT_APOLLO2 ) - { - m_object->CreateShadowCircle(6.0f, 0.8f); - } - else - { - m_object->CreateShadowCircle(4.0f, 1.0f, D3DSHADOWNORM); - } -#endif - if ( type == OBJECT_MOBILEfa || - type == OBJECT_MOBILEfc || - type == OBJECT_MOBILEfi || - type == OBJECT_MOBILEfs || - type == OBJECT_MOBILEft ) // flying? + if (type == OBJECT_MOBILEfa || + type == OBJECT_MOBILEfc || + type == OBJECT_MOBILEfi || + type == OBJECT_MOBILEfs || + type == OBJECT_MOBILEft) // flying? { //? color.r = 0.5f-1.0f; //? color.g = 0.2f-1.0f; @@ -1025,9 +915,9 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, CreatePhysics(type); m_object->SetFloorHeight(0.0f); - if ( power > 0.0f && - type != OBJECT_MOBILEdr && - type != OBJECT_APOLLO2 ) + if (power > 0.0f && + type != OBJECT_MOBILEdr && + type != OBJECT_APOLLO2) { color.r = 1.0f; color.g = 1.0f; @@ -1043,9 +933,8 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, 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, m_object->GetCharacter()->posPower); pPower->CreateCrashSphere(Math::Vector(0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f); @@ -1063,7 +952,6 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/motion/motionworm.cpp b/src/object/motion/motionworm.cpp index 2401ebd..b53b865 100644 --- a/src/object/motion/motionworm.cpp +++ b/src/object/motion/motionworm.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "graphics/engine/modelfile.h" +#include "graphics/engine/modelmanager.h" #include "graphics/engine/particle.h" #include "graphics/engine/terrain.h" @@ -81,13 +81,10 @@ void CMotionWorm::DeleteObject(bool bAll) bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type, float power) { - Gfx::CModelFile* pModFile; int rank, i; float px; -// if ( m_engine->GetRestCreate() < 2+WORM_PART+1 ) return false; - - pModFile = new Gfx::CModelFile(m_iMan); + Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer(); m_object->SetType(type); @@ -95,8 +92,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm0.mod")); // there is no purpose! - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("worm0.mod", false, rank); // there is no purpose! m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); @@ -111,8 +107,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(1, rank); m_object->SetObjectParent(1, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm1.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("worm1.mod", false, rank); m_object->SetPosition(1, Math::Vector(px, 0.0f, 0.0f)); px -= 1.0f; @@ -123,8 +118,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2+i, rank); m_object->SetObjectParent(2+i, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm2.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("worm2.mod", false, rank); m_object->SetPosition(2+i, Math::Vector(px, 0.0f, 0.0f)); px -= 1.0f; } @@ -134,8 +128,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); m_object->SetObjectRank(2+WORM_PART, rank); m_object->SetObjectParent(2+WORM_PART, 0); - pModFile->ReadModel(m_app->GetDataFilePath(DIR_MODEL, "worm3.mod")); - pModFile->CreateEngineObject(rank); + modelManager->AddModelReference("worm3.mod", false, rank); m_object->SetPosition(2+WORM_PART, Math::Vector(px, 0.0f, 0.0f)); m_object->CreateShadowCircle(0.0f, 1.0f, Gfx::ENG_SHADOW_WORM); @@ -148,7 +141,6 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type, m_engine->LoadAllTextures(); - delete pModFile; return true; } diff --git a/src/object/object.cpp b/src/object/object.cpp index 2eade93..afa7815 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" @@ -2351,11 +2351,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 +2364,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 +2373,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 +2388,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 +2396,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 +2404,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 +2412,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 +2420,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 +2428,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 +2437,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 +2453,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 +2474,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 +2485,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 +2495,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 +2510,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 +2540,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 +2549,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 +2563,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 +2572,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 +2595,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 +2604,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 +2619,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 +2631,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 +2640,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 +2649,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 +2671,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->AddModelReference("energy.mod", false, rank); SetPosition(0, pos); SetAngleY(0, angle); SetFloorHeight(0.0f); @@ -2722,8 +2689,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 +2698,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 +2706,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 +2721,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 +2730,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 +2749,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 +2760,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 +2769,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 +2806,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 +2815,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 +2830,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 +2839,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 +2854,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->AddModelReference("station.mod", false, rank); SetPosition(0, pos); SetAngleY(0, angle); SetFloorHeight(0.0f); @@ -2917,8 +2870,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 +2879,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 +2894,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 +2910,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 +2919,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 +2927,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 +2945,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 +2954,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 +2970,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 +2995,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 +3004,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 +3024,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 +3033,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 +3042,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 +3065,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 +3094,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 +3104,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 +3116,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 +3126,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); @@ -3214,9 +3146,8 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height, 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 +3168,6 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height, CreateOtherObject(type); m_engine->LoadAllTextures(); - delete pModFile; return true; } @@ -3246,11 +3176,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 +3189,44 @@ 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"; + + 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 +3279,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 +3286,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 +3321,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 +3337,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 +3345,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 +3356,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 +3372,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 +3390,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 +3408,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 +3432,6 @@ bool CObject::CreateBarrier(Math::Vector pos, float angle, float height, pos.y += height; SetPosition(0, pos); - delete pModFile; return true; } @@ -3524,10 +3440,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 +3455,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 +3479,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 +3497,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 +3517,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 +3541,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 +3564,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 +3581,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 +3599,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 +3617,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 +3634,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 +3650,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 +3671,6 @@ bool CObject::CreatePlant(Math::Vector pos, float angle, float height, pos.y += height; SetPosition(0, pos); - delete pModFile; return true; } @@ -3776,10 +3679,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 +3690,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 +3706,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 +3727,6 @@ bool CObject::CreateMushroom(Math::Vector pos, float angle, float height, pos.y += height; SetPosition(0, pos); - delete pModFile; return true; } @@ -3836,14 +3735,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 +3752,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 +3771,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 +3792,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 +3814,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 +3829,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 +3850,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 +3866,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 +3886,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 +3906,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 +3927,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 +3948,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 +3973,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 +3997,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 +4012,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 +4036,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 +4060,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 +4084,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 +4101,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 +4116,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 +4131,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 +4146,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 +4166,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 +4177,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 +4193,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 +4219,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 +4234,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 +4249,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 +4272,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 +4287,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 +4301,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 +4313,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 +4328,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 +4346,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 +4364,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 +4378,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 +4392,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 +4410,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 +4422,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 +4434,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 +4443,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 +4463,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 +4478,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 +4493,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 +4504,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 +4518,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 +4532,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 +4557,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 +4565,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 +4577,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 +4591,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 +4605,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 +4619,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 +4662,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 +4670,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 +4681,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 +4702,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 +4723,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 +4743,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 +4765,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 +4789,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 +4798,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 +4828,6 @@ bool CObject::CreateRoot(Math::Vector pos, float angle, float height, pos.y += height; SetPosition(0, pos); - delete pModFile; return true; } @@ -5001,10 +4836,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 +4847,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 +4867,6 @@ bool CObject::CreateHome(Math::Vector pos, float angle, float height, pos.y += height; SetPosition(0, pos); - delete pModFile; return true; } @@ -5043,10 +4875,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 +4886,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 +4913,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 +4924,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 +4936,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 +4947,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 +4967,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 +4979,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 +4999,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 +5281,6 @@ bool CObject::CreateRuin(Math::Vector pos, float angle, float height, SetAngleX(0, angle); } - delete pModFile; return true; } @@ -5466,10 +5288,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 +5299,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 +5311,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 +5319,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 +5339,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 +5349,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 +5378,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 +5387,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 +5405,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 +5419,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 +5435,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 +5444,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 +5458,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; } diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 1da4587..5705649 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -1010,7 +1010,7 @@ void CRobotMain::ChangePhase(Phase phase) ChangePause(false); FlushDisplayInfo(); m_engine->SetRankView(0); - m_engine->FlushObject(); + m_engine->DeleteAllObjects(); m_engine->SetWaterAddColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f)); m_engine->SetBackground(""); m_engine->SetBackForce(false); @@ -3673,7 +3673,7 @@ void CRobotMain::Convert() void CRobotMain::ScenePerso() { DeleteAllObjects(); // removes all the current 3D Scene - m_engine->FlushObject(); + m_engine->DeleteAllObjects(); m_terrain->FlushRelief(); // all flat m_terrain->FlushBuildingLevel(); m_terrain->FlushFlyingLimit(); -- cgit v1.2.3-1-g7c22 From 2ebe1fbcb68957bf1d374ffc5dc818dd706c72a7 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Fri, 28 Dec 2012 13:23:49 +0100 Subject: Fixed spider and worm model loading --- src/object/motion/motionspider.cpp | 2 +- src/object/motion/motionworm.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/object') diff --git a/src/object/motion/motionspider.cpp b/src/object/motion/motionspider.cpp index 66d89fb..3ede492 100644 --- a/src/object/motion/motionspider.cpp +++ b/src/object/motion/motionspider.cpp @@ -104,7 +104,7 @@ bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - modelManager->AddModelReference("spider0.mod", false, rank); + // This is an "empty" object, without triangles m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); diff --git a/src/object/motion/motionworm.cpp b/src/object/motion/motionworm.cpp index b53b865..f32765d 100644 --- a/src/object/motion/motionworm.cpp +++ b/src/object/motion/motionworm.cpp @@ -92,7 +92,7 @@ bool CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type, rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICULE); // this is a moving object m_object->SetObjectRank(0, rank); - modelManager->AddModelReference("worm0.mod", false, rank); // there is no purpose! + // This is an "empty" object, without triangles m_object->SetPosition(0, pos); m_object->SetAngleY(0, angle); -- cgit v1.2.3-1-g7c22 From 3e4c1a1ad88456ebf201b257b91847bd995c8773 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Fri, 28 Dec 2012 13:37:08 +0100 Subject: Replaced malloc/free with new/delete - now new/delete used everywhere except for CBotStack, which has to be fixed in other way - some segfaults should be fixed with this --- src/object/brain.cpp | 27 ++++++++++++++++++--------- src/object/task/taskgoto.cpp | 4 ++-- 2 files changed, 20 insertions(+), 11 deletions(-) (limited to 'src/object') diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 4ce1bf8..ef7309d 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -99,7 +99,7 @@ CBrain::CBrain(CInstanceManager* iMan, CObject* object) m_selScript = 0; m_bTraceRecord = false; - m_traceRecordBuffer = 0; + m_traceRecordBuffer = nullptr; } // Object's destructor. @@ -111,12 +111,21 @@ CBrain::~CBrain() for ( i=0 ; iDeleteInstance(CLASS_BRAIN, this); } @@ -2791,8 +2800,8 @@ void CBrain::TraceRecordStart() m_traceColor = -1; } - delete m_traceRecordBuffer; - m_traceRecordBuffer = static_cast(malloc(sizeof(TraceRecord)*MAXTRACERECORD)); + delete[] m_traceRecordBuffer; + m_traceRecordBuffer = new TraceRecord[MAXTRACERECORD]; m_traceRecordIndex = 0; } @@ -2858,10 +2867,10 @@ void CBrain::TraceRecordStop() int max, i; char* buffer; - if ( m_traceRecordBuffer == 0 ) return; + if ( m_traceRecordBuffer == nullptr ) return; max = 10000; - buffer = static_cast(malloc(max)); + buffer = new char[max]; *buffer = 0; strncat(buffer, "extern void object::AutoDraw()\n{\n", max-1); @@ -2892,8 +2901,8 @@ void CBrain::TraceRecordStop() } TraceRecordPut(buffer, max, lastOper, lastParam); - delete m_traceRecordBuffer; - m_traceRecordBuffer = 0; + delete[] m_traceRecordBuffer; + m_traceRecordBuffer = nullptr; strncat(buffer, "}\n", max-1); buffer[max-1] = 0; @@ -2904,7 +2913,7 @@ void CBrain::TraceRecordStop() m_script[i] = new CScript(m_iMan, m_object, &m_secondaryTask); } m_script[i]->SendScript(buffer); - delete buffer; + delete[] buffer; } // Saves an instruction CBOT. diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp index ce778ef..cab57f1 100644 --- a/src/object/task/taskgoto.cpp +++ b/src/object/task/taskgoto.cpp @@ -2119,7 +2119,7 @@ bool CTaskGoto::BitmapOpen() BitmapClose(); m_bmSize = static_cast(3200.0f/BM_DIM_STEP); - m_bmArray = static_cast(malloc(m_bmSize*m_bmSize/8*2)); + m_bmArray = new unsigned char[m_bmSize*m_bmSize/8*2]; memset(m_bmArray, 0, m_bmSize*m_bmSize/8*2); m_bmOffset = m_bmSize/2; @@ -2137,7 +2137,7 @@ bool CTaskGoto::BitmapOpen() bool CTaskGoto::BitmapClose() { - free(m_bmArray); + delete[] m_bmArray; m_bmArray = 0; return true; } -- cgit v1.2.3-1-g7c22 From 1b4208cdc5143cfc8f46da063a1a991795d7f307 Mon Sep 17 00:00:00 2001 From: Didier Raboud Date: Fri, 28 Dec 2012 23:06:12 +0100 Subject: Implement language Char for level files This currently lacks fallback to an existing entry for non-translated entries --- src/object/robotmain.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index d5805d0..aa2fe22 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -3808,16 +3808,16 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) } } - // TODO: language letters - sprintf(op, "Title.%c", 'E' /*GetLanguageLetter()*/); + // TODO: Fallback to an non-localized entry + sprintf(op, "Title.%c", m_app->GetLanguageChar()); if (Cmd(line, op) && !resetObject) OpString(line, "text", m_title); - sprintf(op, "Resume.%c", 'E' /*GetLanguageLetter()*/); + sprintf(op, "Resume.%c", m_app->GetLanguageChar()); if (Cmd(line, op) && !resetObject) OpString(line, "text", m_resume); - sprintf(op, "ScriptName.%c", 'E' /*GetLanguageLetter()*/); + sprintf(op, "ScriptName.%c", m_app->GetLanguageChar()); if (Cmd(line, op) && !resetObject) OpString(line, "text", m_scriptName); -- cgit v1.2.3-1-g7c22 From c9335534d6bc7a59dbabf6976d41fd1e5edc8ab3 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Fri, 4 Jan 2013 00:02:13 +0100 Subject: Fix for #113 --- src/object/motion/motionvehicle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/object') diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index d331f13..33e746f 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -933,8 +933,8 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); pPower->SetObjectRank(0, rank); - if ( power <= 1.0f ) modelManager->AddModelReference("power.mod", false, rank); - else modelManager->AddModelReference("atomic.mod", false, rank); + if ( power <= 1.0f ) modelManager->AddModelCopy("power.mod", false, rank); + else modelManager->AddModelCopy("atomic.mod", false, rank); pPower->SetPosition(0, m_object->GetCharacter()->posPower); pPower->CreateCrashSphere(Math::Vector(0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f); -- cgit v1.2.3-1-g7c22 From b50f9ae8b7efe9ae4b198a4f1072a384919c6c08 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Thu, 17 Jan 2013 20:54:35 +0100 Subject: Fixed some clang warnings --- src/object/object.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/object') diff --git a/src/object/object.cpp b/src/object/object.cpp index afa7815..9615866 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -6243,12 +6243,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() -- cgit v1.2.3-1-g7c22 From a937a7b6ec081ab546505e5ab1fcd9b3723a6f4b Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Sun, 27 Jan 2013 11:43:53 +0100 Subject: Changed model min/max to LOD levels --- src/object/auto/autoportico.cpp | 8 ++----- src/object/brain.cpp | 1 + src/object/motion/motionvehicle.cpp | 41 ++++++++++-------------------------- src/object/object.cpp | 42 ++++++++++++++----------------------- 4 files changed, 30 insertions(+), 62 deletions(-) (limited to 'src/object') diff --git a/src/object/auto/autoportico.cpp b/src/object/auto/autoportico.cpp index 3b3bf84..c0be784 100644 --- a/src/object/auto/autoportico.cpp +++ b/src/object/auto/autoportico.cpp @@ -398,7 +398,6 @@ Error CAutoPortico::GetError() void CAutoPortico::UpdateTrackMapping(float left, float right) { Gfx::Material mat; - float limit[2]; int rank; memset( &mat, 0, sizeof(Gfx::Material)); @@ -411,15 +410,12 @@ void CAutoPortico::UpdateTrackMapping(float left, float right) rank = m_object->GetObjectRank(0); - limit[0] = 0.0f; - limit[1] = 1000000.0f; - m_engine->TrackTextureMapping(rank, mat, Gfx::ENG_RSTATE_PART1, "lemt.png", "", - limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X, + Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X, right, 8.0f, 8.0f, 192.0f, 256.0f); m_engine->TrackTextureMapping(rank, mat, Gfx::ENG_RSTATE_PART2, "lemt.png", "", - limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X, + Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X, left, 8.0f, 8.0f, 192.0f, 256.0f); } diff --git a/src/object/brain.cpp b/src/object/brain.cpp index ef7309d..d3c0e0b 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -1947,6 +1947,7 @@ void CBrain::UpdateInterface(float rTime) if ( power == 0 ) { energy = 0.0f; + limit = 0.0f; } else { diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index 33e746f..3c95a27 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -1877,52 +1877,33 @@ bool CMotionVehicle::EventFrameCanoni(const Event &event) void CMotionVehicle::UpdateTrackMapping(float left, float right, ObjectType type) { - Gfx::Material mat; - float limit[4]; - int rRank, lRank, i; + Gfx::Material mat; + mat.diffuse = Gfx::Color(1.0f, 1.0f, 1.0f); // white + mat.ambient = Gfx::Color(0.5f, 0.5f, 0.5f); - memset( &mat, 0, sizeof(Gfx::Material) ); - mat.diffuse.r = 1.0f; - mat.diffuse.g = 1.0f; - mat.diffuse.b = 1.0f; // white - mat.ambient.r = 0.5f; - mat.ambient.g = 0.5f; - mat.ambient.b = 0.5f; + int rRank = m_object->GetObjectRank(6); + int lRank = m_object->GetObjectRank(7); - rRank = m_object->GetObjectRank(6); - lRank = m_object->GetObjectRank(7); - - - if ( type == OBJECT_MOBILEdr ) + if (type == OBJECT_MOBILEdr) { - limit[0] = 0.0f; - limit[1] = 1000000.0f; - limit[2] = limit[1]; - limit[3] = m_engine->GetLimitLOD(1); - m_engine->TrackTextureMapping(rRank, mat, Gfx::ENG_RSTATE_PART1, "drawer.png", "", - limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X, + Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X, right, 1.0f, 8.0f, 192.0f, 256.0f); m_engine->TrackTextureMapping(lRank, mat, Gfx::ENG_RSTATE_PART2, "drawer.png", "", - limit[0], limit[1], Gfx::ENG_TEX_MAPPING_X, + Gfx::LOD_Constant, Gfx::ENG_TEX_MAPPING_X, left, 1.0f, 8.0f, 192.0f, 256.0f); } else { - limit[0] = 0.0f; - limit[1] = m_engine->GetLimitLOD(0); - limit[2] = limit[1]; - limit[3] = m_engine->GetLimitLOD(1); - - for ( i=0 ; i<2 ; i++ ) + for (int i = 0; i < 2; i++) { m_engine->TrackTextureMapping(rRank, mat, Gfx::ENG_RSTATE_PART1, "lemt.png", "", - limit[i*2+0], limit[i*2+1], Gfx::ENG_TEX_MAPPING_X, + (i == 0) ? Gfx::LOD_High : Gfx::LOD_Medium, Gfx::ENG_TEX_MAPPING_X, right, 1.0f, 8.0f, 192.0f, 256.0f); m_engine->TrackTextureMapping(lRank, mat, Gfx::ENG_RSTATE_PART2, "lemt.png", "", - limit[i*2+0], limit[i*2+1], Gfx::ENG_TEX_MAPPING_X, + (i == 0) ? Gfx::LOD_High : Gfx::LOD_Medium, Gfx::ENG_TEX_MAPPING_X, left, 1.0f, 8.0f, 192.0f, 256.0f); } } diff --git a/src/object/object.cpp b/src/object/object.cpp index 9615866..e2830c5 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -5811,21 +5811,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 ) @@ -5833,35 +5828,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); } } -- cgit v1.2.3-1-g7c22 From 6f64770714c20a24a2edfd55777e05a047e61d0e Mon Sep 17 00:00:00 2001 From: erihel Date: Sat, 9 Feb 2013 21:00:07 +0100 Subject: * Fixes to ingame editor * Fixes to editor window. It's now possible to resize, move and press buttons --- src/object/brain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/object') diff --git a/src/object/brain.cpp b/src/object/brain.cpp index d3c0e0b..bc47cb3 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -255,7 +255,7 @@ bool CBrain::EventProcess(const Event &event) if ( m_object->GetSelect() && // robot selected? m_studio != 0 ) // current issue? { - // m_studio->EventProcess(event); + m_studio->EventProcess(event); if ( action == EVENT_OBJECT_PROGRUN ) { -- cgit v1.2.3-1-g7c22 From 551d6c4d95182b8574e9d237fc26400414a609f2 Mon Sep 17 00:00:00 2001 From: PaweX Date: Wed, 13 Feb 2013 02:59:40 +0100 Subject: Additional parameter for function aim(x, y). --- src/object/object.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/object') diff --git a/src/object/object.cpp b/src/object/object.cpp index e2830c5..317775d 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -6617,7 +6617,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 } -- cgit v1.2.3-1-g7c22 From 8658d6da8060cdb741c668d4be1b571ef064d01d Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 13 Feb 2013 16:57:59 +0100 Subject: Added Destroyer from Ceebot-Teen. We need a new icon for it. --- src/object/auto/autodestroyer.cpp | 90 ++++++++++++++++++++++++++++++++++----- src/object/brain.cpp | 10 +++-- src/object/task/taskbuild.cpp | 3 ++ 3 files changed, 89 insertions(+), 14 deletions(-) (limited to 'src/object') diff --git a/src/object/auto/autodestroyer.cpp b/src/object/auto/autodestroyer.cpp index ecf7c94..644071c 100644 --- a/src/object/auto/autodestroyer.cpp +++ b/src/object/auto/autodestroyer.cpp @@ -111,18 +111,39 @@ bool CAutoDestroyer::EventProcess(const Event &event) if ( SearchVehicle() ) { - m_phase = ADEP_WAIT; // still waiting ... - m_progress = 0.0f; - m_speed = 1.0f/0.5f; + if ( m_progress < 20.0f ) { + m_phase = ADEP_WAIT; // still waiting ... + //m_progress = 0.0f; + m_speed = 1.0f/0.5f; + } else { + if ( m_object->GetLock() ) { // If still building... + m_phase = ADEP_WAIT; // still waiting ... + m_progress = 0.0f; + m_speed = 1.0f/0.5f; + } else { + m_sound->Play(SOUND_PSHHH2, m_object->GetPosition(0), 1.0f, 1.0f); + + m_phase = ADEP_DOWN; + m_progress = 0.0f; + m_speed = 1.0f/1.0f; + m_bExplo = false; + } + } } else { - m_sound->Play(SOUND_PSHHH2, m_object->GetPosition(0), 1.0f, 1.0f); - - m_phase = ADEP_DOWN; - m_progress = 0.0f; - m_speed = 1.0f/1.0f; - m_bExplo = false; + if ( m_object->GetLock() ) { // If still building... + m_phase = ADEP_WAIT; // still waiting ... + m_progress = 0.0f; + m_speed = 1.0f/0.5f; + } else { + m_sound->Play(SOUND_PSHHH2, m_object->GetPosition(0), 1.0f, 1.0f); + + m_phase = ADEP_DOWN; + m_progress = 0.0f; + m_speed = 1.0f/1.0f; + m_bExplo = false; + } } } } @@ -243,8 +264,55 @@ CObject* CAutoDestroyer::SearchPlastic() if ( pObj == nullptr ) break; type = pObj->GetType(); - if ( type != OBJECT_SCRAP4 && - type != OBJECT_SCRAP5 ) continue; + //if ( type != OBJECT_SCRAP4 && + // type != OBJECT_SCRAP5 ) continue; + if ( type != OBJECT_FRET && + type != OBJECT_STONE && + type != OBJECT_URANIUM && + type != OBJECT_METAL && + type != OBJECT_POWER && + type != OBJECT_ATOMIC && + type != OBJECT_TNT && + type != OBJECT_SCRAP1 && + type != OBJECT_SCRAP2 && + type != OBJECT_SCRAP3 && + type != OBJECT_SCRAP4 && + type != OBJECT_SCRAP5 && + // Robots: + type != OBJECT_HUMAN && + type != OBJECT_MOBILEfa && + type != OBJECT_MOBILEta && + type != OBJECT_MOBILEwa && + type != OBJECT_MOBILEia && + type != OBJECT_MOBILEfc && + type != OBJECT_MOBILEtc && + type != OBJECT_MOBILEwc && + type != OBJECT_MOBILEic && + type != OBJECT_MOBILEfi && + type != OBJECT_MOBILEti && + type != OBJECT_MOBILEwi && + type != OBJECT_MOBILEii && + type != OBJECT_MOBILEfs && + type != OBJECT_MOBILEts && + type != OBJECT_MOBILEws && + type != OBJECT_MOBILEis && + type != OBJECT_MOBILErt && + type != OBJECT_MOBILErc && + type != OBJECT_MOBILErr && + type != OBJECT_MOBILErs && + type != OBJECT_MOBILEsa && + type != OBJECT_MOBILEtg && + type != OBJECT_MOBILEft && + type != OBJECT_MOBILEtt && + type != OBJECT_MOBILEwt && + type != OBJECT_MOBILEit && + type != OBJECT_MOBILEdr && + type != OBJECT_MOTHER && + type != OBJECT_ANT && + type != OBJECT_SPIDER && + type != OBJECT_BEE && + type != OBJECT_WORM ) continue; + oPos = pObj->GetPosition(0); dist = Math::Distance(oPos, sPos); diff --git a/src/object/brain.cpp b/src/object/brain.cpp index bc47cb3..1405201 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -528,6 +528,10 @@ bool CBrain::EventProcess(const Event &event) { err = StartTaskBuild(OBJECT_INFO); } + if ( action == EVENT_OBJECT_BDESTROYER ) + { + err = StartTaskBuild(OBJECT_DESTROYER); + } if ( action == EVENT_OBJECT_GFLAT ) { @@ -1454,8 +1458,8 @@ bool CBrain::CreateInterface(bool bSelect) pos.x = ox+sx*5.4f; pos.y = oy+sy*0.1f; - pw->CreateButton(pos, ddim, 128+56, EVENT_OBJECT_BXXXX); - DeadInterface(pw, EVENT_OBJECT_BXXXX, false); + pw->CreateButton(pos, ddim, 128+41, EVENT_OBJECT_BDESTROYER); + DeadInterface(pw, EVENT_OBJECT_BDESTROYER, g_build&BUILD_DESTROYER); if ( g_build&BUILD_GFLAT ) { @@ -2181,7 +2185,7 @@ void CBrain::UpdateInterface() EnableInterface(pw, EVENT_OBJECT_BNUCLEAR, bEnable); EnableInterface(pw, EVENT_OBJECT_BPARA, bEnable); EnableInterface(pw, EVENT_OBJECT_BINFO, bEnable); - EnableInterface(pw, EVENT_OBJECT_BXXXX, bEnable); + EnableInterface(pw, EVENT_OBJECT_BDESTROYER,bEnable); } pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_GFLAT)); diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index d82874c..5673ea4 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -98,6 +98,7 @@ bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle) if ( m_type == OBJECT_NUCLEAR ) m_buildingHeight = 40.0f; if ( m_type == OBJECT_PARA ) m_buildingHeight = 68.0f; if ( m_type == OBJECT_INFO ) m_buildingHeight = 19.0f; + if ( m_type == OBJECT_DESTROYER) m_buildingHeight = 35.0f; m_buildingHeight *= 0.25f; m_buildingPos = m_building->GetPosition(0); @@ -578,6 +579,7 @@ Error CTaskBuild::FlatFloor() if ( m_type == OBJECT_NUCLEAR ) radius = 20.0f; if ( m_type == OBJECT_PARA ) radius = 20.0f; if ( m_type == OBJECT_INFO ) radius = 5.0f; + if ( m_type == OBJECT_DESTROYER) radius = 20.0f; if ( radius == 0.0f ) return ERR_GENERIC; center = m_metal->GetPosition(0); @@ -666,6 +668,7 @@ Error CTaskBuild::FlatFloor() type == OBJECT_ENERGY || type == OBJECT_LABO || type == OBJECT_NUCLEAR || + type == OBJECT_DESTROYER|| type == OBJECT_START || type == OBJECT_END || type == OBJECT_INFO || -- cgit v1.2.3-1-g7c22 From 001d37b257b126dd6ef1dced70f94ff3d2806d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Dziwi=C5=84ski?= Date: Sat, 16 Feb 2013 22:37:43 +0100 Subject: CInstanceManager refactoring * removed classes managed by CInstanceManager except for CObject, CPyro, CBrain and CPhysics because of dependencies * refactored instance searching to use existing singleton instances of CApplication, CEngine and CRobotMain and calling their getter functions --- src/object/auto/auto.cpp | 54 ++++++--- src/object/auto/auto.h | 7 +- src/object/auto/autobase.cpp | 14 ++- src/object/auto/autobase.h | 2 +- src/object/auto/autoconvert.cpp | 8 +- src/object/auto/autoconvert.h | 2 +- src/object/auto/autoderrick.cpp | 9 +- src/object/auto/autoderrick.h | 2 +- src/object/auto/autodestroyer.cpp | 7 +- src/object/auto/autodestroyer.h | 2 +- src/object/auto/autoegg.cpp | 11 +- src/object/auto/autoegg.h | 2 +- src/object/auto/autoenergy.cpp | 9 +- src/object/auto/autoenergy.h | 2 +- src/object/auto/autofactory.cpp | 10 +- src/object/auto/autofactory.h | 2 +- src/object/auto/autoflag.cpp | 3 +- src/object/auto/autoflag.h | 2 +- src/object/auto/autohuston.cpp | 3 +- src/object/auto/autohuston.h | 2 +- src/object/auto/autoinfo.cpp | 3 +- src/object/auto/autoinfo.h | 2 +- src/object/auto/autojostle.cpp | 3 +- src/object/auto/autojostle.h | 2 +- src/object/auto/autokid.cpp | 3 +- src/object/auto/autokid.h | 2 +- src/object/auto/autolabo.cpp | 11 +- src/object/auto/autolabo.h | 2 +- src/object/auto/automush.cpp | 4 +- src/object/auto/automush.h | 2 +- src/object/auto/autonest.cpp | 7 +- src/object/auto/autonest.h | 2 +- src/object/auto/autonuclear.cpp | 8 +- src/object/auto/autonuclear.h | 2 +- src/object/auto/autopara.cpp | 6 +- src/object/auto/autopara.h | 2 +- src/object/auto/autoportico.cpp | 3 +- src/object/auto/autoportico.h | 2 +- src/object/auto/autoradar.cpp | 5 +- src/object/auto/autoradar.h | 2 +- src/object/auto/autorepair.cpp | 6 +- src/object/auto/autorepair.h | 2 +- src/object/auto/autoresearch.cpp | 9 +- src/object/auto/autoresearch.h | 2 +- src/object/auto/autoroot.cpp | 4 +- src/object/auto/autoroot.h | 2 +- src/object/auto/autosafe.cpp | 7 +- src/object/auto/autosafe.h | 2 +- src/object/auto/autostation.cpp | 6 +- src/object/auto/autostation.h | 2 +- src/object/auto/autotower.cpp | 7 +- src/object/auto/autotower.h | 2 +- src/object/brain.cpp | 83 +++++++------ src/object/brain.h | 4 +- src/object/mainmovie.cpp | 15 +-- src/object/mainmovie.h | 16 +-- src/object/motion/motion.cpp | 23 ++-- src/object/motion/motion.h | 8 +- src/object/motion/motionant.cpp | 3 +- src/object/motion/motionant.h | 2 +- src/object/motion/motionbee.cpp | 3 +- src/object/motion/motionbee.h | 2 +- src/object/motion/motionhuman.cpp | 3 +- src/object/motion/motionhuman.h | 2 +- src/object/motion/motionmother.cpp | 3 +- src/object/motion/motionmother.h | 2 +- src/object/motion/motionspider.cpp | 3 +- src/object/motion/motionspider.h | 2 +- src/object/motion/motiontoto.cpp | 3 +- src/object/motion/motiontoto.h | 2 +- src/object/motion/motionvehicle.cpp | 5 +- src/object/motion/motionvehicle.h | 2 +- src/object/motion/motionworm.cpp | 3 +- src/object/motion/motionworm.h | 2 +- src/object/object.cpp | 136 +++++++++++---------- src/object/object.h | 7 +- src/object/robotmain.cpp | 227 +++++++++++++++++++++++------------- src/object/robotmain.h | 20 ++-- src/object/task/task.cpp | 31 +++-- src/object/task/task.h | 5 +- src/object/task/taskadvance.cpp | 5 +- src/object/task/taskadvance.h | 3 +- src/object/task/taskbuild.cpp | 25 ++-- src/object/task/taskbuild.h | 2 +- src/object/task/taskfire.cpp | 6 +- src/object/task/taskfire.h | 2 +- src/object/task/taskfireant.cpp | 7 +- src/object/task/taskfireant.h | 2 +- src/object/task/taskflag.cpp | 26 +++-- src/object/task/taskflag.h | 3 +- src/object/task/taskgoto.cpp | 38 ++++-- src/object/task/taskgoto.h | 3 +- src/object/task/taskgungoal.cpp | 4 +- src/object/task/taskgungoal.h | 2 +- src/object/task/taskinfo.cpp | 10 +- src/object/task/taskinfo.h | 2 +- src/object/task/taskmanager.cpp | 48 ++++---- src/object/task/taskmanager.h | 7 +- src/object/task/taskmanip.cpp | 30 +++-- src/object/task/taskmanip.h | 2 +- src/object/task/taskpen.cpp | 8 +- src/object/task/taskpen.h | 2 +- src/object/task/taskrecover.cpp | 17 +-- src/object/task/taskrecover.h | 3 +- src/object/task/taskreset.cpp | 9 +- src/object/task/taskreset.h | 2 +- src/object/task/tasksearch.cpp | 16 ++- src/object/task/tasksearch.h | 2 +- src/object/task/taskshield.cpp | 12 +- src/object/task/taskshield.h | 3 +- src/object/task/taskspiderexplo.cpp | 8 +- src/object/task/taskspiderexplo.h | 2 +- src/object/task/tasktake.cpp | 22 ++-- src/object/task/tasktake.h | 2 +- src/object/task/taskterraform.cpp | 19 +-- src/object/task/taskterraform.h | 3 +- src/object/task/taskturn.cpp | 4 +- src/object/task/taskturn.h | 2 +- src/object/task/taskwait.cpp | 4 +- src/object/task/taskwait.h | 2 +- 120 files changed, 697 insertions(+), 566 deletions(-) (limited to 'src/object') diff --git a/src/object/auto/auto.cpp b/src/object/auto/auto.cpp index 4003193..3d88012 100644 --- a/src/object/auto/auto.cpp +++ b/src/object/auto/auto.cpp @@ -18,8 +18,13 @@ #include "object/auto/auto.h" +#include "app/app.h" + +#include "common/event.h" #include "common/iman.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/gauge.h" #include "ui/window.h" @@ -30,26 +35,24 @@ // Object's constructor. -CAuto::CAuto(CInstanceManager* iMan, CObject* object) +CAuto::CAuto(CObject* object) { - m_iMan = iMan; - m_iMan->AddInstance(CLASS_AUTO, this, 100); + m_iMan = CInstanceManager::GetInstancePointer(); m_object = object; - m_event = static_cast< CEventQueue* >(m_iMan->SearchInstance(CLASS_EVENT)); - m_engine = static_cast< Gfx::CEngine* >(m_iMan->SearchInstance(CLASS_ENGINE)); - m_particle = static_cast< Gfx::CParticle* >(m_iMan->SearchInstance(CLASS_PARTICULE)); - m_lightMan = static_cast< Gfx::CLightManager* >(m_iMan->SearchInstance(CLASS_LIGHT)); - m_terrain = static_cast< Gfx::CTerrain* >(m_iMan->SearchInstance(CLASS_TERRAIN)); - m_water = static_cast< Gfx::CWater* >(m_iMan->SearchInstance(CLASS_WATER)); - m_cloud = static_cast< Gfx::CCloud* >(m_iMan->SearchInstance(CLASS_CLOUD)); - m_planet = static_cast< Gfx::CPlanet* >(m_iMan->SearchInstance(CLASS_PLANET)); - m_lightning = static_cast< Gfx::CLightning* >(m_iMan->SearchInstance(CLASS_BLITZ)); - m_camera = static_cast< Gfx::CCamera* >(m_iMan->SearchInstance(CLASS_CAMERA)); - m_interface = static_cast< Ui::CInterface* >(m_iMan->SearchInstance(CLASS_INTERFACE)); - m_main = static_cast< CRobotMain* >(m_iMan->SearchInstance(CLASS_MAIN)); - m_displayText = static_cast< Ui::CDisplayText* >(m_iMan->SearchInstance(CLASS_DISPLAYTEXT)); - m_sound = static_cast< CSoundInterface* >(m_iMan->SearchInstance(CLASS_SOUND)); + m_engine = Gfx::CEngine::GetInstancePointer(); + m_main = CRobotMain::GetInstancePointer(); + m_eventQueue = CApplication::GetInstancePointer()->GetEventQueue(); + m_sound = CApplication::GetInstancePointer()->GetSound(); + m_particle = m_engine->GetParticle(); + m_terrain = m_engine->GetTerrain(); + m_water = m_engine->GetWater(); + m_cloud = m_engine->GetCloud(); + m_planet = m_engine->GetPlanet(); + m_lightning = m_engine->GetLightning(); + m_camera = m_main->GetCamera(); + m_interface = m_main->GetInterface(); + m_displayText = m_main->GetDisplayText(); m_type = m_object->GetType(); m_time = 0.0f; @@ -65,7 +68,22 @@ CAuto::CAuto(CInstanceManager* iMan, CObject* object) CAuto::~CAuto() { - m_iMan->DeleteInstance(CLASS_AUTO, this); + m_iMan = nullptr; + + m_object = nullptr; + m_engine = nullptr; + m_main = nullptr; + m_eventQueue = nullptr; + m_sound = nullptr; + m_particle = nullptr; + m_terrain = nullptr; + m_water = nullptr; + m_cloud = nullptr; + m_planet = nullptr; + m_lightning = nullptr; + m_camera = nullptr; + m_interface = nullptr; + m_displayText = nullptr; } diff --git a/src/object/auto/auto.h b/src/object/auto/auto.h index 2194924..53ccdf9 100644 --- a/src/object/auto/auto.h +++ b/src/object/auto/auto.h @@ -50,7 +50,7 @@ class CLightning; class CAuto { public: - CAuto(CInstanceManager* iMan, CObject* object); + CAuto(CObject* object); virtual ~CAuto(); virtual void DeleteObject(bool bAll=false); @@ -88,11 +88,10 @@ protected: void UpdateInterface(float rTime); protected: - CInstanceManager* m_iMan; - CEventQueue* m_event; + CInstanceManager* m_iMan; // TODO: to be removed + CEventQueue* m_eventQueue; Gfx::CEngine* m_engine; Gfx::CParticle* m_particle; - Gfx::CLightManager* m_lightMan; Gfx::CTerrain* m_terrain; Gfx::CWater* m_water; Gfx::CCloud* m_cloud; diff --git a/src/object/auto/autobase.cpp b/src/object/auto/autobase.cpp index 8370517..cb7f04c 100644 --- a/src/object/auto/autobase.cpp +++ b/src/object/auto/autobase.cpp @@ -20,13 +20,18 @@ #include "object/auto/autobase.h" #include "common/iman.h" + #include "graphics/engine/terrain.h" #include "graphics/engine/cloud.h" #include "graphics/engine/planet.h" #include "graphics/engine/lightning.h" + #include "math/geometry.h" + #include "object/robotmain.h" + #include "physics/physics.h" + #include "ui/interface.h" #include "ui/window.h" #include "ui/displaytext.h" @@ -47,8 +52,7 @@ const float BASE_TRANSIT_TIME = 15.0f; // transit duration // Object's constructor. -CAutoBase::CAutoBase(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoBase::CAutoBase(CObject* object) : CAuto(object) { m_fogStart = m_engine->GetFogStart(); m_deepView = m_engine->GetDeepView(); @@ -329,7 +333,7 @@ begin: m_main->DeselectAll(); newEvent.type = EVENT_UPDINTERFACE; - m_event->AddEvent(newEvent); + m_eventQueue->AddEvent(newEvent); m_camera->SetType(Gfx::CAM_TYPE_SCRIPT); @@ -843,7 +847,7 @@ begin: { m_soundChannel = -1; newEvent.type = EVENT_WIN; - m_event->AddEvent(newEvent); + m_eventQueue->AddEvent(newEvent); m_phase = ABP_WAIT; m_progress = 0.0f; @@ -1176,7 +1180,7 @@ bool CAutoBase::Abort() m_phase == ABP_TAKEOFF ) // off? { newEvent.type = EVENT_WIN; - m_event->AddEvent(newEvent); + m_eventQueue->AddEvent(newEvent); } } diff --git a/src/object/auto/autobase.h b/src/object/auto/autobase.h index 439d414..422f340 100644 --- a/src/object/auto/autobase.h +++ b/src/object/auto/autobase.h @@ -65,7 +65,7 @@ enum AutoBasePhase class CAutoBase : public CAuto { public: - CAutoBase(CInstanceManager* iMan, CObject* object); + CAutoBase(CObject* object); ~CAutoBase(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoconvert.cpp b/src/object/auto/autoconvert.cpp index a550697..7281ed7 100644 --- a/src/object/auto/autoconvert.cpp +++ b/src/object/auto/autoconvert.cpp @@ -19,8 +19,11 @@ #include "object/auto/autoconvert.h" #include "common/iman.h" + #include "math/geometry.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" #include "ui/displaytext.h" @@ -31,8 +34,7 @@ // Object's constructor. -CAutoConvert::CAutoConvert(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoConvert::CAutoConvert(CObject* object) : CAuto(object) { Init(); m_phase = ACP_STOP; @@ -509,7 +511,7 @@ void CAutoConvert::CreateMetal() pos = m_object->GetPosition(0); angle = m_object->GetAngleY(0); - fret = new CObject(m_iMan); + fret = new CObject(); if ( !fret->CreateResource(pos, angle, OBJECT_METAL) ) { delete fret; diff --git a/src/object/auto/autoconvert.h b/src/object/auto/autoconvert.h index b21690f..56591f7 100644 --- a/src/object/auto/autoconvert.h +++ b/src/object/auto/autoconvert.h @@ -38,7 +38,7 @@ enum AutoConvertPhase class CAutoConvert : public CAuto { public: - CAutoConvert(CInstanceManager* iMan, CObject* object); + CAutoConvert(CObject* object); ~CAutoConvert(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoderrick.cpp b/src/object/auto/autoderrick.cpp index 3578c0d..260edcb 100644 --- a/src/object/auto/autoderrick.cpp +++ b/src/object/auto/autoderrick.cpp @@ -19,9 +19,13 @@ #include "object/auto/autoderrick.h" #include "common/iman.h" + #include "graphics/engine/terrain.h" + #include "math/geometry.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" #include "ui/displaytext.h" @@ -38,8 +42,7 @@ const float DERRICK_DELAYu = 30.0f; // same, but for uranium // Object's constructor. -CAutoDerrick::CAutoDerrick(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoDerrick::CAutoDerrick(CObject* object) : CAuto(object) { Init(); m_phase = ADP_WAIT; // paused until the first Init () @@ -528,7 +531,7 @@ void CAutoDerrick::CreateFret(Math::Vector pos, float angle, ObjectType type, { CObject* fret; - fret = new CObject(m_iMan); + fret = new CObject(); if ( !fret->CreateResource(pos, angle, type) ) { delete fret; diff --git a/src/object/auto/autoderrick.h b/src/object/auto/autoderrick.h index b52f93b..81ed8b4 100644 --- a/src/object/auto/autoderrick.h +++ b/src/object/auto/autoderrick.h @@ -38,7 +38,7 @@ enum AutoDerrickPhase class CAutoDerrick : public CAuto { public: - CAutoDerrick(CInstanceManager* iMan, CObject* object); + CAutoDerrick(CObject* object); ~CAutoDerrick(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autodestroyer.cpp b/src/object/auto/autodestroyer.cpp index 644071c..b62a45a 100644 --- a/src/object/auto/autodestroyer.cpp +++ b/src/object/auto/autodestroyer.cpp @@ -19,7 +19,9 @@ #include "object/auto/autodestroyer.h" #include "common/iman.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" @@ -29,8 +31,7 @@ // Object's constructor. -CAutoDestroyer::CAutoDestroyer(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoDestroyer::CAutoDestroyer(CObject* object) : CAuto(object) { Init(); m_phase = ADEP_WAIT; // paused until the first Init () @@ -156,7 +157,7 @@ bool CAutoDestroyer::EventProcess(const Event &event) scrap = SearchPlastic(); if ( scrap != nullptr ) { - pyro = new Gfx::CPyro(m_iMan); + pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_FRAGT, scrap); } m_bExplo = true; diff --git a/src/object/auto/autodestroyer.h b/src/object/auto/autodestroyer.h index 50858d3..26981c3 100644 --- a/src/object/auto/autodestroyer.h +++ b/src/object/auto/autodestroyer.h @@ -37,7 +37,7 @@ enum AutoDestroyerPhase class CAutoDestroyer : public CAuto { public: - CAutoDestroyer(CInstanceManager* iMan, CObject* object); + CAutoDestroyer(CObject* object); ~CAutoDestroyer(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoegg.cpp b/src/object/auto/autoegg.cpp index 5b90ef9..e510ca6 100644 --- a/src/object/auto/autoegg.cpp +++ b/src/object/auto/autoegg.cpp @@ -18,8 +18,10 @@ #include "object/auto/autoegg.h" -#include "math/geometry.h" #include "common/iman.h" + +#include "math/geometry.h" + #include "script/cmdtoken.h" #include @@ -28,8 +30,7 @@ // Object's constructor. -CAutoEgg::CAutoEgg(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoEgg::CAutoEgg(CObject* object) : CAuto(object) { m_type = OBJECT_NULL; m_value = 0.0f; @@ -174,7 +175,7 @@ bool CAutoEgg::EventProcess(const Event &event) m_progress += event.rTime*m_speed; if ( m_progress < 1.0f ) return true; - alien = new CObject(m_iMan); + alien = new CObject(); if ( !alien->CreateInsect(m_object->GetPosition(0), m_object->GetAngleY(0), m_type) ) { delete alien; @@ -236,7 +237,7 @@ Error CAutoEgg::IsEnded() { if ( m_progress < 1.0f ) return ERR_CONTINUE; - pyro = new Gfx::CPyro(m_iMan); + pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_EGG, m_object); // exploding egg alien->SetZoom(0, 1.0f); // this is a big boy now diff --git a/src/object/auto/autoegg.h b/src/object/auto/autoegg.h index fec07a6..00725db 100644 --- a/src/object/auto/autoegg.h +++ b/src/object/auto/autoegg.h @@ -37,7 +37,7 @@ enum AutoEggPhase class CAutoEgg : public CAuto { public: - CAutoEgg(CInstanceManager* iMan, CObject* object); + CAutoEgg(CObject* object); ~CAutoEgg(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoenergy.cpp b/src/object/auto/autoenergy.cpp index c63dede..a0b4d85 100644 --- a/src/object/auto/autoenergy.cpp +++ b/src/object/auto/autoenergy.cpp @@ -19,9 +19,13 @@ #include "object/auto/autoenergy.h" #include "common/iman.h" + #include "graphics/engine/terrain.h" + #include "math/geometry.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/gauge.h" #include "ui/window.h" @@ -39,8 +43,7 @@ const float ENERGY_DELAY = 12.0f; // processing time // Object's constructor. -CAutoEnergy::CAutoEnergy(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoEnergy::CAutoEnergy(CObject* object) : CAuto(object) { m_partiSphere = -1; Init(); @@ -461,7 +464,7 @@ void CAutoEnergy::CreatePower() pos = m_object->GetPosition(0); angle = m_object->GetAngleY(0); - power = new CObject(m_iMan); + power = new CObject(); if ( !power->CreateResource(pos, angle, OBJECT_POWER) ) { delete power; diff --git a/src/object/auto/autoenergy.h b/src/object/auto/autoenergy.h index 53d47b6..d3ed5fe 100644 --- a/src/object/auto/autoenergy.h +++ b/src/object/auto/autoenergy.h @@ -38,7 +38,7 @@ enum AutoEnergyPhase class CAutoEnergy : public CAuto { public: - CAutoEnergy(CInstanceManager* iMan, CObject* object); + CAutoEnergy(CObject* object); ~CAutoEnergy(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index 0789443..82877c6 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -20,10 +20,15 @@ #include "common/global.h" #include "common/iman.h" + #include "math/geometry.h" + #include "object/robotmain.h" + #include "physics/physics.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" #include "ui/displaytext.h" @@ -35,8 +40,7 @@ // Object's constructor. -CAutoFactory::CAutoFactory(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoFactory::CAutoFactory(CObject* object) : CAuto(object) { Init(); m_type = OBJECT_MOBILEws; @@ -632,7 +636,7 @@ bool CAutoFactory::CreateVehicle() } pos = Transform(*mat, pos); - vehicle = new CObject(m_iMan); + vehicle = new CObject(); if ( !vehicle->CreateVehicle(pos, angle, m_type, -1.0f, false, false) ) { delete vehicle; diff --git a/src/object/auto/autofactory.h b/src/object/auto/autofactory.h index f62080d..7c5013d 100644 --- a/src/object/auto/autofactory.h +++ b/src/object/auto/autofactory.h @@ -40,7 +40,7 @@ enum AutoFactoryPhase class CAutoFactory : public CAuto { public: - CAutoFactory(CInstanceManager* iMan, CObject* object); + CAutoFactory(CObject* object); ~CAutoFactory(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoflag.cpp b/src/object/auto/autoflag.cpp index c2dec5c..936546d 100644 --- a/src/object/auto/autoflag.cpp +++ b/src/object/auto/autoflag.cpp @@ -37,8 +37,7 @@ static float g_flag3 = 2.00f; // Object's constructor. -CAutoFlag::CAutoFlag(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoFlag::CAutoFlag(CObject* object) : CAuto(object) { Init(); } diff --git a/src/object/auto/autoflag.h b/src/object/auto/autoflag.h index 3c6cf99..c3fd35a 100644 --- a/src/object/auto/autoflag.h +++ b/src/object/auto/autoflag.h @@ -27,7 +27,7 @@ class CAutoFlag : public CAuto { public: - CAutoFlag(CInstanceManager* iMan, CObject* object); + CAutoFlag(CObject* object); ~CAutoFlag(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autohuston.cpp b/src/object/auto/autohuston.cpp index 1b6778d..80f9185 100644 --- a/src/object/auto/autohuston.cpp +++ b/src/object/auto/autohuston.cpp @@ -26,8 +26,7 @@ // Object's constructor. -CAutoHuston::CAutoHuston(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoHuston::CAutoHuston(CObject* object) : CAuto(object) { Math::Vector pos; int i; diff --git a/src/object/auto/autohuston.h b/src/object/auto/autohuston.h index 27b016b..f99876a 100644 --- a/src/object/auto/autohuston.h +++ b/src/object/auto/autohuston.h @@ -42,7 +42,7 @@ const int HUSTONMAXLENS = 20; class CAutoHuston : public CAuto { public: - CAutoHuston(CInstanceManager* iMan, CObject* object); + CAutoHuston(CObject* object); ~CAutoHuston(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoinfo.cpp b/src/object/auto/autoinfo.cpp index 1245034..56c21d2 100644 --- a/src/object/auto/autoinfo.cpp +++ b/src/object/auto/autoinfo.cpp @@ -30,8 +30,7 @@ // Object's constructor. -CAutoInfo::CAutoInfo(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoInfo::CAutoInfo(CObject* object) : CAuto(object) { Init(); } diff --git a/src/object/auto/autoinfo.h b/src/object/auto/autoinfo.h index 30481bb..41b74d3 100644 --- a/src/object/auto/autoinfo.h +++ b/src/object/auto/autoinfo.h @@ -37,7 +37,7 @@ enum AutoInfoPhase class CAutoInfo : public CAuto { public: - CAutoInfo(CInstanceManager* iMan, CObject* object); + CAutoInfo(CObject* object); ~CAutoInfo(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autojostle.cpp b/src/object/auto/autojostle.cpp index 788b562..11952c2 100644 --- a/src/object/auto/autojostle.cpp +++ b/src/object/auto/autojostle.cpp @@ -23,8 +23,7 @@ // Object's constructor. -CAutoJostle::CAutoJostle(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoJostle::CAutoJostle(CObject* object) : CAuto(object) { Init(); } diff --git a/src/object/auto/autojostle.h b/src/object/auto/autojostle.h index c156893..7b700ad 100644 --- a/src/object/auto/autojostle.h +++ b/src/object/auto/autojostle.h @@ -27,7 +27,7 @@ class CAutoJostle : public CAuto { public: - CAutoJostle(CInstanceManager* iMan, CObject* object); + CAutoJostle(CObject* object); ~CAutoJostle(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autokid.cpp b/src/object/auto/autokid.cpp index 64cd39a..a9f86b0 100644 --- a/src/object/auto/autokid.cpp +++ b/src/object/auto/autokid.cpp @@ -26,8 +26,7 @@ // Object's constructor. -CAutoKid::CAutoKid(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoKid::CAutoKid(CObject* object) : CAuto(object) { m_soundChannel = -1; Init(); diff --git a/src/object/auto/autokid.h b/src/object/auto/autokid.h index 3e2fba7..19836a7 100644 --- a/src/object/auto/autokid.h +++ b/src/object/auto/autokid.h @@ -27,7 +27,7 @@ class CAutoKid : public CAuto { public: - CAutoKid(CInstanceManager* iMan, CObject* object); + CAutoKid(CObject* object); ~CAutoKid(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autolabo.cpp b/src/object/auto/autolabo.cpp index 70bcc5e..6984fd6 100644 --- a/src/object/auto/autolabo.cpp +++ b/src/object/auto/autolabo.cpp @@ -20,9 +20,13 @@ #include "common/global.h" #include "common/misc.h" + #include "math/geometry.h" + #include "object/robotmain.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" #include "ui/displaytext.h" @@ -38,8 +42,7 @@ const float LABO_DELAY = 20.0f; // duration of the analysis // Object's constructor. -CAutoLabo::CAutoLabo(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) + CAutoLabo::CAutoLabo(CObject* object) : CAuto(object) { int i; @@ -543,8 +546,8 @@ void CAutoLabo::SetResearch(EventType event) m_main->WriteFreeParam(); Event newEvent(EVENT_UPDINTERFACE); -// m_event->MakeEvent(newEvent, EVENT_UPDINTERFACE); - m_event->AddEvent(newEvent); +// m_eventQueue->MakeEvent(newEvent, EVENT_UPDINTERFACE); + m_eventQueue->AddEvent(newEvent); UpdateInterface(); } diff --git a/src/object/auto/autolabo.h b/src/object/auto/autolabo.h index 8225462..b61e8e3 100644 --- a/src/object/auto/autolabo.h +++ b/src/object/auto/autolabo.h @@ -41,7 +41,7 @@ enum AutoLaboPhase class CAutoLabo : public CAuto { public: - CAutoLabo(CInstanceManager* iMan, CObject* object); + CAutoLabo(CObject* object); ~CAutoLabo(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/automush.cpp b/src/object/auto/automush.cpp index cb94590..e97e2a1 100644 --- a/src/object/auto/automush.cpp +++ b/src/object/auto/automush.cpp @@ -19,6 +19,7 @@ #include "object/auto/automush.h" #include "common/iman.h" + #include "script/cmdtoken.h" @@ -28,8 +29,7 @@ // Object's constructor. -CAutoMush::CAutoMush(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) + CAutoMush::CAutoMush(CObject* object) : CAuto(object) { Init(); } diff --git a/src/object/auto/automush.h b/src/object/auto/automush.h index 245393a..1697c5a 100644 --- a/src/object/auto/automush.h +++ b/src/object/auto/automush.h @@ -38,7 +38,7 @@ enum AutoMushPhase class CAutoMush : public CAuto { public: - CAutoMush(CInstanceManager* iMan, CObject* object); + CAutoMush(CObject* object); ~CAutoMush(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autonest.cpp b/src/object/auto/autonest.cpp index 99927bd..1cf13d6 100644 --- a/src/object/auto/autonest.cpp +++ b/src/object/auto/autonest.cpp @@ -19,7 +19,9 @@ #include "object/auto/autonest.h" #include "common/iman.h" + #include "graphics/engine/terrain.h" + #include "script/cmdtoken.h" #include @@ -28,8 +30,7 @@ // Object's constructor. -CAutoNest::CAutoNest(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) + CAutoNest::CAutoNest(CObject* object) : CAuto(object) { Init(); } @@ -178,7 +179,7 @@ void CAutoNest::CreateFret(Math::Vector pos, float angle, ObjectType type) { CObject* fret; - fret = new CObject(m_iMan); + fret = new CObject(); if ( !fret->CreateResource(pos, angle, type) ) { delete fret; diff --git a/src/object/auto/autonest.h b/src/object/auto/autonest.h index 1009457..4d734a8 100644 --- a/src/object/auto/autonest.h +++ b/src/object/auto/autonest.h @@ -35,7 +35,7 @@ enum AutoNestPhase class CAutoNest : public CAuto { public: - CAutoNest(CInstanceManager* iMan, CObject* object); + CAutoNest(CObject* object); ~CAutoNest(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autonuclear.cpp b/src/object/auto/autonuclear.cpp index 375acf0..75bfb45 100644 --- a/src/object/auto/autonuclear.cpp +++ b/src/object/auto/autonuclear.cpp @@ -19,8 +19,11 @@ #include "object/auto/autonuclear.h" #include "common/iman.h" + #include "math/geometry.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" #include "ui/displaytext.h" @@ -36,8 +39,7 @@ const float NUCLEAR_DELAY = 30.0f; // duration of the generation // Object's constructor. -CAutoNuclear::CAutoNuclear(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoNuclear::CAutoNuclear(CObject* object) : CAuto(object) { m_channelSound = -1; Init(); @@ -396,7 +398,7 @@ void CAutoNuclear::CreatePower() pos = m_object->GetPosition(0); angle = m_object->GetAngleY(0); - power = new CObject(m_iMan); + power = new CObject(); if ( !power->CreateResource(pos, angle, OBJECT_ATOMIC) ) { delete power; diff --git a/src/object/auto/autonuclear.h b/src/object/auto/autonuclear.h index 06a99af..5b01bba 100644 --- a/src/object/auto/autonuclear.h +++ b/src/object/auto/autonuclear.h @@ -38,7 +38,7 @@ enum AutoNuclearPhase class CAutoNuclear : public CAuto { public: - CAutoNuclear(CInstanceManager* iMan, CObject* object); + CAutoNuclear(CObject* object); ~CAutoNuclear(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autopara.cpp b/src/object/auto/autopara.cpp index a3082f5..ad6517b 100644 --- a/src/object/auto/autopara.cpp +++ b/src/object/auto/autopara.cpp @@ -20,8 +20,11 @@ #include "common/iman.h" + #include "math/geometry.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" @@ -32,8 +35,7 @@ // Object's constructor. -CAutoPara::CAutoPara(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoPara::CAutoPara(CObject* object) : CAuto(object) { m_channelSound = -1; Init(); diff --git a/src/object/auto/autopara.h b/src/object/auto/autopara.h index 10a33a8..1f0b805 100644 --- a/src/object/auto/autopara.h +++ b/src/object/auto/autopara.h @@ -36,7 +36,7 @@ enum AutoParaPhase class CAutoPara : public CAuto { public: - CAutoPara(CInstanceManager* iMan, CObject* object); + CAutoPara(CObject* object); ~CAutoPara(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoportico.cpp b/src/object/auto/autoportico.cpp index c0be784..1646874 100644 --- a/src/object/auto/autoportico.cpp +++ b/src/object/auto/autoportico.cpp @@ -55,8 +55,7 @@ float Progress(float a, float b, float progress) // Object's constructor. -CAutoPortico::CAutoPortico(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoPortico::CAutoPortico(CObject* object) : CAuto(object) { Init(); m_phase = APOP_WAIT; diff --git a/src/object/auto/autoportico.h b/src/object/auto/autoportico.h index c211d37..0aa580f 100644 --- a/src/object/auto/autoportico.h +++ b/src/object/auto/autoportico.h @@ -40,7 +40,7 @@ enum AutoPorticoPhase class CAutoPortico : public CAuto { public: - CAutoPortico(CInstanceManager* iMan, CObject* object); + CAutoPortico(CObject* object); ~CAutoPortico(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoradar.cpp b/src/object/auto/autoradar.cpp index 4214d17..1a10aa7 100644 --- a/src/object/auto/autoradar.cpp +++ b/src/object/auto/autoradar.cpp @@ -19,7 +19,9 @@ #include "object/auto/autoradar.h" #include "common/iman.h" + #include "math/geometry.h" + #include "ui/interface.h" #include "ui/window.h" #include "ui/gauge.h" @@ -29,8 +31,7 @@ // Object's constructor. -CAutoRadar::CAutoRadar(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoRadar::CAutoRadar(CObject* object) : CAuto(object) { Init(); m_phase = ARAP_WAIT; diff --git a/src/object/auto/autoradar.h b/src/object/auto/autoradar.h index e2c9df5..86833f9 100644 --- a/src/object/auto/autoradar.h +++ b/src/object/auto/autoradar.h @@ -37,7 +37,7 @@ enum AutoRadarPhase class CAutoRadar : public CAuto { public: - CAutoRadar(CInstanceManager* iMan, CObject* object); + CAutoRadar(CObject* object); ~CAutoRadar(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autorepair.cpp b/src/object/auto/autorepair.cpp index cf4f33e..95b6cc8 100644 --- a/src/object/auto/autorepair.cpp +++ b/src/object/auto/autorepair.cpp @@ -19,8 +19,11 @@ #include "object/auto/autorepair.h" #include "common/iman.h" + #include "physics/physics.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" @@ -30,8 +33,7 @@ // Object's constructor. -CAutoRepair::CAutoRepair(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoRepair::CAutoRepair(CObject* object) : CAuto(object) { Init(); m_phase = ARP_WAIT; // paused until the first Init () diff --git a/src/object/auto/autorepair.h b/src/object/auto/autorepair.h index e8bb0b1..31a3c65 100644 --- a/src/object/auto/autorepair.h +++ b/src/object/auto/autorepair.h @@ -38,7 +38,7 @@ enum AutoRepairPhase class CAutoRepair : public CAuto { public: - CAutoRepair(CInstanceManager* iMan, CObject* object); + CAutoRepair(CObject* object); ~CAutoRepair(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoresearch.cpp b/src/object/auto/autoresearch.cpp index 9f423ec..3c32307 100644 --- a/src/object/auto/autoresearch.cpp +++ b/src/object/auto/autoresearch.cpp @@ -19,9 +19,13 @@ #include "object/auto/autoresearch.h" #include "common/global.h" + #include "math/geometry.h" + #include "object/robotmain.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/gauge.h" #include "ui/window.h" @@ -37,8 +41,7 @@ const float SEARCH_TIME = 30.0f; // duration of a research // Object's constructor. -CAutoResearch::CAutoResearch(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoResearch::CAutoResearch(CObject* object) : CAuto(object) { int i; @@ -488,7 +491,7 @@ void CAutoResearch::SetResearch(EventType event) m_main->WriteFreeParam(); Event newEvent(EVENT_UPDINTERFACE); - m_event->AddEvent(newEvent); + m_eventQueue->AddEvent(newEvent); UpdateInterface(); } diff --git a/src/object/auto/autoresearch.h b/src/object/auto/autoresearch.h index a838e64..6c804ef 100644 --- a/src/object/auto/autoresearch.h +++ b/src/object/auto/autoresearch.h @@ -35,7 +35,7 @@ enum AutoResearchPhase class CAutoResearch : public CAuto { public: - CAutoResearch(CInstanceManager* iMan, CObject* object); + CAutoResearch(CObject* object); ~CAutoResearch(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autoroot.cpp b/src/object/auto/autoroot.cpp index 196ed5d..a390e90 100644 --- a/src/object/auto/autoroot.cpp +++ b/src/object/auto/autoroot.cpp @@ -19,6 +19,7 @@ #include "graphics/engine/particle.h" #include "graphics/engine/terrain.h" + #include "math/geometry.h" #include @@ -26,8 +27,7 @@ // Object's constructor. -CAutoRoot::CAutoRoot(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoRoot::CAutoRoot(CObject* object) : CAuto(object) { Init(); } diff --git a/src/object/auto/autoroot.h b/src/object/auto/autoroot.h index d80abe8..3eb906c 100644 --- a/src/object/auto/autoroot.h +++ b/src/object/auto/autoroot.h @@ -27,7 +27,7 @@ class CAutoRoot : public CAuto { public: - CAutoRoot(CInstanceManager* iMan, CObject* object); + CAutoRoot(CObject* object); ~CAutoRoot(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autosafe.cpp b/src/object/auto/autosafe.cpp index e89acea..fc83400 100644 --- a/src/object/auto/autosafe.cpp +++ b/src/object/auto/autosafe.cpp @@ -19,9 +19,13 @@ #include "object/auto/autosafe.h" #include "common/iman.h" + #include "math/geometry.h" + #include "object/robotmain.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/window.h" @@ -34,8 +38,7 @@ const float OPEN_DELAY = 8.0f; // duration of opening // Object's constructor. -CAutoSafe::CAutoSafe(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoSafe::CAutoSafe(CObject* object) : CAuto(object) { int i; diff --git a/src/object/auto/autosafe.h b/src/object/auto/autosafe.h index 3c0bcce..b575b4e 100644 --- a/src/object/auto/autosafe.h +++ b/src/object/auto/autosafe.h @@ -36,7 +36,7 @@ enum AutoSafePhase class CAutoSafe : public CAuto { public: - CAutoSafe(CInstanceManager* iMan, CObject* object); + CAutoSafe(CObject* object); ~CAutoSafe(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autostation.cpp b/src/object/auto/autostation.cpp index e99ae4b..a2f5b6b 100644 --- a/src/object/auto/autostation.cpp +++ b/src/object/auto/autostation.cpp @@ -19,9 +19,12 @@ #include "object/auto/autostation.h" #include "common/iman.h" + #include "graphics/engine/particle.h" #include "graphics/engine/terrain.h" + #include "math/geometry.h" + #include "ui/interface.h" #include "ui/gauge.h" #include "ui/window.h" @@ -31,8 +34,7 @@ // Object's constructor. -CAutoStation::CAutoStation(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoStation::CAutoStation(CObject* object) : CAuto(object) { Init(); } diff --git a/src/object/auto/autostation.h b/src/object/auto/autostation.h index cb8be2b..d8a37b4 100644 --- a/src/object/auto/autostation.h +++ b/src/object/auto/autostation.h @@ -27,7 +27,7 @@ class CAutoStation : public CAuto { public: - CAutoStation(CInstanceManager* iMan, CObject* object); + CAutoStation(CObject* object); ~CAutoStation(); void DeleteObject(bool bAll=false); diff --git a/src/object/auto/autotower.cpp b/src/object/auto/autotower.cpp index 84dcd85..e3b06cf 100644 --- a/src/object/auto/autotower.cpp +++ b/src/object/auto/autotower.cpp @@ -19,9 +19,13 @@ #include "object/auto/autotower.h" #include "common/iman.h" + #include "math/geometry.h" + #include "physics/physics.h" + #include "script/cmdtoken.h" + #include "ui/interface.h" #include "ui/displaytext.h" #include "ui/window.h" @@ -37,8 +41,7 @@ const float ENERGY_FIRE = 0.125f; // energy consumed by fire // Object's constructor. -CAutoTower::CAutoTower(CInstanceManager* iMan, CObject* object) - : CAuto(iMan, object) +CAutoTower::CAutoTower(CObject* object) : CAuto(object) { int i; diff --git a/src/object/auto/autotower.h b/src/object/auto/autotower.h index b29ba85..d219fb5 100644 --- a/src/object/auto/autotower.h +++ b/src/object/auto/autotower.h @@ -38,7 +38,7 @@ enum AutoTowerPhase class CAutoTower : public CAuto { public: - CAutoTower(CInstanceManager* iMan, CObject* object); + CAutoTower(CObject* object); ~CAutoTower(); void DeleteObject(bool bAll=false); diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 1405201..babb38d 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -17,8 +17,10 @@ #include "object/brain.h" -#include "common/misc.h" +#include "app/app.h" + #include "common/iman.h" +#include "common/misc.h" #include "graphics/core/color.h" #include "graphics/engine/terrain.h" @@ -47,28 +49,25 @@ const int MAXTRACERECORD = 1000; // Object's constructor. -CBrain::CBrain(CInstanceManager* iMan, CObject* object) +CBrain::CBrain(CObject* object) { - int i; - - m_iMan = iMan; - m_iMan->AddInstance(CLASS_BRAIN, this, 100); + CInstanceManager::GetInstancePointer()->AddInstance(CLASS_BRAIN, this, 100); m_object = object; - m_engine = static_cast(m_iMan->SearchInstance(CLASS_ENGINE)); - m_terrain = static_cast(m_iMan->SearchInstance(CLASS_TERRAIN)); - m_water = static_cast(m_iMan->SearchInstance(CLASS_WATER)); - m_camera = static_cast(m_iMan->SearchInstance(CLASS_CAMERA)); - m_interface = static_cast(m_iMan->SearchInstance(CLASS_INTERFACE)); - m_displayText = static_cast(m_iMan->SearchInstance(CLASS_DISPLAYTEXT)); - m_main = static_cast(m_iMan->SearchInstance(CLASS_MAIN)); - m_sound = static_cast(m_iMan->SearchInstance(CLASS_SOUND)); - m_particle = static_cast(m_iMan->SearchInstance(CLASS_PARTICULE)); - m_physics = 0; - m_motion = 0; - m_primaryTask = 0; - m_secondaryTask = 0; - m_studio = 0; + m_engine = Gfx::CEngine::GetInstancePointer(); + m_water = m_engine->GetWater(); + m_particle = m_engine->GetParticle(); + m_main = CRobotMain::GetInstancePointer(); + m_terrain = m_main->GetTerrain(); + m_camera = m_main->GetCamera(); + m_interface = m_main->GetInterface(); + m_displayText = m_main->GetDisplayText(); + m_sound = CApplication::GetInstancePointer()->GetSound(); + m_physics = nullptr; + m_motion = nullptr; + m_primaryTask = nullptr; + m_secondaryTask = nullptr; + m_studio = nullptr; m_program = -1; m_bActivity = true; @@ -89,7 +88,7 @@ CBrain::CBrain(CInstanceManager* iMan, CObject* object) m_defaultEnter = EVENT_NULL; m_manipStyle = EVENT_OBJECT_MFRONT; - for ( i=0 ; iDeleteInstance(CLASS_BRAIN, this); + CInstanceManager::GetInstancePointer()->DeleteInstance(CLASS_BRAIN, this); } @@ -873,7 +870,7 @@ void CBrain::StartEditScript(int rank, char* name) if ( m_script[rank] == 0 ) { - m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask); + m_script[rank] = new CScript(m_object, &m_secondaryTask); } m_studio = new Ui::CStudio(); @@ -908,7 +905,7 @@ Error CBrain::StartTaskTake() m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskTake(); UpdateInterface(); return err; @@ -926,7 +923,7 @@ Error CBrain::StartTaskManip(TaskManipOrder order, TaskManipArm arm) m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskManip(order, arm); UpdateInterface(); return err; @@ -944,7 +941,7 @@ Error CBrain::StartTaskFlag(TaskFlagOrder order, int rank) m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskFlag(order, rank); UpdateInterface(); return err; @@ -962,7 +959,7 @@ Error CBrain::StartTaskBuild(ObjectType type) m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskBuild(type); UpdateInterface(); return err; @@ -980,7 +977,7 @@ Error CBrain::StartTaskSearch() m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskSearch(); UpdateInterface(); return err; @@ -998,7 +995,7 @@ Error CBrain::StartTaskTerraform() m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskTerraform(); UpdateInterface(); return err; @@ -1020,7 +1017,7 @@ Error CBrain::StartTaskPen(bool bDown, int color) m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskPen(bDown, color); UpdateInterface(); return err; @@ -1038,7 +1035,7 @@ Error CBrain::StartTaskRecover() m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskRecover(); UpdateInterface(); return err; @@ -1056,7 +1053,7 @@ Error CBrain::StartTaskShield(TaskShieldMode mode) m_secondaryTask = 0; } - m_secondaryTask = new CTaskManager(m_iMan, m_object); + m_secondaryTask = new CTaskManager(m_object); err = m_secondaryTask->StartTaskShield(mode, 1000.0f); UpdateInterface(); return err; @@ -1074,7 +1071,7 @@ Error CBrain::StartTaskFire(float delay) m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskFire(delay); UpdateInterface(); return err; @@ -1092,7 +1089,7 @@ Error CBrain::StartTaskFireAnt(Math::Vector impact) m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskFireAnt(impact); UpdateInterface(); return err; @@ -1110,7 +1107,7 @@ Error CBrain::StartTaskGunGoal(float dirV, float dirH) m_secondaryTask = 0; } - m_secondaryTask = new CTaskManager(m_iMan, m_object); + m_secondaryTask = new CTaskManager(m_object); err = m_secondaryTask->StartTaskGunGoal(dirV, dirH); UpdateInterface(); return err; @@ -1128,7 +1125,7 @@ Error CBrain::StartTaskReset(Math::Vector goal, Math::Vector angle) m_primaryTask = 0; } - m_primaryTask = new CTaskManager(m_iMan, m_object); + m_primaryTask = new CTaskManager(m_object); err = m_primaryTask->StartTaskReset(goal, angle); UpdateInterface(); return err; @@ -2698,7 +2695,7 @@ bool CBrain::ReadProgram(int rank, const char* filename) { if ( m_script[rank] == 0 ) { - m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask); + m_script[rank] = new CScript(m_object, &m_secondaryTask); } if ( m_script[rank]->ReadScript(filename) ) return true; @@ -2723,7 +2720,7 @@ bool CBrain::WriteProgram(int rank, char* filename) { if ( m_script[rank] == 0 ) { - m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask); + m_script[rank] = new CScript(m_object, &m_secondaryTask); } if ( m_script[rank]->WriteScript(filename) ) return true; @@ -2753,7 +2750,7 @@ bool CBrain::ReadStack(FILE *file) if ( m_script[op] == 0 ) { - m_script[op] = new CScript(m_iMan, m_object, &m_secondaryTask); + m_script[op] = new CScript(m_object, &m_secondaryTask); } if ( !m_script[op]->ReadStack(file) ) return false; } @@ -2915,7 +2912,7 @@ void CBrain::TraceRecordStop() i = m_selScript; if ( m_script[i] == 0 ) { - m_script[i] = new CScript(m_iMan, m_object, &m_secondaryTask); + m_script[i] = new CScript(m_object, &m_secondaryTask); } m_script[i]->SendScript(buffer); delete[] buffer; diff --git a/src/object/brain.h b/src/object/brain.h index ce7116e..5656f62 100644 --- a/src/object/brain.h +++ b/src/object/brain.h @@ -31,7 +31,6 @@ #include "object/task/taskshield.h" -class CInstanceManager; class CObject; class CPhysics; class CMotion; @@ -80,7 +79,7 @@ struct TraceRecord class CBrain { public: - CBrain(CInstanceManager* iMan, CObject* object); + CBrain(CObject* object); ~CBrain(); void DeleteObject(bool bAll=false); @@ -167,7 +166,6 @@ protected: bool TraceRecordPut(char *buffer, int max, TraceOper oper, float param); protected: - CInstanceManager* m_iMan; Gfx::CEngine* m_engine; Gfx::CTerrain* m_terrain; Gfx::CWater* m_water; diff --git a/src/object/mainmovie.cpp b/src/object/mainmovie.cpp index 9aaf345..04c0d56 100644 --- a/src/object/mainmovie.cpp +++ b/src/object/mainmovie.cpp @@ -17,7 +17,7 @@ #include "object/mainmovie.h" -#include "common/iman.h" +#include "app/app.h" #include "math/geometry.h" @@ -30,15 +30,12 @@ // Constructor of the application card. -CMainMovie::CMainMovie(CInstanceManager* iMan) +CMainMovie::CMainMovie() { - m_iMan = iMan; - m_iMan->AddInstance(CLASS_SHORT, this); - - m_engine = static_cast< Gfx::CEngine* >(m_iMan->SearchInstance(CLASS_ENGINE)); - m_main = static_cast< CRobotMain* >(m_iMan->SearchInstance(CLASS_MAIN)); - m_camera = static_cast< Gfx::CCamera* >(m_iMan->SearchInstance(CLASS_CAMERA)); - m_sound = static_cast< CSoundInterface* >(m_iMan->SearchInstance(CLASS_SOUND)); + m_engine = Gfx::CEngine::GetInstancePointer(); + m_main = CRobotMain::GetInstancePointer(); + m_camera = m_main->GetCamera(); + m_sound = CApplication::GetInstancePointer()->GetSound(); Flush(); } diff --git a/src/object/mainmovie.h b/src/object/mainmovie.h index eba21eb..4554431 100644 --- a/src/object/mainmovie.h +++ b/src/object/mainmovie.h @@ -23,18 +23,17 @@ #include "common/event.h" + #include "math/vector.h" -class CInstanceManager; class CRobotMain; class CSoundInterface; -namespace Gfx -{ - class CCamera; - class CEngine; -}; +namespace Gfx { +class CCamera; +class CEngine; +} enum MainMovieType { @@ -48,7 +47,7 @@ enum MainMovieType class CMainMovie { public: - CMainMovie(CInstanceManager* iMan); + CMainMovie(); ~CMainMovie(); void Flush(); @@ -60,9 +59,6 @@ public: MainMovieType GetStopType(); protected: - -protected: - CInstanceManager* m_iMan; Gfx::CEngine* m_engine; CRobotMain* m_main; Gfx::CCamera* m_camera; diff --git a/src/object/motion/motion.cpp b/src/object/motion/motion.cpp index 605091f..00b3073 100644 --- a/src/object/motion/motion.cpp +++ b/src/object/motion/motion.cpp @@ -19,7 +19,7 @@ #include "app/app.h" -#include "common/iman.h" +#include "object/robotmain.h" #include "script/cmdtoken.h" @@ -30,20 +30,16 @@ // Object's constructor. -CMotion::CMotion(CInstanceManager* iMan, CObject* object) +CMotion::CMotion(CObject* object) { - m_iMan = iMan; - m_iMan->AddInstance(CLASS_MOTION, this, 100); - m_app = CApplication::GetInstancePointer(); - m_engine = static_cast< Gfx::CEngine* >(m_iMan->SearchInstance(CLASS_ENGINE)); - m_light = static_cast< Gfx::CLight* >(m_iMan->SearchInstance(CLASS_LIGHT)); - m_particle = static_cast< Gfx::CParticle* >(m_iMan->SearchInstance(CLASS_PARTICULE)); - m_terrain = static_cast< Gfx::CTerrain* >(m_iMan->SearchInstance(CLASS_TERRAIN)); - m_water = static_cast< Gfx::CWater* >(m_iMan->SearchInstance(CLASS_WATER)); - m_camera = static_cast< Gfx::CCamera* >(m_iMan->SearchInstance(CLASS_CAMERA)); - m_main = static_cast< CRobotMain* >(m_iMan->SearchInstance(CLASS_MAIN)); - m_sound = static_cast< CSoundInterface* >(m_iMan->SearchInstance(CLASS_SOUND)); + m_sound = m_app->GetSound(); + m_engine = Gfx::CEngine::GetInstancePointer(); + m_particle = m_engine->GetParticle(); + m_water = m_engine->GetWater(); + m_main = CRobotMain::GetInstancePointer(); + m_terrain = m_main->GetTerrain(); + m_camera = m_main->GetCamera(); m_object = object; m_physics = 0; @@ -62,7 +58,6 @@ CMotion::CMotion(CInstanceManager* iMan, CObject* object) CMotion::~CMotion() { - m_iMan->DeleteInstance(CLASS_MOTION, this); } // Deletes the object. diff --git a/src/object/motion/motion.h b/src/object/motion/motion.h index 81bcb08..d35ee67 100644 --- a/src/object/motion/motion.h +++ b/src/object/motion/motion.h @@ -27,14 +27,12 @@ namespace Gfx { class CEngine; -class CLight; class CParticle; class CTerrain; class CWater; class CCamera; } -class CInstanceManager; class CApplication; class CBrain; class CPhysics; @@ -46,7 +44,7 @@ class CSoundInterface; class CMotion { public: - CMotion(CInstanceManager* iMan, CObject* object); + CMotion(CObject* object); virtual ~CMotion(); void SetPhysics(CPhysics* physics); @@ -72,12 +70,8 @@ public: virtual Math::Vector GetInclinaison(); protected: - -protected: - CInstanceManager* m_iMan; CApplication* m_app; Gfx::CEngine* m_engine; - Gfx::CLight* m_light; Gfx::CParticle* m_particle; Gfx::CTerrain* m_terrain; Gfx::CWater* m_water; diff --git a/src/object/motion/motionant.cpp b/src/object/motion/motionant.cpp index db8ff37..384d683 100644 --- a/src/object/motion/motionant.cpp +++ b/src/object/motion/motionant.cpp @@ -35,8 +35,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time // Object's constructor. -CMotionAnt::CMotionAnt(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionAnt::CMotionAnt(CObject* object) : CMotion(object) { m_armMember = START_TIME; m_armTimeAbs = START_TIME; diff --git a/src/object/motion/motionant.h b/src/object/motion/motionant.h index 68a3b7f..45d02b3 100644 --- a/src/object/motion/motionant.h +++ b/src/object/motion/motionant.h @@ -46,7 +46,7 @@ enum MotionAntSpecialAction class CMotionAnt : public CMotion { public: - CMotionAnt(CInstanceManager* iMan, CObject* object); + CMotionAnt(CObject* object); ~CMotionAnt(); void DeleteObject(bool bAll=false); diff --git a/src/object/motion/motionbee.cpp b/src/object/motion/motionbee.cpp index 111339d..8f69945 100644 --- a/src/object/motion/motionbee.cpp +++ b/src/object/motion/motionbee.cpp @@ -34,8 +34,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time // Object's constructor. -CMotionBee::CMotionBee(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionBee::CMotionBee(CObject* object) : CMotion(object) { m_armMember = START_TIME; m_armTimeAbs = START_TIME; diff --git a/src/object/motion/motionbee.h b/src/object/motion/motionbee.h index aa8e5a6..c0347a0 100644 --- a/src/object/motion/motionbee.h +++ b/src/object/motion/motionbee.h @@ -40,7 +40,7 @@ enum MotionBeeSpecialAction class CMotionBee : public CMotion { public: - CMotionBee(CInstanceManager* iMan, CObject* object); + CMotionBee(CObject* object); ~CMotionBee(); void DeleteObject(bool bAll=false); diff --git a/src/object/motion/motionhuman.cpp b/src/object/motion/motionhuman.cpp index 5ff4af3..dc5ff34 100644 --- a/src/object/motion/motionhuman.cpp +++ b/src/object/motion/motionhuman.cpp @@ -43,8 +43,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time // Object's constructor. -CMotionHuman::CMotionHuman(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionHuman::CMotionHuman(CObject* object) : CMotion(object) { m_partiReactor = -1; m_armMember = START_TIME; diff --git a/src/object/motion/motionhuman.h b/src/object/motion/motionhuman.h index b365a77..ddb0843 100644 --- a/src/object/motion/motionhuman.h +++ b/src/object/motion/motionhuman.h @@ -58,7 +58,7 @@ enum MotionHumanSpecialAction class CMotionHuman : public CMotion { public: - CMotionHuman(CInstanceManager* iMan, CObject* object); + CMotionHuman(CObject* object); ~CMotionHuman(); void DeleteObject(bool bAll=false); diff --git a/src/object/motion/motionmother.cpp b/src/object/motion/motionmother.cpp index ce1362f..573a2e4 100644 --- a/src/object/motion/motionmother.cpp +++ b/src/object/motion/motionmother.cpp @@ -34,8 +34,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time // Object's constructor. -CMotionMother::CMotionMother(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionMother::CMotionMother(CObject* object) : CMotion(object) { m_armMember = START_TIME; m_armTimeAbs = START_TIME; diff --git a/src/object/motion/motionmother.h b/src/object/motion/motionmother.h index 5060315..a6c7e93 100644 --- a/src/object/motion/motionmother.h +++ b/src/object/motion/motionmother.h @@ -26,7 +26,7 @@ class CMotionMother : public CMotion { public: - CMotionMother(CInstanceManager* iMan, CObject* object); + CMotionMother(CObject* object); ~CMotionMother(); void DeleteObject(bool bAll=false); diff --git a/src/object/motion/motionspider.cpp b/src/object/motion/motionspider.cpp index 3ede492..59bc6e0 100644 --- a/src/object/motion/motionspider.cpp +++ b/src/object/motion/motionspider.cpp @@ -35,8 +35,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time // Object's constructor. -CMotionSpider::CMotionSpider(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionSpider::CMotionSpider(CObject* object) : CMotion(object) { m_armMember = START_TIME; m_armTimeAbs = START_TIME; diff --git a/src/object/motion/motionspider.h b/src/object/motion/motionspider.h index fbf05f9..89745c4 100644 --- a/src/object/motion/motionspider.h +++ b/src/object/motion/motionspider.h @@ -44,7 +44,7 @@ enum MotionSpiderSpecialAction class CMotionSpider : public CMotion { public: - CMotionSpider(CInstanceManager* iMan, CObject* object); + CMotionSpider(CObject* object); ~CMotionSpider(); void DeleteObject(bool bAll=false); diff --git a/src/object/motion/motiontoto.cpp b/src/object/motion/motiontoto.cpp index 3a7f1ac..ddb1867 100644 --- a/src/object/motion/motiontoto.cpp +++ b/src/object/motion/motiontoto.cpp @@ -38,8 +38,7 @@ const float START_TIME = 1000.0f; // beginning of the relative time // Object's constructor. -CMotionToto::CMotionToto(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionToto::CMotionToto(CObject* object) : CMotion(object) { m_time = 0.0f; m_bDisplayInfo = false; diff --git a/src/object/motion/motiontoto.h b/src/object/motion/motiontoto.h index 4072b62..47baa28 100644 --- a/src/object/motion/motiontoto.h +++ b/src/object/motion/motiontoto.h @@ -35,7 +35,7 @@ enum MotionTotoAction class CMotionToto : public CMotion { public: - CMotionToto(CInstanceManager* iMan, CObject* object); + CMotionToto(CObject* object); ~CMotionToto(); void DeleteObject(bool bAll=false); diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index 3c95a27..44b8fdd 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -38,8 +38,7 @@ // Object's constructor. -CMotionVehicle::CMotionVehicle(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionVehicle::CMotionVehicle(CObject* object) : CMotion(object) { int i; @@ -926,7 +925,7 @@ bool CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->CreateEffectLight(20.0f, color); // Creates the battery. - pPower = new CObject(m_iMan); + pPower = new CObject(); pPower->SetType(power<=1.0f?OBJECT_POWER:OBJECT_ATOMIC); rank = m_engine->CreateObject(); diff --git a/src/object/motion/motionvehicle.h b/src/object/motion/motionvehicle.h index ca60c1e..ffb25ef 100644 --- a/src/object/motion/motionvehicle.h +++ b/src/object/motion/motionvehicle.h @@ -26,7 +26,7 @@ class CMotionVehicle : public CMotion { public: - CMotionVehicle(CInstanceManager* iMan, CObject* object); + CMotionVehicle(CObject* object); ~CMotionVehicle(); void DeleteObject(bool bAll=false); diff --git a/src/object/motion/motionworm.cpp b/src/object/motion/motionworm.cpp index f32765d..ee555a8 100644 --- a/src/object/motion/motionworm.cpp +++ b/src/object/motion/motionworm.cpp @@ -42,8 +42,7 @@ const int WORM_PART = 7; // number of parts of a worm // Object's constructor. -CMotionWorm::CMotionWorm(CInstanceManager* iMan, CObject* object) - : CMotion(iMan, object) +CMotionWorm::CMotionWorm(CObject* object) : CMotion(object) { m_timeUp = 18.0f; m_timeDown = 18.0f; diff --git a/src/object/motion/motionworm.h b/src/object/motion/motionworm.h index aed5a23..7684faf 100644 --- a/src/object/motion/motionworm.h +++ b/src/object/motion/motionworm.h @@ -26,7 +26,7 @@ class CMotionWorm : public CMotion { public: - CMotionWorm(CInstanceManager* iMan, CObject* object); + CMotionWorm(CObject* object); ~CMotionWorm(); void DeleteObject(bool bAll=false); diff --git a/src/object/object.cpp b/src/object/object.cpp index 317775d..8f2a4cc 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -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(m_iMan->SearchInstance(CLASS_ENGINE)); - m_lightMan = static_cast(m_iMan->SearchInstance(CLASS_LIGHT)); - m_terrain = static_cast(m_iMan->SearchInstance(CLASS_TERRAIN)); - m_water = static_cast(m_iMan->SearchInstance(CLASS_WATER)); - m_particle = static_cast(m_iMan->SearchInstance(CLASS_PARTICULE)); - m_camera = static_cast(m_iMan->SearchInstance(CLASS_CAMERA)); - m_displayText = static_cast(m_iMan->SearchInstance(CLASS_DISPLAYTEXT)); - m_main = static_cast(m_iMan->SearchInstance(CLASS_MAIN)); - m_sound = static_cast(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 ; iDeleteInstance(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(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(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(m_iMan->SearchInstance(CLASS_PYRO, i)); + pPyro = static_cast(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 ; iCreate(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; @@ -3139,7 +3137,7 @@ 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(); @@ -5467,91 +5465,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 || @@ -5559,13 +5557,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); } } @@ -5979,7 +5977,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); } @@ -6453,7 +6451,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(m_auto); pa->Start(0, force); } diff --git a/src/object/object.h b/src/object/object.h index 8d8baca..4d8cc02 100644 --- a/src/object/object.h +++ b/src/object/object.h @@ -28,7 +28,6 @@ #include "sound/sound.h" -class CInstanceManager; class CApplication; class CPhysics; class CBrain; @@ -39,8 +38,7 @@ class CRobotMain; class CBotVar; class CScript; -namespace Ui -{ +namespace Ui { class CDisplayText; } @@ -377,7 +375,7 @@ enum RadarFilter class CObject { public: - CObject(CInstanceManager* iMan); + CObject(); ~CObject(); void DeleteObject(bool bAll=false); @@ -679,7 +677,6 @@ protected: void UpdateSelectParticle(); protected: - CInstanceManager* m_iMan; CApplication* m_app; Gfx::CEngine* m_engine; Gfx::CLightManager* m_lightMan; diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index ca13efc..6efd853 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -80,7 +80,7 @@ #include "ui/window.h" -template<> CRobotMain* CSingleton::mInstance = nullptr; +template<> CRobotMain* CSingleton::m_instance = nullptr; // TODO: remove once using std::string @@ -606,29 +606,27 @@ bool rPoint(CBotVar* pThis, CBotVar* var, CBotVar* pResult, int& Exception) //! Constructor of robot application -CRobotMain::CRobotMain(CInstanceManager* iMan, CApplication* app) +CRobotMain::CRobotMain(CApplication* app) { - m_iMan = iMan; - m_iMan->AddInstance(CLASS_MAIN, this); - m_app = app; - m_eventQueue = static_cast(m_iMan->SearchInstance(CLASS_EVENT)); - m_engine = static_cast(m_iMan->SearchInstance(CLASS_ENGINE)); - m_lightMan = static_cast(m_iMan->SearchInstance(CLASS_LIGHT)); - m_particle = static_cast(m_iMan->SearchInstance(CLASS_PARTICULE)); - m_water = static_cast(m_iMan->SearchInstance(CLASS_WATER)); - m_cloud = static_cast(m_iMan->SearchInstance(CLASS_CLOUD)); - m_lightning = static_cast(m_iMan->SearchInstance(CLASS_BLITZ)); - m_planet = static_cast(m_iMan->SearchInstance(CLASS_PLANET)); - m_sound = static_cast(m_iMan->SearchInstance(CLASS_SOUND)); + m_eventQueue = m_app->GetEventQueue(); + m_sound = m_app->GetSound(); + + m_engine = Gfx::CEngine::GetInstancePointer(); + m_lightMan = m_engine->GetLightManager(); + m_particle = m_engine->GetParticle(); + m_water = m_engine->GetWater(); + m_cloud = m_engine->GetCloud(); + m_lightning = m_engine->GetLightning(); + m_planet = m_engine->GetPlanet(); m_interface = new Ui::CInterface(); - m_terrain = new Gfx::CTerrain(m_iMan); - m_camera = new Gfx::CCamera(m_iMan); + m_terrain = new Gfx::CTerrain(); + m_camera = new Gfx::CCamera(); m_displayText = new Ui::CDisplayText(); - m_movie = new CMainMovie(m_iMan); - m_dialog = new Ui::CMainDialog(m_iMan); + m_movie = new CMainMovie(); + m_dialog = new Ui::CMainDialog(); m_short = new Ui::CMainShort(); m_map = new Ui::CMainMap(); m_displayInfo = nullptr; @@ -857,10 +855,29 @@ CRobotMain::~CRobotMain() delete m_map; m_map = nullptr; - m_iMan = nullptr; m_app = nullptr; } +Gfx::CCamera* CRobotMain::GetCamera() +{ + return m_camera; +} + +Gfx::CTerrain* CRobotMain::GetTerrain() +{ + return m_terrain; +} + +Ui::CInterface* CRobotMain::GetInterface() +{ + return m_interface; +} + +Ui::CDisplayText* CRobotMain::GetDisplayText() +{ + return m_displayText; +} + //! Creates the file colobot.ini at the first time void CRobotMain::CreateIni() @@ -1027,10 +1044,6 @@ void CRobotMain::ChangePhase(Phase phase) m_cloud->Flush(); m_lightning->Flush(); m_planet->Flush(); - m_iMan->Flush(CLASS_OBJECT); - m_iMan->Flush(CLASS_PHYSICS); - m_iMan->Flush(CLASS_BRAIN); - m_iMan->Flush(CLASS_PYRO); m_interface->Flush(); ClearInterface(); FlushNewScriptName(); @@ -1042,6 +1055,12 @@ void CRobotMain::ChangePhase(Phase phase) m_cameraZoom = 0.0f; m_shortCut = true; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + iMan->Flush(CLASS_OBJECT); + iMan->Flush(CLASS_PHYSICS); + iMan->Flush(CLASS_BRAIN); + iMan->Flush(CLASS_PYRO); + Math::Point dim, pos; // Creates and hide the command console. @@ -2392,10 +2411,11 @@ CObject* CRobotMain::GetSelectObject() //! Deselects everything, and returns the object that was selected CObject* CRobotMain::DeselectAll() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); CObject* prev = nullptr; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetSelect()) prev = obj; @@ -2503,10 +2523,12 @@ bool CRobotMain::DeselectObject() //! Quickly removes all objects void CRobotMain::DeleteAllObjects() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + // Removes all pyrotechnic effects in progress. while (true) { - Gfx::CPyro* pyro = static_cast(m_iMan->SearchInstance(CLASS_PYRO, 0)); + Gfx::CPyro* pyro = static_cast(iMan->SearchInstance(CLASS_PYRO, 0)); if (pyro == nullptr) break; pyro->DeleteObject(); @@ -2526,7 +2548,7 @@ void CRobotMain::DeleteAllObjects() while (true) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, 0)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, 0)); if (obj == nullptr) break; obj->DeleteObject(true); // destroys rapidly @@ -2543,9 +2565,10 @@ void CRobotMain::SelectHuman() //! Returns the object human CObject* CRobotMain::SearchHuman() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == 0) break; ObjectType type = obj->GetType(); @@ -2558,9 +2581,10 @@ CObject* CRobotMain::SearchHuman() //! Returns the object toto CObject* CRobotMain::SearchToto() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; ObjectType type = obj->GetType(); @@ -2573,11 +2597,12 @@ CObject* CRobotMain::SearchToto() //! Returns the nearest selectable object from a given position CObject* CRobotMain::SearchNearest(Math::Vector pos, CObject* exclu) { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); float min = 100000.0f; CObject* best = 0; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj == exclu) continue; @@ -2600,9 +2625,10 @@ CObject* CRobotMain::SearchNearest(Math::Vector pos, CObject* exclu) //! Returns the selected object CObject* CRobotMain::GetSelect() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetSelect()) @@ -2613,9 +2639,10 @@ CObject* CRobotMain::GetSelect() CObject* CRobotMain::SearchObject(ObjectType type) { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetType() == type) @@ -2628,10 +2655,11 @@ CObject* CRobotMain::SearchObject(ObjectType type) CObject* CRobotMain::DetectObject(Math::Point pos) { int objRank = m_engine->DetectObject(pos); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (!obj->GetActif()) continue; @@ -2850,7 +2878,7 @@ bool CRobotMain::DeleteObject() CObject* obj = GetSelect(); if (obj == nullptr) return false; - Gfx::CPyro* pyro = new Gfx::CPyro(m_iMan); + Gfx::CPyro* pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_FRAGT, obj); obj->SetSelect(false); // deselects the object @@ -2873,9 +2901,11 @@ void CRobotMain::HiliteClear() int rank = -1; m_engine->SetHighlightRank(&rank); // nothing more selected + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; obj->SetHilite(false); @@ -3035,9 +3065,11 @@ void CRobotMain::HelpObject() //! Change the mode of the camera void CRobotMain::ChangeCamera() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetSelect()) @@ -3191,9 +3223,11 @@ void CRobotMain::RemoteCamera(float pan, float zoom, float rTime) //! Cancels the current movie void CRobotMain::AbortMovie() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; CAuto* automat = obj->GetAuto(); @@ -3261,13 +3295,15 @@ bool CRobotMain::EventFrame(const Event &event) if (pm != nullptr) pm->FlushObject(); } + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + CObject* toto = nullptr; if (!m_freePhoto) { // Advances all the robots, but not toto. for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (pm != nullptr) pm->UpdateObject(obj); if (obj->GetTruck() != nullptr) continue; @@ -3280,7 +3316,7 @@ bool CRobotMain::EventFrame(const Event &event) // Advances all objects transported by robots. for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetTruck() == nullptr) continue; obj->EventProcess(event); @@ -3289,7 +3325,7 @@ bool CRobotMain::EventFrame(const Event &event) // Advances pyrotechnic effects. for (int i = 0; i < 1000000; i++) { - Gfx::CPyro* pyro = static_cast(m_iMan->SearchInstance(CLASS_PYRO, i)); + Gfx::CPyro* pyro = static_cast(iMan->SearchInstance(CLASS_PYRO, i)); if (pyro == nullptr) break; pyro->EventProcess(event); @@ -3439,9 +3475,11 @@ bool CRobotMain::EventObject(const Event &event) m_resetCreate = false; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; obj->EventProcess(event); @@ -3679,10 +3717,12 @@ void CRobotMain::ScenePerso() m_terrain->FlushFlyingLimit(); m_lightMan->FlushLights(); m_particle->FlushParticle(); - m_iMan->Flush(CLASS_OBJECT); - m_iMan->Flush(CLASS_PHYSICS); - m_iMan->Flush(CLASS_BRAIN); - m_iMan->Flush(CLASS_PYRO); + + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + iMan->Flush(CLASS_OBJECT); + iMan->Flush(CLASS_PHYSICS); + iMan->Flush(CLASS_BRAIN); + iMan->Flush(CLASS_PYRO); m_dialog->SetSceneName("perso"); m_dialog->SetSceneRank(0); @@ -4155,7 +4195,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) Gfx::PyroType pType = OpPyro(line, "pyro"); if (pType != Gfx::PT_NULL) { - Gfx::CPyro* pyro = new Gfx::CPyro(m_iMan); + Gfx::CPyro* pyro = new Gfx::CPyro(); pyro->Create(pType, obj); } @@ -4572,7 +4612,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_START || type == OBJECT_END ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateBuilding(pos, angle, height, type, power); CAuto* automat = object->GetAuto(); @@ -4614,7 +4654,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_MARKKEYd || type == OBJECT_EGG ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateResource(pos, angle, type, power); } else @@ -4624,7 +4664,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_FLAGy || type == OBJECT_FLAGv ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateFlag(pos, angle, type); } else @@ -4634,7 +4674,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_BARRIER3 || type == OBJECT_BARRIER4 ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateBarrier(pos, angle, height, type); } else @@ -4669,7 +4709,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_TREE8 || type == OBJECT_TREE9 ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreatePlant(pos, angle, height, type); } else @@ -4684,7 +4724,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_MUSHROOM8 || type == OBJECT_MUSHROOM9 ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateMushroom(pos, angle, height, type); } else @@ -4739,7 +4779,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_TEEN48 || type == OBJECT_TEEN49 ) { - object = new CObject(m_iMan); + object = new CObject(); object->SetOption(option); object->CreateTeen(pos, angle, zoom, height, type); } @@ -4755,7 +4795,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_QUARTZ8 || type == OBJECT_QUARTZ9 ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateQuartz(pos, angle, height, type); } else @@ -4770,13 +4810,13 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_ROOT8 || type == OBJECT_ROOT9 ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateRoot(pos, angle, height, type); } else if ( type == OBJECT_HOME1 ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateHome(pos, angle, height, type); } else @@ -4794,7 +4834,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_RUINbase || type == OBJECT_RUINhead ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateRuin(pos, angle, height, type); } else @@ -4803,7 +4843,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_APOLLO4 || type == OBJECT_APOLLO5 ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateApollo(pos, angle, type); } else @@ -4813,7 +4853,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_BEE || type == OBJECT_WORM ) { - object = new CObject(m_iMan); + object = new CObject(); object->CreateInsect(pos, angle, type); // no eggs } else @@ -4849,7 +4889,7 @@ CObject* CRobotMain::CreateObject(Math::Vector pos, float angle, float zoom, flo type == OBJECT_MOBILEdr || type == OBJECT_APOLLO2 ) { - object = new CObject(m_iMan); + object = new CObject(); object->SetOption(option); object->CreateVehicle(pos, angle, type, power, trainer, toy); } @@ -5069,10 +5109,12 @@ bool CRobotMain::TestGadgetQuantity(int rank) //! Calculates the distance to the nearest object float CRobotMain::SearchNearestObject(Math::Vector center, CObject *exclu) { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + float min = 100000.0f; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (!obj->GetActif()) continue; // inactive? @@ -5218,12 +5260,14 @@ void CRobotMain::ShowDropZone(CObject* metal, CObject* truck) Math::Vector center = metal->GetPosition(0); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + // Calculates the maximum radius possible depending on other items. float oMax = 30.0f; // radius to build the biggest building float tMax; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (!obj->GetActif()) continue; // inactive? @@ -5441,13 +5485,15 @@ void CRobotMain::CompileScript(bool soluce) int nbError = 0; int lastError = 0; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + do { lastError = nbError; nbError = 0; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetTruck() != nullptr) continue; @@ -5476,7 +5522,7 @@ void CRobotMain::CompileScript(bool soluce) { for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == 0) break; if (obj->GetTruck() != 0) continue; @@ -5494,7 +5540,7 @@ void CRobotMain::CompileScript(bool soluce) // Start all programs according to the command "run". for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetTruck() != nullptr) continue; @@ -5569,9 +5615,11 @@ void CRobotMain::LoadFileScript(CObject *obj, const char* filename, int objRank, //! Saves all programs of all the robots void CRobotMain::SaveAllScript() { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; SaveOneScript(obj); @@ -5706,9 +5754,11 @@ bool CRobotMain::IsBusy() { if (m_CompteurFileOpen > 0) return true; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; CBrain* brain = obj->GetBrain(); @@ -5851,10 +5901,12 @@ bool CRobotMain::IOWriteScene(const char *filename, const char *filecbot, char * fputs(line, file); } + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + int objRank = 0; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetType() == OBJECT_TOTO) continue; @@ -5892,7 +5944,7 @@ bool CRobotMain::IOWriteScene(const char *filename, const char *filecbot, char * objRank = 0; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetType() == OBJECT_TOTO) continue; @@ -6047,7 +6099,7 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot) if (fret != nullptr) { obj->SetFret(fret); - CTaskManip* task = new CTaskManip(m_iMan, obj); + CTaskManip* task = new CTaskManip(obj); task->Start(TMO_AUTO, TMA_GRAB); // holds the object! delete task; } @@ -6065,6 +6117,8 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot) fclose(file); #if CBOT_STACK + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + // Compiles scripts. int nbError = 0; int lastError = 0; @@ -6074,7 +6128,7 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot) nbError = 0; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetTruck() != nullptr) continue; @@ -6100,7 +6154,7 @@ CObject* CRobotMain::IOReadScene(const char *filename, const char *filecbot) objRank = 0; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; if (obj->GetType() == OBJECT_TOTO) continue; @@ -6176,10 +6230,12 @@ void CRobotMain::ResetObject() Math::Vector pos, angle; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + // Removes all pyrotechnic effects in progress. while ( true ) { - pyro = static_cast(m_iMan->SearchInstance(CLASS_PYRO, 0)); + pyro = static_cast(iMan->SearchInstance(CLASS_PYRO, 0)); if ( pyro == 0 ) break; pyro->DeleteObject(); @@ -6194,7 +6250,7 @@ void CRobotMain::ResetObject() for ( i=0 ; i<1000000 ; i++ ) { - obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( obj == 0 ) break; cap = obj->GetResetCap(); @@ -6243,7 +6299,7 @@ void CRobotMain::ResetObject() if ( pos == obj->GetPosition(0) && angle == obj->GetAngle(0) ) continue; - pyro = new CPyro(m_iMan); + pyro = new CPyro(); pyro->Create(PT_RESET, obj); brain = obj->GetBrain(); @@ -6273,10 +6329,13 @@ void CRobotMain::ResetCreate() m_particle->FlushParticle(); m_terrain->FlushBuildingLevel(); - m_iMan->Flush(CLASS_OBJECT); - m_iMan->Flush(CLASS_PHYSICS); - m_iMan->Flush(CLASS_BRAIN); - m_iMan->Flush(CLASS_PYRO); + + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + iMan->Flush(CLASS_OBJECT); + iMan->Flush(CLASS_PHYSICS); + iMan->Flush(CLASS_BRAIN); + iMan->Flush(CLASS_PYRO); + m_camera->SetType(Gfx::CAM_TYPE_DIALOG); CreateScene(m_dialog->GetSceneSoluce(), false, true); @@ -6285,13 +6344,13 @@ void CRobotMain::ResetCreate() for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; ResetCap cap = obj->GetResetCap(); if (cap == RESET_NONE) continue; - Gfx::CPyro* pyro = new Gfx::CPyro(m_iMan); + Gfx::CPyro* pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_RESET, obj); } } @@ -6299,6 +6358,8 @@ void CRobotMain::ResetCreate() //! Checks if the mission is over Error CRobotMain::CheckEndMission(bool frame) { + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int t = 0; t < m_endTakeTotal; t++) { if (m_endTake[t].message[0] != 0) continue; @@ -6311,7 +6372,7 @@ Error CRobotMain::CheckEndMission(bool frame) int nb = 0; for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == nullptr) break; // Do not use GetActif () because an invisible worm (underground) @@ -6545,9 +6606,11 @@ bool CRobotMain::GetRadar() if (m_cheatRadar) return true; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for (int i = 0; i < 1000000; i++) { - CObject* obj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + CObject* obj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if (obj == 0) break; ObjectType type = obj->GetType(); diff --git a/src/object/robotmain.h b/src/object/robotmain.h index cb0cd7f..6a45473 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -71,12 +71,10 @@ enum Phase }; -class CInstanceManager; class CEventQueue; class CSoundInterface; -namespace Gfx -{ +namespace Gfx { class CEngine; class CLightManager; class CWater; @@ -84,17 +82,16 @@ class CCloud; class CLightning; class CPlanet; class CTerrain; -}; +} -namespace Ui -{ +namespace Ui { class CMainDialog; class CMainShort; class CMainMap; class CInterface; class CDisplayText; class CDisplayInfo; -}; +} struct EndTake @@ -178,9 +175,14 @@ const int AXIS_INVALID = -1; class CRobotMain : public CSingleton { public: - CRobotMain(CInstanceManager* iMan, CApplication* app); + CRobotMain(CApplication* app); ~CRobotMain(); + Gfx::CCamera* GetCamera(); + Gfx::CTerrain* GetTerrain(); + Ui::CInterface* GetInterface(); + Ui::CDisplayText* GetDisplayText(); + void CreateIni(); //! Sets the default input bindings (key and axes) @@ -358,7 +360,6 @@ protected: void Convert(); void CreateScene(bool soluce, bool fixScene, bool resetObject); - void CreateModel(); Math::Vector LookatPoint(Math::Vector eye, float angleH, float angleV, float length); CObject* CreateObject(Math::Vector pos, float angle, float zoom, float height, ObjectType type, float power=1.0f, @@ -390,7 +391,6 @@ protected: void UpdateSpeedLabel(); protected: - CInstanceManager* m_iMan; CApplication* m_app; CEventQueue* m_eventQueue; CMainMovie* m_movie; diff --git a/src/object/task/task.cpp b/src/object/task/task.cpp index b310fd5..39fdccf 100644 --- a/src/object/task/task.cpp +++ b/src/object/task/task.cpp @@ -14,33 +14,28 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// task.cpp - - -// #include #include "object/task/task.h" -#include "common/iman.h" -#include "object/object.h" +#include "app/app.h" +#include "object/object.h" +#include "object/robotmain.h" // Object's constructor. -CTask::CTask(CInstanceManager* iMan, CObject* object) +CTask::CTask(CObject* object) { - m_iMan = iMan; - - m_engine = static_cast(m_iMan->SearchInstance(CLASS_ENGINE)); - m_lightMan = static_cast(m_iMan->SearchInstance(CLASS_LIGHT)); - m_terrain = static_cast(m_iMan->SearchInstance(CLASS_TERRAIN)); - m_water = static_cast(m_iMan->SearchInstance(CLASS_WATER)); - m_particle = static_cast(m_iMan->SearchInstance(CLASS_PARTICULE)); - m_camera = static_cast(m_iMan->SearchInstance(CLASS_CAMERA)); - m_displayText = static_cast(m_iMan->SearchInstance(CLASS_DISPLAYTEXT)); - m_main = static_cast(m_iMan->SearchInstance(CLASS_MAIN)); - m_sound = static_cast(m_iMan->SearchInstance(CLASS_SOUND)); + m_sound = CApplication::GetInstancePointer()->GetSound(); + m_engine = Gfx::CEngine::GetInstancePointer(); + m_lightMan = m_engine->GetLightManager(); + m_water = m_engine->GetWater(); + m_particle = m_engine->GetParticle(); + m_main = CRobotMain::GetInstancePointer(); + m_terrain = m_main->GetTerrain(); + m_camera = m_main->GetCamera(); + m_displayText = m_main->GetDisplayText(); m_object = object; m_physics = m_object->GetPhysics(); diff --git a/src/object/task/task.h b/src/object/task/task.h index 7239d48..12961ef 100644 --- a/src/object/task/task.h +++ b/src/object/task/task.h @@ -21,10 +21,10 @@ #include "common/event.h" #include "common/global.h" + #include "math/const.h" -class CInstanceManager; class CBrain; class CPhysics; class CMotion; @@ -64,7 +64,7 @@ const float ARM_STOCK_ANGLE3 = -70.0f*Math::PI/180.0f; class CTask { public: - CTask(CInstanceManager* iMan, CObject* object); + CTask(CObject* object); virtual ~CTask(); virtual bool EventProcess(const Event &event); @@ -73,7 +73,6 @@ public: virtual bool Abort(); protected: - CInstanceManager* m_iMan; Gfx::CEngine* m_engine; Gfx::CLightManager* m_lightMan; Gfx::CParticle* m_particle; diff --git a/src/object/task/taskadvance.cpp b/src/object/task/taskadvance.cpp index 0d159d2..58eb939 100644 --- a/src/object/task/taskadvance.cpp +++ b/src/object/task/taskadvance.cpp @@ -14,11 +14,11 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskadvance.cpp #include "object/task/taskadvance.h" #include "math/geometry.h" + #include "physics/physics.h" @@ -26,8 +26,7 @@ // Object's constructor. -CTaskAdvance::CTaskAdvance(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskAdvance::CTaskAdvance(CObject* object) : CTask(object) { } diff --git a/src/object/task/taskadvance.h b/src/object/task/taskadvance.h index dbb80d9..f8c672d 100644 --- a/src/object/task/taskadvance.h +++ b/src/object/task/taskadvance.h @@ -20,6 +20,7 @@ #include "object/task/task.h" + #include "math/vector.h" @@ -27,7 +28,7 @@ class CTaskAdvance : public CTask { public: - CTaskAdvance(CInstanceManager* iMan, CObject* object); + CTaskAdvance(CObject* object); ~CTaskAdvance(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index 5673ea4..f209cd5 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -14,29 +14,32 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskbuild.cpp #include "object/task/taskbuild.h" #include "common/iman.h" + #include "graphics/core/color.h" #include "graphics/core/light.h" #include "graphics/engine/lightman.h" #include "graphics/engine/terrain.h" #include "graphics/engine/water.h" + #include "math/geometry.h" + #include "object/auto/auto.h" #include "object/motion/motionhuman.h" #include "object/robotmain.h" + #include "physics/physics.h" + #include "ui/displaytext.h" #include // Object's constructor. -CTaskBuild::CTaskBuild(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskBuild::CTaskBuild(CObject* object) : CTask(object) { int i; @@ -75,7 +78,7 @@ CTaskBuild::~CTaskBuild() bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle) { - m_building = new CObject(m_iMan); + m_building = new CObject(); if ( !m_building->CreateBuilding(pos, angle, 0.0f, m_type, 0.0f) ) { delete m_building; @@ -596,11 +599,13 @@ Error CTaskBuild::FlatFloor() return bLittleFlat?ERR_BUILD_FLATLIT:ERR_BUILD_FLAT; } + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + max = 100000.0f; bBase = false; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( !pObj->GetActif() ) continue; // inactive? @@ -648,7 +653,7 @@ Error CTaskBuild::FlatFloor() max = 100000.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( !pObj->GetActif() ) continue; // inactive? @@ -715,12 +720,14 @@ CObject* CTaskBuild::SearchMetalObject(float &angle, float dMin, float dMax, iAngle = m_object->GetAngleY(0); iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 1000000.0f; pBest = 0; bMetal = false; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( !pObj->GetActif() ) continue; // objet inactive? @@ -779,9 +786,11 @@ void CTaskBuild::DeleteMark(Math::Vector pos, float radius) float distance; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); diff --git a/src/object/task/taskbuild.h b/src/object/task/taskbuild.h index 25300b3..b3193a0 100644 --- a/src/object/task/taskbuild.h +++ b/src/object/task/taskbuild.h @@ -45,7 +45,7 @@ enum TaskBuildPhase class CTaskBuild : public CTask { public: - CTaskBuild(CInstanceManager* iMan, CObject* object); + CTaskBuild(CObject* object); ~CTaskBuild(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskfire.cpp b/src/object/task/taskfire.cpp index 99a88b8..beb4944 100644 --- a/src/object/task/taskfire.cpp +++ b/src/object/task/taskfire.cpp @@ -14,12 +14,13 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskfire.cpp #include "object/task/taskfire.h" #include "graphics/engine/particle.h" + #include "math/geometry.h" + #include "physics/physics.h" @@ -31,8 +32,7 @@ const float ENERGY_FIREi = (0.10f/2.5f); // energy consumed/organic // Object's constructor. -CTaskFire::CTaskFire(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskFire::CTaskFire(CObject* object) : CTask(object) { m_soundChannel = -1; } diff --git a/src/object/task/taskfire.h b/src/object/task/taskfire.h index 5cf4f0c..81058df 100644 --- a/src/object/task/taskfire.h +++ b/src/object/task/taskfire.h @@ -26,7 +26,7 @@ class CTaskFire : public CTask { public: - CTaskFire(CInstanceManager* iMan, CObject* object); + CTaskFire(CObject* object); ~CTaskFire(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskfireant.cpp b/src/object/task/taskfireant.cpp index 2044685..c0acf64 100644 --- a/src/object/task/taskfireant.cpp +++ b/src/object/task/taskfireant.cpp @@ -14,13 +14,15 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskfireant.cpp #include "object/task/taskfireant.h" #include "graphics/engine/particle.h" + #include "math/geometry.h" + #include "object/motion/motionant.h" + #include "physics/physics.h" @@ -28,8 +30,7 @@ // Object's constructor. -CTaskFireAnt::CTaskFireAnt(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskFireAnt::CTaskFireAnt(CObject* object) : CTask(object) { m_phase = TFA_NULL; } diff --git a/src/object/task/taskfireant.h b/src/object/task/taskfireant.h index 4fa77b8..2a0ead8 100644 --- a/src/object/task/taskfireant.h +++ b/src/object/task/taskfireant.h @@ -38,7 +38,7 @@ enum TaskFireAnt class CTaskFireAnt : public CTask { public: - CTaskFireAnt(CInstanceManager* iMan, CObject* object); + CTaskFireAnt(CObject* object); ~CTaskFireAnt(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskflag.cpp b/src/object/task/taskflag.cpp index c88b5c0..dd5e11d 100644 --- a/src/object/task/taskflag.cpp +++ b/src/object/task/taskflag.cpp @@ -14,26 +14,28 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskflag.cpp #include "object/task/taskflag.h" -#include "math/geometry.h" #include "common/iman.h" + +#include "math/geometry.h" + #include "graphics/engine/particle.h" #include "graphics/engine/pyro.h" #include "graphics/engine/water.h" -#include "physics/physics.h" + #include "object/motion/motionhuman.h" +#include "physics/physics.h" + // Object's constructor. -CTaskFlag::CTaskFlag(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskFlag::CTaskFlag(CObject* object) : CTask(object) { } @@ -137,11 +139,13 @@ CObject* CTaskFlag::SearchNearest(Math::Vector pos, ObjectType type) float min, dist; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 100000.0f; pBest = 0; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( !pObj->GetEnable() ) continue; @@ -180,10 +184,12 @@ int CTaskFlag::CountObject(ObjectType type) Math::Vector oPos; int i, count; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + count = 0; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( !pObj->GetEnable() ) continue; @@ -247,7 +253,7 @@ Error CTaskFlag::CreateFlag(int rank) return ERR_FLAG_CREATE; } - pNew = new CObject(m_iMan); + pNew = new CObject(); if ( !pNew->CreateFlag(pos, 0.0f, table[i]) ) { delete pNew; @@ -256,7 +262,7 @@ Error CTaskFlag::CreateFlag(int rank) //pNew->SetZoom(0, 0.0f); m_sound->Play(SOUND_WAYPOINT, pos); - pyro = new Gfx::CPyro(m_iMan); + pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_FLCREATE, pNew); return ERR_OK; @@ -295,7 +301,7 @@ Error CTaskFlag::DeleteFlag() } m_sound->Play(SOUND_WAYPOINT, iPos); - pyro = new Gfx::CPyro(m_iMan); + pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_FLDELETE, pObj); return ERR_OK; diff --git a/src/object/task/taskflag.h b/src/object/task/taskflag.h index 5b0a058..7e3e4ef 100644 --- a/src/object/task/taskflag.h +++ b/src/object/task/taskflag.h @@ -20,6 +20,7 @@ #include "object/task/task.h" #include "object/object.h" + #include "math/vector.h" @@ -35,7 +36,7 @@ enum TaskFlagOrder class CTaskFlag : public CTask { public: - CTaskFlag(CInstanceManager* iMan, CObject* object); + CTaskFlag(CObject* object); ~CTaskFlag(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskgoto.cpp b/src/object/task/taskgoto.cpp index cab57f1..c4a2939 100644 --- a/src/object/task/taskgoto.cpp +++ b/src/object/task/taskgoto.cpp @@ -14,8 +14,6 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskgoto.cpp - #include @@ -23,9 +21,12 @@ #include "common/event.h" #include "common/iman.h" + #include "graphics/engine/terrain.h" #include "graphics/engine/water.h" + #include "math/geometry.h" + #include "physics/physics.h" #include @@ -40,8 +41,7 @@ const float BM_DIM_STEP = 5.0f; // Object's constructor. -CTaskGoto::CTaskGoto(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskGoto::CTaskGoto(CObject* object) : CTask(object) { m_bmArray = 0; } @@ -494,12 +494,14 @@ CObject* CTaskGoto::WormSearch(Math::Vector &impact) float distance, min, radius; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + iPos = m_object->GetPosition(0); min = 1000000.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; oType = pObj->GetType(); @@ -1026,11 +1028,13 @@ CObject* CTaskGoto::SearchTarget(Math::Vector pos, float margin) float dist, min; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + pBest = 0; min = 1000000.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( !pObj->GetActif() ) continue; @@ -1170,9 +1174,11 @@ bool CTaskGoto::AdjustBuilding(Math::Vector &pos, float margin, float &distance) float dist, suppl; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( !pObj->GetActif() ) continue; @@ -1339,11 +1345,13 @@ bool CTaskGoto::LeakSearch(Math::Vector &pos, float &delay) m_object->GetCrashSphere(0, iPos, iRadius); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 100000.0f; bRadius = 0.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; @@ -1401,7 +1409,7 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir) for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; @@ -1522,9 +1530,11 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir) bAlien = true; } + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; @@ -1614,9 +1624,11 @@ void CTaskGoto::ComputeFlyingRepulse(float &dir) fac = 1.5f; dir = 0.0f; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; @@ -1928,9 +1940,11 @@ void CTaskGoto::BitmapObject() m_object->GetCrashSphere(0, iPos, iRadius); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); diff --git a/src/object/task/taskgoto.h b/src/object/task/taskgoto.h index 1382d4c..d2b2d7e 100644 --- a/src/object/task/taskgoto.h +++ b/src/object/task/taskgoto.h @@ -20,6 +20,7 @@ #include "object/task/task.h" + #include "math/vector.h" @@ -72,7 +73,7 @@ enum TaskGotoPhase class CTaskGoto : public CTask { public: - CTaskGoto(CInstanceManager* iMan, CObject* object); + CTaskGoto(CObject* object); ~CTaskGoto(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskgungoal.cpp b/src/object/task/taskgungoal.cpp index aed3355..3373610 100644 --- a/src/object/task/taskgungoal.cpp +++ b/src/object/task/taskgungoal.cpp @@ -14,7 +14,6 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskgungoal.cpp #include "object/task/taskgungoal.h" @@ -25,8 +24,7 @@ // Object's constructor. -CTaskGunGoal::CTaskGunGoal(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskGunGoal::CTaskGunGoal(CObject* object) : CTask(object) { } diff --git a/src/object/task/taskgungoal.h b/src/object/task/taskgungoal.h index 0c063d1..c6f010b 100644 --- a/src/object/task/taskgungoal.h +++ b/src/object/task/taskgungoal.h @@ -26,7 +26,7 @@ class CTaskGunGoal : public CTask { public: - CTaskGunGoal(CInstanceManager* iMan, CObject* object); + CTaskGunGoal(CObject* object); ~CTaskGunGoal(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskinfo.cpp b/src/object/task/taskinfo.cpp index 4e64584..32ac342 100644 --- a/src/object/task/taskinfo.cpp +++ b/src/object/task/taskinfo.cpp @@ -14,12 +14,13 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskinfo.cpp #include "object/task/taskinfo.h" #include "common/iman.h" + #include "graphics/engine/particle.h" + #include "object/auto/autoinfo.h" #include @@ -28,8 +29,7 @@ // Object's constructor. -CTaskInfo::CTaskInfo(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskInfo::CTaskInfo(CObject* object) : CTask(object) { } @@ -189,11 +189,13 @@ CObject* CTaskInfo::SearchInfo(float power) iPos = m_object->GetPosition(0); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 100000.0f; pBest = 0; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); diff --git a/src/object/task/taskinfo.h b/src/object/task/taskinfo.h index 036b57d..1ce3dca 100644 --- a/src/object/task/taskinfo.h +++ b/src/object/task/taskinfo.h @@ -26,7 +26,7 @@ class CTaskInfo : public CTask { public: - CTaskInfo(CInstanceManager* iMan, CObject* object); + CTaskInfo(CObject* object); ~CTaskInfo(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskmanager.cpp b/src/object/task/taskmanager.cpp index 26e389d..a2ce8b8 100644 --- a/src/object/task/taskmanager.cpp +++ b/src/object/task/taskmanager.cpp @@ -14,14 +14,13 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskmanager.cpp - #include #include "object/task/taskmanager.h" #include "common/iman.h" + #include "object/task/taskwait.h" #include "object/task/taskadvance.h" #include "object/task/taskturn.h" @@ -43,12 +42,9 @@ // Object's constructor. -CTaskManager::CTaskManager(CInstanceManager* iMan, CObject* object) +CTaskManager::CTaskManager(CObject* object) { - m_iMan = iMan; - m_iMan->AddInstance(CLASS_TASKMANAGER, this, 100); - - m_task = 0; + m_task = nullptr; m_object = object; m_bPilot = false; } @@ -66,7 +62,7 @@ CTaskManager::~CTaskManager() Error CTaskManager::StartTaskWait(float time) { - m_task = new CTaskWait(m_iMan, m_object); + m_task = new CTaskWait(m_object); return (static_cast(m_task))->Start(time); } @@ -74,7 +70,7 @@ Error CTaskManager::StartTaskWait(float time) Error CTaskManager::StartTaskAdvance(float length) { - m_task = new CTaskAdvance(m_iMan, m_object); + m_task = new CTaskAdvance(m_object); return (static_cast(m_task))->Start(length); } @@ -82,7 +78,7 @@ Error CTaskManager::StartTaskAdvance(float length) Error CTaskManager::StartTaskTurn(float angle) { - m_task = new CTaskTurn(m_iMan, m_object); + m_task = new CTaskTurn(m_object); return (static_cast(m_task))->Start(angle); } @@ -90,7 +86,7 @@ Error CTaskManager::StartTaskTurn(float angle) Error CTaskManager::StartTaskGoto(Math::Vector pos, float altitude, TaskGotoGoal goalMode, TaskGotoCrash crashMode) { - m_task = new CTaskGoto(m_iMan, m_object); + m_task = new CTaskGoto(m_object); return (static_cast(m_task))->Start(pos, altitude, goalMode, crashMode); } @@ -98,7 +94,7 @@ Error CTaskManager::StartTaskGoto(Math::Vector pos, float altitude, TaskGotoGoal Error CTaskManager::StartTaskTake() { - m_task = new CTaskTake(m_iMan, m_object); + m_task = new CTaskTake(m_object); return (static_cast(m_task))->Start(); } @@ -106,7 +102,7 @@ Error CTaskManager::StartTaskTake() Error CTaskManager::StartTaskManip(TaskManipOrder order, TaskManipArm arm) { - m_task = new CTaskManip(m_iMan, m_object); + m_task = new CTaskManip(m_object); return (static_cast(m_task))->Start(order, arm); } @@ -114,7 +110,7 @@ Error CTaskManager::StartTaskManip(TaskManipOrder order, TaskManipArm arm) Error CTaskManager::StartTaskFlag(TaskFlagOrder order, int rank) { - m_task = new CTaskFlag(m_iMan, m_object); + m_task = new CTaskFlag(m_object); return (static_cast(m_task))->Start(order, rank); } @@ -122,7 +118,7 @@ Error CTaskManager::StartTaskFlag(TaskFlagOrder order, int rank) Error CTaskManager::StartTaskBuild(ObjectType type) { - m_task = new CTaskBuild(m_iMan, m_object); + m_task = new CTaskBuild(m_object); return (static_cast(m_task))->Start(type); } @@ -130,7 +126,7 @@ Error CTaskManager::StartTaskBuild(ObjectType type) Error CTaskManager::StartTaskSearch() { - m_task = new CTaskSearch(m_iMan, m_object); + m_task = new CTaskSearch(m_object); return (static_cast(m_task))->Start(); } @@ -138,7 +134,7 @@ Error CTaskManager::StartTaskSearch() Error CTaskManager::StartTaskInfo(const char *name, float value, float power, bool bSend) { - m_task = new CTaskInfo(m_iMan, m_object); + m_task = new CTaskInfo(m_object); return (static_cast(m_task))->Start(name, value, power, bSend); } @@ -146,7 +142,7 @@ Error CTaskManager::StartTaskInfo(const char *name, float value, float power, bo Error CTaskManager::StartTaskTerraform() { - m_task = new CTaskTerraform(m_iMan, m_object); + m_task = new CTaskTerraform(m_object); return (static_cast(m_task))->Start(); } @@ -154,7 +150,7 @@ Error CTaskManager::StartTaskTerraform() Error CTaskManager::StartTaskPen(bool bDown, int color) { - m_task = new CTaskPen(m_iMan, m_object); + m_task = new CTaskPen(m_object); return (static_cast(m_task))->Start(bDown, color); } @@ -162,7 +158,7 @@ Error CTaskManager::StartTaskPen(bool bDown, int color) Error CTaskManager::StartTaskRecover() { - m_task = new CTaskRecover(m_iMan, m_object); + m_task = new CTaskRecover(m_object); return (static_cast(m_task))->Start(); } @@ -172,7 +168,7 @@ Error CTaskManager::StartTaskShield(TaskShieldMode mode, float delay) { if ( mode == TSM_UP ) { - m_task = new CTaskShield(m_iMan, m_object); + m_task = new CTaskShield(m_object); return (static_cast(m_task))->Start(mode, delay); } if ( mode == TSM_DOWN && m_task != 0 ) @@ -191,7 +187,7 @@ Error CTaskManager::StartTaskShield(TaskShieldMode mode, float delay) Error CTaskManager::StartTaskFire(float delay) { m_bPilot = true; - m_task = new CTaskFire(m_iMan, m_object); + m_task = new CTaskFire(m_object); return (static_cast(m_task))->Start(delay); } @@ -199,7 +195,7 @@ Error CTaskManager::StartTaskFire(float delay) Error CTaskManager::StartTaskFireAnt(Math::Vector impact) { - m_task = new CTaskFireAnt(m_iMan, m_object); + m_task = new CTaskFireAnt(m_object); return (static_cast(m_task))->Start(impact); } @@ -207,7 +203,7 @@ Error CTaskManager::StartTaskFireAnt(Math::Vector impact) Error CTaskManager::StartTaskGunGoal(float dirV, float dirH) { - m_task = new CTaskGunGoal(m_iMan, m_object); + m_task = new CTaskGunGoal(m_object); return (static_cast(m_task))->Start(dirV, dirH); } @@ -215,7 +211,7 @@ Error CTaskManager::StartTaskGunGoal(float dirV, float dirH) Error CTaskManager::StartTaskSpiderExplo() { - m_task = new CTaskSpiderExplo(m_iMan, m_object); + m_task = new CTaskSpiderExplo(m_object); return (static_cast(m_task))->Start(); } @@ -223,7 +219,7 @@ Error CTaskManager::StartTaskSpiderExplo() Error CTaskManager::StartTaskReset(Math::Vector goal, Math::Vector angle) { - m_task = new CTaskReset(m_iMan, m_object); + m_task = new CTaskReset(m_object); return (static_cast(m_task))->Start(goal, angle); } diff --git a/src/object/task/taskmanager.h b/src/object/task/taskmanager.h index 6ce023a..80a78fd 100644 --- a/src/object/task/taskmanager.h +++ b/src/object/task/taskmanager.h @@ -19,8 +19,8 @@ #pragma once -#include "object/task/task.h" #include "object/object.h" +#include "object/task/task.h" #include "object/task/taskmanip.h" #include "object/task/taskgoto.h" #include "object/task/taskshield.h" @@ -31,7 +31,7 @@ class CTaskManager { public: - CTaskManager(CInstanceManager* iMan, CObject* object); + CTaskManager(CObject* object); ~CTaskManager(); Error StartTaskWait(float time); @@ -61,9 +61,6 @@ public: bool Abort(); protected: - -protected: - CInstanceManager* m_iMan; CTask* m_task; CObject* m_object; bool m_bPilot; diff --git a/src/object/task/taskmanip.cpp b/src/object/task/taskmanip.cpp index b0b146c..0608b6e 100644 --- a/src/object/task/taskmanip.cpp +++ b/src/object/task/taskmanip.cpp @@ -14,15 +14,18 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskmanip.cpp #include "object/task/taskmanip.h" #include "common/iman.h" + #include "graphics/engine/terrain.h" #include "graphics/engine/pyro.h" + #include "math/geometry.h" + #include "object/robotmain.h" + #include "physics/physics.h" @@ -40,8 +43,7 @@ const float MARGIN_BEE = 5.0f; //OK 1.9 // Object's constructor. -CTaskManip::CTaskManip(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskManip::CTaskManip(CObject* object) : CTask(object) { m_arm = TMA_NEUTRAL; m_hand = TMH_OPEN; @@ -338,7 +340,7 @@ Error CTaskManip::Start(TaskManipOrder order, TaskManipArm arm) pos.y += 2.0f; m_object->SetPosition(0, pos); // against the top of jump - pyro = new Gfx::CPyro(m_iMan); + pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_FALL, other); // the ball falls } @@ -728,11 +730,13 @@ CObject* CTaskManip::SearchTakeUnderObject(Math::Vector &pos, float dLimit) iPos = m_object->GetPosition(0); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 1000000.0f; pBest = 0; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); @@ -798,12 +802,14 @@ CObject* CTaskManip::SearchTakeFrontObject(bool bAdvance, Math::Vector &pos, dLimit = MARGIN_FRONT; } + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 1000000.0f; pBest = 0; bAngle = 0.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); @@ -889,12 +895,14 @@ CObject* CTaskManip::SearchTakeBackObject(bool bAdvance, Math::Vector &pos, dLimit = MARGIN_BACK; } + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 1000000.0f; pBest = 0; bAngle = 0.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); @@ -989,9 +997,11 @@ CObject* CTaskManip::SearchOtherObject(bool bAdvance, Math::Vector &pos, dLimit = MARGIN_FRIEND; } + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; // yourself? @@ -1345,9 +1355,11 @@ bool CTaskManip::IsFreeDeposeObject(Math::Vector pos) mat = m_object->GetWorldMatrix(0); iPos = Transform(*mat, pos); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; diff --git a/src/object/task/taskmanip.h b/src/object/task/taskmanip.h index 79d9ad5..e80602c 100644 --- a/src/object/task/taskmanip.h +++ b/src/object/task/taskmanip.h @@ -54,7 +54,7 @@ enum TaskManipHand class CTaskManip : public CTask { public: - CTaskManip(CInstanceManager* iMan, CObject* object); + CTaskManip(CObject* object); ~CTaskManip(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskpen.cpp b/src/object/task/taskpen.cpp index 6e04233..03c2322 100644 --- a/src/object/task/taskpen.cpp +++ b/src/object/task/taskpen.cpp @@ -14,20 +14,20 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskpen.cpp #include "object/task/taskpen.h" #include "graphics/engine/particle.h" -#include "math/geometry.h" + #include "object/object.h" +#include "math/geometry.h" + // Object's constructor. -CTaskPen::CTaskPen(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskPen::CTaskPen(CObject* object) : CTask(object) { } diff --git a/src/object/task/taskpen.h b/src/object/task/taskpen.h index 0974322..adaba6c 100644 --- a/src/object/task/taskpen.h +++ b/src/object/task/taskpen.h @@ -36,7 +36,7 @@ enum TaskPenPhase class CTaskPen : public CTask { public: - CTaskPen(CInstanceManager* iMan, CObject* object); + CTaskPen(CObject* object); ~CTaskPen(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskrecover.cpp b/src/object/task/taskrecover.cpp index 4c8ead8..b86e9a5 100644 --- a/src/object/task/taskrecover.cpp +++ b/src/object/task/taskrecover.cpp @@ -14,17 +14,19 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskrecover.cpp - #include #include "object/task/taskrecover.h" -#include "math/geometry.h" #include "common/iman.h" + #include "graphics/engine/particle.h" + +#include "math/geometry.h" + #include "physics/physics.h" + #include "ui/displaytext.h" @@ -35,8 +37,7 @@ const float RECOVER_DIST = 11.8f; // Object's constructor. -CTaskRecover::CTaskRecover(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskRecover::CTaskRecover(CObject* object) : CTask(object) { m_ruin = 0; m_soundChannel = -1; @@ -297,7 +298,7 @@ Error CTaskRecover::IsEnded() if ( m_phase == TRP_DOWN ) { - m_metal = new CObject(m_iMan); + m_metal = new CObject(); if ( !m_metal->CreateResource(m_recoverPos, 0.0f, OBJECT_METAL) ) { delete m_metal; @@ -385,11 +386,13 @@ CObject* CTaskRecover::SearchRuin() float dist, min; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + pBest = 0; min = 100000.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); diff --git a/src/object/task/taskrecover.h b/src/object/task/taskrecover.h index 151ab6b..817ed5f 100644 --- a/src/object/task/taskrecover.h +++ b/src/object/task/taskrecover.h @@ -20,6 +20,7 @@ #include "object/task/task.h" + #include "math/vector.h" @@ -38,7 +39,7 @@ enum TaskRecoverPhase class CTaskRecover : public CTask { public: - CTaskRecover(CInstanceManager* iMan, CObject* object); + CTaskRecover(CObject* object); ~CTaskRecover(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskreset.cpp b/src/object/task/taskreset.cpp index 7e097bf..98d9730 100644 --- a/src/object/task/taskreset.cpp +++ b/src/object/task/taskreset.cpp @@ -14,11 +14,11 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskreset.cpp #include "object/task/taskreset.h" #include "common/iman.h" + #include "object/brain.h" #include "object/robotmain.h" @@ -32,8 +32,7 @@ const float RESET_DELAY_MOVE = 0.7f; // Object's constructor. -CTaskReset::CTaskReset(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskReset::CTaskReset(CObject* object) : CTask(object) { } @@ -273,9 +272,11 @@ bool CTaskReset::SearchVehicle() float oRadius, dist; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; diff --git a/src/object/task/taskreset.h b/src/object/task/taskreset.h index e3dacf7..5f1bb34 100644 --- a/src/object/task/taskreset.h +++ b/src/object/task/taskreset.h @@ -36,7 +36,7 @@ enum TaskResetPhase class CTaskReset : public CTask { public: - CTaskReset(CInstanceManager* iMan, CObject* object); + CTaskReset(CObject* object); ~CTaskReset(); bool EventProcess(const Event &event); diff --git a/src/object/task/tasksearch.cpp b/src/object/task/tasksearch.cpp index 578b41e..b219185 100644 --- a/src/object/task/tasksearch.cpp +++ b/src/object/task/tasksearch.cpp @@ -14,15 +14,18 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// tasksearch.cpp #include "object/task/tasksearch.h" -#include "math/geometry.h" #include "common/iman.h" + #include "graphics/engine/particle.h" #include "graphics/engine/terrain.h" + +#include "math/geometry.h" + #include "physics/physics.h" + #include "ui/displaytext.h" @@ -30,8 +33,7 @@ // Object's constructor. -CTaskSearch::CTaskSearch(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskSearch::CTaskSearch(CObject* object) : CTask(object) { m_hand = TSH_UP; } @@ -280,7 +282,7 @@ bool CTaskSearch::CreateMark() //? DeleteMark(type); - fret = new CObject(m_iMan); + fret = new CObject(); if ( !fret->CreateResource(pos, 0.0f, type) ) { delete fret; @@ -301,9 +303,11 @@ void CTaskSearch::DeleteMark(ObjectType type) Math::Vector oPos; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( type == pObj->GetType() ) diff --git a/src/object/task/tasksearch.h b/src/object/task/tasksearch.h index bffec16..582d45a 100644 --- a/src/object/task/tasksearch.h +++ b/src/object/task/tasksearch.h @@ -42,7 +42,7 @@ enum TaskSearchPhase class CTaskSearch : public CTask { public: - CTaskSearch(CInstanceManager* iMan, CObject* object); + CTaskSearch(CObject* object); ~CTaskSearch(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskshield.cpp b/src/object/task/taskshield.cpp index 93afd62..4b2fccd 100644 --- a/src/object/task/taskshield.cpp +++ b/src/object/task/taskshield.cpp @@ -14,16 +14,19 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskshield.cpp #include "object/task/taskshield.h" #include "common/iman.h" + #include "graphics/core/light.h" #include "graphics/engine/particle.h" #include "graphics/engine/lightman.h" + #include "math/geometry.h" + #include "object/brain.h" + #include "physics/physics.h" #include @@ -34,8 +37,7 @@ const float ENERGY_TIME = 20.0f; // maximum duration if full battery // Object's constructor. -CTaskShield::CTaskShield(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskShield::CTaskShield(CObject* object) : CTask(object) { m_rankSphere = -1; m_soundChannel = -1; @@ -521,9 +523,11 @@ void CTaskShield::IncreaseShield() float dist, shield; int i; + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); diff --git a/src/object/task/taskshield.h b/src/object/task/taskshield.h index 4a6811c..36d3819 100644 --- a/src/object/task/taskshield.h +++ b/src/object/task/taskshield.h @@ -20,6 +20,7 @@ #include "object/task/task.h" + #include "math/vector.h" @@ -49,7 +50,7 @@ enum TaskShieldMode class CTaskShield : public CTask { public: - CTaskShield(CInstanceManager* iMan, CObject* object); + CTaskShield(CObject* object); ~CTaskShield(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskspiderexplo.cpp b/src/object/task/taskspiderexplo.cpp index 8110870..f629714 100644 --- a/src/object/task/taskspiderexplo.cpp +++ b/src/object/task/taskspiderexplo.cpp @@ -14,12 +14,13 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskspiderexplo.cpp #include "object/task/taskspiderexplo.h" #include "graphics/engine/pyro.h" + #include "object/motion/motionspider.h" + #include "physics/physics.h" @@ -27,8 +28,7 @@ // Object's constructor. -CTaskSpiderExplo::CTaskSpiderExplo(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskSpiderExplo::CTaskSpiderExplo(CObject* object) : CTask(object) { m_time = 0.0f; m_bError = false; @@ -91,7 +91,7 @@ Error CTaskSpiderExplo::IsEnded() if ( m_time < 1.0f ) return ERR_CONTINUE; - pyro = new Gfx::CPyro(m_iMan); + pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_SPIDER, m_object); // the spider explodes (suicide) Abort(); diff --git a/src/object/task/taskspiderexplo.h b/src/object/task/taskspiderexplo.h index 50f3ad2..0984020 100644 --- a/src/object/task/taskspiderexplo.h +++ b/src/object/task/taskspiderexplo.h @@ -26,7 +26,7 @@ class CTaskSpiderExplo : public CTask { public: - CTaskSpiderExplo(CInstanceManager* iMan, CObject* object); + CTaskSpiderExplo(CObject* object); ~CTaskSpiderExplo(); bool EventProcess(const Event &event); diff --git a/src/object/task/tasktake.cpp b/src/object/task/tasktake.cpp index 2737324..0037f85 100644 --- a/src/object/task/tasktake.cpp +++ b/src/object/task/tasktake.cpp @@ -14,16 +14,19 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// tasktake.cpp #include "object/task/tasktake.h" #include "common/iman.h" + #include "graphics/engine/terrain.h" #include "graphics/engine/water.h" + #include "math/geometry.h" + #include "object/motion/motionhuman.h" #include "object/robotmain.h" + #include "physics/physics.h" @@ -31,10 +34,9 @@ // Object's constructor. -CTaskTake::CTaskTake(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskTake::CTaskTake(CObject* object) : CTask(object) { - m_terrain = static_cast(m_iMan->SearchInstance(CLASS_TERRAIN)); + m_terrain = CRobotMain::GetInstancePointer()->GetTerrain(); m_arm = TTA_NEUTRAL; } @@ -305,12 +307,14 @@ CObject* CTaskTake::SearchTakeObject(float &angle, iAngle = m_object->GetAngleY(0); iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + min = 1000000.0f; pBest = 0; bAngle = 0.0f; for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); @@ -374,9 +378,11 @@ CObject* CTaskTake::SearchFriendObject(float &angle, iAngle = m_object->GetAngleY(0); iAngle = Math::NormAngle(iAngle); // 0..2*Math::PI + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; // yourself? @@ -569,9 +575,11 @@ bool CTaskTake::IsFreeDeposeObject(Math::Vector pos) mat = m_object->GetWorldMatrix(0); iPos = Transform(*mat, pos); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; if ( pObj == m_object ) continue; diff --git a/src/object/task/tasktake.h b/src/object/task/tasktake.h index c7950fe..7f3f831 100644 --- a/src/object/task/tasktake.h +++ b/src/object/task/tasktake.h @@ -42,7 +42,7 @@ enum TaskTakeArm class CTaskTake : public CTask { public: - CTaskTake(CInstanceManager* iMan, CObject* object); + CTaskTake(CObject* object); ~CTaskTake(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskterraform.cpp b/src/object/task/taskterraform.cpp index 6afece4..1f5ef7b 100644 --- a/src/object/task/taskterraform.cpp +++ b/src/object/task/taskterraform.cpp @@ -14,23 +14,25 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskterraform.cpp - #include #include "object/task/taskterraform.h" -#include "math/geometry.h" #include "common/iman.h" + #include "graphics/engine/pyro.h" #include "graphics/engine/particle.h" #include "graphics/engine/terrain.h" -#include "physics/physics.h" + +#include "math/geometry.h" + #include "object/brain.h" #include "object/motion/motionant.h" #include "object/motion/motionspider.h" +#include "physics/physics.h" + const float ENERGY_TERRA = 0.40f; // energy consumed by blow const float ACTION_RADIUS = 400.0f; @@ -39,8 +41,7 @@ const float ACTION_RADIUS = 400.0f; // Object's constructor. -CTaskTerraform::CTaskTerraform(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskTerraform::CTaskTerraform(CObject* object) : CTask(object) { m_lastParticle = 0.0f; m_soundChannel = -1; @@ -370,9 +371,11 @@ bool CTaskTerraform::Terraform() m_sound->Play(SOUND_THUMP, m_terraPos); + CInstanceManager* iMan = CInstanceManager::GetInstancePointer(); + for ( i=0 ; i<1000000 ; i++ ) { - pObj = static_cast(m_iMan->SearchInstance(CLASS_OBJECT, i)); + pObj = static_cast(iMan->SearchInstance(CLASS_OBJECT, i)); if ( pObj == 0 ) break; type = pObj->GetType(); @@ -383,7 +386,7 @@ bool CTaskTerraform::Terraform() dist = Math::Distance(m_terraPos, pObj->GetPosition(0)); if ( dist > 20.0f ) continue; - pyro = new Gfx::CPyro(m_iMan); + pyro = new Gfx::CPyro(); pyro->Create(Gfx::PT_FRAGT, pObj); } else diff --git a/src/object/task/taskterraform.h b/src/object/task/taskterraform.h index 91526b6..8ae0d64 100644 --- a/src/object/task/taskterraform.h +++ b/src/object/task/taskterraform.h @@ -20,6 +20,7 @@ #include "object/task/task.h" + #include "math/vector.h" @@ -37,7 +38,7 @@ enum TaskTerraPhase class CTaskTerraform : public CTask { public: - CTaskTerraform(CInstanceManager* iMan, CObject* object); + CTaskTerraform(CObject* object); ~CTaskTerraform(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskturn.cpp b/src/object/task/taskturn.cpp index 8f4bbd2..7a924cb 100644 --- a/src/object/task/taskturn.cpp +++ b/src/object/task/taskturn.cpp @@ -14,7 +14,6 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskturn.cpp #include "object/task/taskturn.h" @@ -26,8 +25,7 @@ // Object's constructor. -CTaskTurn::CTaskTurn(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskTurn::CTaskTurn(CObject* object) : CTask(object) { } diff --git a/src/object/task/taskturn.h b/src/object/task/taskturn.h index 1ee40d9..11de476 100644 --- a/src/object/task/taskturn.h +++ b/src/object/task/taskturn.h @@ -26,7 +26,7 @@ class CTaskTurn : public CTask { public: - CTaskTurn(CInstanceManager* iMan, CObject* object); + CTaskTurn(CObject* object); ~CTaskTurn(); bool EventProcess(const Event &event); diff --git a/src/object/task/taskwait.cpp b/src/object/task/taskwait.cpp index f612c24..3e201e0 100644 --- a/src/object/task/taskwait.cpp +++ b/src/object/task/taskwait.cpp @@ -14,7 +14,6 @@ // * You should have received a copy of the GNU General Public License // * along with this program. If not, see http://www.gnu.org/licenses/. -// taskwait.cpp #include "object/task/taskwait.h" @@ -22,8 +21,7 @@ // Object's constructor. -CTaskWait::CTaskWait(CInstanceManager* iMan, CObject* object) - : CTask(iMan, object) +CTaskWait::CTaskWait(CObject* object) : CTask(object) { } diff --git a/src/object/task/taskwait.h b/src/object/task/taskwait.h index 3434c36..3225c9a 100644 --- a/src/object/task/taskwait.h +++ b/src/object/task/taskwait.h @@ -26,7 +26,7 @@ class CTaskWait : public CTask { public: - CTaskWait(CInstanceManager* iMan, CObject* object); + CTaskWait(CObject* object); ~CTaskWait(); bool EventProcess(const Event &event); -- cgit v1.2.3-1-g7c22 From 08c646bb929c7bc98b005521b6e0c14428f651d0 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Thu, 28 Feb 2013 21:26:09 +0100 Subject: Fixed stupid error, tweaked ambient light colors * fixed stupid error in light manager * tweaked ambient light colors to 0.1 of diffuse; colors should not be oversaturated now --- src/object/object.cpp | 25 +++++++------------------ src/object/robotmain.cpp | 2 ++ src/object/task/taskbuild.cpp | 17 +++++------------ src/object/task/taskshield.cpp | 13 ++++--------- 4 files changed, 18 insertions(+), 39 deletions(-) (limited to 'src/object') diff --git a/src/object/object.cpp b/src/object/object.cpp index 8f2a4cc..d6ac681 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -2248,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; @@ -2291,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; diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 6efd853..29fdd31 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -4917,6 +4917,7 @@ int CRobotMain::CreateLight(Math::Vector direction, Gfx::Color color) Gfx::Light light; light.type = Gfx::LIGHT_DIRECTIONAL; light.diffuse = color; + light.ambient = color * 0.1f; light.direction = direction; int obj = m_lightMan->CreateLight(Gfx::LIGHT_PRI_HIGH); m_lightMan->SetLight(obj, light); @@ -4934,6 +4935,7 @@ int CRobotMain::CreateSpot(Math::Vector pos, Gfx::Color color) Gfx::Light light; light.type = Gfx::LIGHT_SPOT; light.diffuse = color; + light.ambient = color * 0.1f; light.position = pos; light.direction = Math::Vector(0.0f, -1.0f, 0.0f); light.spotIntensity = 1.0f; diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index f209cd5..b9af475 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -114,7 +114,6 @@ bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle) void CTaskBuild::CreateLight() { - Gfx::Light light; Gfx::Color color; Math::Vector center, pos, dir; Math::Point c, p; @@ -141,18 +140,12 @@ void CTaskBuild::CreateLight() pos.y = center.y+40.0f; dir = center-pos; - memset(&light, 0, sizeof(light)); + Gfx::Light light; light.type = Gfx::LIGHT_SPOT; - light.diffuse.r = 0.0f; - light.diffuse.g = 0.0f; - light.diffuse.b = 0.0f; // white (invisible) - light.position.x = pos.x; - light.position.y = pos.y; - light.position.z = pos.z; - light.direction.x = dir.x; - light.direction.y = dir.y; - light.direction.z = dir.z; - //TODO Is this value correct + light.ambient = Gfx::Color(0.0f, 0.0f, 0.0f); + light.diffuse = Gfx::Color(0.0f, 0.0f, 0.0f); // invisible + light.position = pos; + light.direction = dir; light.spotIntensity = 128; light.attenuation0 = 1.0f; light.attenuation1 = 0.0f; diff --git a/src/object/task/taskshield.cpp b/src/object/task/taskshield.cpp index 4b2fccd..929dd5c 100644 --- a/src/object/task/taskshield.cpp +++ b/src/object/task/taskshield.cpp @@ -488,15 +488,10 @@ bool CTaskShield::CreateLight(Math::Vector pos) memset(&light, 0, sizeof(light)); light.type = Gfx::LIGHT_SPOT; - light.diffuse.r = 0.0f; - light.diffuse.g = 1.0f; - light.diffuse.b = 2.0f; - light.position.x = pos.x; - light.position.y = pos.y; - light.position.z = pos.z; - light.direction.x = 0.0f; - light.direction.y = -1.0f; // against the bottom - light.direction.z = 0.0f; + light.ambient = Gfx::Color(0.0f, 0.0f, 0.0f); + light.diffuse = Gfx::Color(0.0f, 1.0f, 2.0f); + light.position = pos; + light.direction = Math::Vector(0.0f, -1.0f, 0.0f); // against the bottom light.spotIntensity = 128; light.attenuation0 = 1.0f; light.attenuation1 = 0.0f; -- cgit v1.2.3-1-g7c22 From f729686539b4e4628ab818e1a2bffbe1d48ed114 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Thu, 28 Feb 2013 22:56:44 +0100 Subject: Fixed segfault in light manager Also fixed minor memory leak --- src/object/robotmain.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 29fdd31..7c6cb77 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -3833,7 +3833,12 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) int rankObj = 0; int rankGadget = 0; CObject* sel = 0; + + std::string oldLocale; char *locale = setlocale(LC_NUMERIC, nullptr); + if (locale != nullptr) + oldLocale = locale; + setlocale(LC_NUMERIC, "C"); while (fgets(line, 500, file) != NULL) @@ -4568,8 +4573,8 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) } m_dialog->SetSceneRead(""); m_dialog->SetStackRead(""); - - setlocale(LC_NUMERIC, locale); + + setlocale(LC_NUMERIC, oldLocale.c_str()); } //! Creates an object of decoration mobile or stationary -- cgit v1.2.3-1-g7c22 From 1f565fdf389542eb0296bf7f685716200c559538 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sat, 9 Mar 2013 15:28:36 +0100 Subject: "allmission" default value depends on build type --- src/object/robotmain.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 7c6cb77..95378c8 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -661,7 +661,11 @@ CRobotMain::CRobotMain(CApplication* app) m_showPos = false; m_selectInsect = false; m_showSoluce = false; + #ifdef NDEBUG + m_showAll = false; + #else m_showAll = true; // for development + #endif m_cheatRadar = false; m_fixScene = false; m_trainerPilot = false; -- cgit v1.2.3-1-g7c22 From 6c783b903392173a6a98048aad3d600e4dcfe103 Mon Sep 17 00:00:00 2001 From: erihel Date: Thu, 14 Mar 2013 21:30:32 +0100 Subject: * Fix for issue #122 with sound not being played in menu after playing mission --- src/object/robotmain.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 95378c8..da6ac42 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -1146,6 +1146,7 @@ void CRobotMain::ChangePhase(Phase phase) if (m_phase == PHASE_WIN) { + m_sound->StopAll(); if (m_endingWinRank == -1) { ChangePhase(PHASE_TERM); @@ -1192,13 +1193,13 @@ void CRobotMain::ChangePhase(Phase phase) { m_displayText->DisplayError(INFO_WIN, Math::Vector(0.0f,0.0f,0.0f), 15.0f, 60.0f, 1000.0f); } + StartMusic(); } - m_sound->StopAll(); - StartMusic(); } if (m_phase == PHASE_LOST) { + m_sound->StopAll(); if (m_endingLostRank == -1) { ChangePhase(PHASE_TERM); @@ -1215,9 +1216,9 @@ void CRobotMain::ChangePhase(Phase phase) ddim.x = dim.x*2; ddim.y = dim.y*2; m_interface->CreateButton(pos, ddim, 16, EVENT_BUTTON_OK); m_displayText->DisplayError(INFO_LOST, Math::Vector(0.0f,0.0f,0.0f), 15.0f, 60.0f, 1000.0f); + + StartMusic(); } - m_sound->StopAll(); - StartMusic(); } if (m_phase == PHASE_LOADING) -- cgit v1.2.3-1-g7c22 From d6bbc99c90ef586b041651d373524b30fe6c8676 Mon Sep 17 00:00:00 2001 From: erihel Date: Sun, 17 Mar 2013 19:01:32 +0100 Subject: * Changed file loading to fix issue #73 * Moved few functions from misc.cpp to profile.cpp (used to set/get user dir) * Removed some warnings * More work to change const char* to std::string * Some work on file path to fix issue #60 with bad slashes on POSIX platform --- src/object/robotmain.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index da6ac42..635fc4e 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -1187,7 +1187,7 @@ void CRobotMain::ChangePhase(Phase phase) pe->SetFontType(Gfx::FONT_COLOBOT); pe->SetEditCap(false); pe->SetHiliteCap(false); - pe->ReadText("help/win.txt"); + pe->ReadText(std::string("help/win.txt")); } else { @@ -4094,8 +4094,9 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) { OpString(line, "image", name); AddExt(name, ".png"); - if (strstr(name, "%user%") != 0) - CopyFileToTemp(name); + if (strstr(name, "%user%") != 0) { + GetProfile().CopyFileToTemp(std::string(name)); + } m_terrain->AddMaterial(OpInt(line, "id", 0), name, -- cgit v1.2.3-1-g7c22 From 1406464f0ce0b804298e2ee034bdd8bc7856e0dc Mon Sep 17 00:00:00 2001 From: erihel Date: Wed, 20 Mar 2013 21:50:44 +0100 Subject: * Changed Set/Get HilateCap to Set/Get HighlightCap * Changes ReadText in CEdit to fix problem with SatCom links * Filenames when loading/saving scripts should be fixed on mxe --- src/object/robotmain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 635fc4e..2554ce4 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -1186,7 +1186,7 @@ void CRobotMain::ChangePhase(Phase phase) pe->SetGenericMode(true); pe->SetFontType(Gfx::FONT_COLOBOT); pe->SetEditCap(false); - pe->SetHiliteCap(false); + pe->SetHighlightCap(false); pe->ReadText(std::string("help/win.txt")); } else -- cgit v1.2.3-1-g7c22 From 25c3ba0d3b06fe4e63f3dab4f80f596026b36377 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sat, 23 Mar 2013 19:04:41 +0100 Subject: Basic detection of syntax errors in mission levels + option to enable Retro mode (for now doesn't do enything) --- src/object/robotmain.cpp | 155 +++++++++++++++++++++++++++++++++++++++++++++-- src/object/robotmain.h | 8 +++ 2 files changed, 157 insertions(+), 6 deletions(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 2554ce4..b3f269c 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -649,6 +649,14 @@ CRobotMain::CRobotMain(CApplication* app) m_selectObject = 0; m_infoUsed = 0; + m_beginObject = false; + m_terrainGenerate = false; + m_terrainInit = false; + m_terrainInitTextures = false; + m_terrainCreate = false; + + m_version = 1; + m_retroStyle = false; m_immediatSatCom = false; m_beginSatCom = false; m_movieLock = false; @@ -3818,21 +3826,32 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_dialog->BuildResumeName(m_resume, base, rank); GetResource(RES_TEXT, RT_SCRIPT_NEW, m_scriptName); m_scriptFile[0] = 0; + + m_beginObject = false; + m_terrainGenerate = false; + m_terrainInit = false; + m_terrainInitTextures = false; + m_terrainCreate = false; + + m_retroStyle = false; } char line[500]; char name[200]; char dir[100]; char op[100]; + char filename[500]; + int lineNum = 0; memset(line, 0, 500); memset(name, 0, 200); memset(dir, 0, 100); memset(op, 0, 100); + memset(filename, 0, 500); std::string tempLine; m_dialog->BuildSceneName(tempLine, base, rank); - strcpy(line, tempLine.c_str()); - FILE* file = fopen(line, "r"); + strcpy(filename, tempLine.c_str()); + FILE* file = fopen(filename, "r"); if (file == NULL) return; int rankObj = 0; @@ -3848,6 +3867,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) while (fgets(line, 500, file) != NULL) { + lineNum++; for (int i = 0; i < 500; i++) { if (line[i] == '\t' ) line[i] = ' '; // replace tab by space @@ -3858,6 +3878,9 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) } } + if (Cmd(line, "MissionFile") && !resetObject) + m_version = OpInt(line, "version", 1); + // TODO: Fallback to an non-localized entry sprintf(op, "Title.%c", m_app->GetLanguageChar()); if (Cmd(line, op) && !resetObject) @@ -4000,34 +4023,96 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_engine->SetForegroundName(name); } - if (Cmd(line, "Global") && !resetObject) + if (((m_version == 1 && Cmd(line, "Global")) || (m_version >= 2 && Cmd(line, "Mission"))) && !resetObject) { g_unit = OpFloat(line, "unitScale", 4.0f); m_engine->SetTracePrecision(OpFloat(line, "traceQuality", 1.0f)); m_shortCut = OpInt(line, "shortcut", 1); + if(m_version >= 2) { + m_retroStyle = OpInt(line, "retro", 0); + if(m_retroStyle) GetLogger()->Info("Retro mode enabled.\n"); + } } if (Cmd(line, "TerrainGenerate") && !resetObject) { + if(m_terrainCreate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainGenerate after TerrainCreate\n", filename, lineNum); + continue; + } + + if(m_terrainInit) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainGenerate after TerrainInit\n", filename, lineNum); + continue; + } + m_terrain->Generate(OpInt(line, "mosaic", 20), OpInt(line, "brick", 3), OpFloat(line, "size", 20.0f), OpFloat(line, "vision", 500.0f)*g_unit, OpInt(line, "depth", 2), OpFloat(line, "hard", 0.5f)); + + m_terrainGenerate = true; } - if (Cmd(line, "TerrainWind") && !resetObject) + if (Cmd(line, "TerrainWind") && !resetObject) { + if(m_terrainCreate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainWind after TerrainCreate\n", filename, lineNum); + continue; + } + + if(m_terrainInit) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainWind after TerrainInit\n", filename, lineNum); + continue; + } + + if(!m_terrainGenerate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainWind before TerrainGenerate\n", filename, lineNum); + continue; + } + m_terrain->SetWind(OpPos(line, "speed")); + } if (Cmd(line, "TerrainRelief") && !resetObject) { + if(m_terrainCreate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainRelief after TerrainCreate\n", filename, lineNum); + continue; + } + + if(m_terrainInit) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainRelief after TerrainInit\n", filename, lineNum); + continue; + } + + if(!m_terrainGenerate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainRelief before TerrainGenerate\n", filename, lineNum); + continue; + } + OpString(line, "image", name); m_terrain->LoadRelief(name, OpFloat(line, "factor", 1.0f), OpInt(line, "border", 1)); } if (Cmd(line, "TerrainResource") && !resetObject) { + if(m_terrainCreate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainResource after TerrainCreate\n", filename, lineNum); + continue; + } + + if(m_terrainInit) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainResource after TerrainInit\n", filename, lineNum); + continue; + } + + if(!m_terrainGenerate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainResource before TerrainGenerate\n", filename, lineNum); + continue; + } + OpString(line, "image", name); m_terrain->LoadResources(name); } @@ -4072,6 +4157,11 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) if (Cmd(line, "TerrainInitTextures") && !resetObject) { + if(m_terrainInit) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainInitTextures and TerrainInit at same time\n", filename, lineNum); + continue; + } + OpString(line, "image", name); AddExt(name, ".png"); int dx = OpInt(line, "dx", 1); @@ -4085,13 +4175,37 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) CopyFileListToTemp(name, tt, dx*dy); m_terrain->InitTextures(name, tt, dx, dy); + + m_terrainInitTextures = true; } - if (Cmd(line, "TerrainInit") && !resetObject) + if (Cmd(line, "TerrainInit") && !resetObject) { + if(m_terrainInitTextures) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainInit and TerrainInitTextures at same time\n", filename, lineNum); + continue; + } + m_terrain->InitMaterials(OpInt(line, "id", 1)); + m_terrainInit = true; + } if (Cmd(line, "TerrainMaterial") && !resetObject) { + if(m_terrainCreate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainMaterial after TerrainCreate\n", filename, lineNum); + continue; + } + + if(m_terrainInit) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainMaterial after TerrainInit\n", filename, lineNum); + continue; + } + + if(m_terrainInitTextures) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainMaterial and TerrainInitTextures at same time\n", filename, lineNum); + continue; + } + OpString(line, "image", name); AddExt(name, ".png"); if (strstr(name, "%user%") != 0) { @@ -4111,6 +4225,26 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) if (Cmd(line, "TerrainLevel") && !resetObject) { + if(m_terrainCreate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel after TerrainCreate\n", filename, lineNum); + continue; + } + + if(!m_terrainInit) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel before TerrainInit\n", filename, lineNum); + continue; + } + + if(m_terrainInitTextures) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel and TerrainInitTextures at same time\n", filename, lineNum); + continue; + } + + if(!m_terrainGenerate) { + GetLogger()->Error("Syntax error in file '%s' (line %d): TerrainLevel before TerrainGenerate\n", filename, lineNum); + continue; + } + char* op = SearchOp(line, "id"); int id[50]; int i = 0; @@ -4129,8 +4263,10 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) OpFloat(line, "radius", 0.0f)*g_unit); } - if (Cmd(line, "TerrainCreate") && !resetObject) + if (Cmd(line, "TerrainCreate") && !resetObject) { m_terrain->CreateObjects(); + m_terrainCreate = true; + } if (Cmd(line, "BeginObject")) { @@ -4139,10 +4275,17 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) if (read[0] != 0) // loading file ? sel = IOReadScene(read, stack); + + m_beginObject = true; } if (Cmd(line, "CreateObject") && read[0] == 0) { + if (!m_beginObject) { + GetLogger()->Error("Syntax error in file '%s' (line %d): CreateObject before BeginObject\n", filename, lineNum); + continue; + } + ObjectType type = OpTypeObject(line, "type", OBJECT_NULL); int gadget = OpInt(line, "gadget", -1); diff --git a/src/object/robotmain.h b/src/object/robotmain.h index 6a45473..181a1cb 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -447,6 +447,14 @@ protected: int m_delayWriteMessage; int m_movieInfoIndex; + bool m_beginObject; + bool m_terrainGenerate; + bool m_terrainInitTextures; + bool m_terrainInit; + bool m_terrainCreate; + + int m_version; // Mission file version + bool m_retroStyle; // Retro style bool m_immediatSatCom; // SatCom immediately? bool m_beginSatCom; // messages SatCom poster? bool m_movieLock; // movie in progress? -- cgit v1.2.3-1-g7c22 From 956efb1feb7767c2845c8d6d241f036c179f6adf Mon Sep 17 00:00:00 2001 From: erihel Date: Sat, 23 Mar 2013 20:33:14 +0100 Subject: * Blocked cheat input in SatCom, intro movie and while editing cbot (issue #130) --- src/object/robotmain.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index b3f269c..55a9b86 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -1331,6 +1331,7 @@ bool CRobotMain::EventProcess(Event &event) // Management of the console. if (m_phase != PHASE_NAME && !m_movie->IsExist() && + !m_movieLock && !m_editLock && event.type == EVENT_KEY_DOWN && event.key.key == KEY(PAUSE)) // Pause ? { @@ -2090,6 +2091,8 @@ void CRobotMain::StartDisplayInfo(const char *filename, int index) //! End of displaying of instructions void CRobotMain::StopDisplayInfo() { + if (m_cmdEdit) return; + if (m_movieInfoIndex != -1) // film to read the SatCom? m_movie->Start(MM_SATCOMclose, 2.0f); -- cgit v1.2.3-1-g7c22 From 5deb68e698fa9d7edd9125bea2d8c5e9df58cd6d Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 24 Mar 2013 16:35:00 +0100 Subject: Small fix in mission files code --- src/object/robotmain.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 55a9b86..2fde567 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -3836,6 +3836,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_terrainInitTextures = false; m_terrainCreate = false; + m_version = 1; m_retroStyle = false; } -- cgit v1.2.3-1-g7c22 From f4e222248f4959ea82b9e94ec0e21dcecbecac88 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 24 Mar 2013 19:05:20 +0100 Subject: Retro mode now disables possibility of writing and running programs --- src/object/brain.cpp | 26 ++++++++++++++------------ src/object/robotmain.cpp | 4 ++++ src/object/robotmain.h | 4 +++- 3 files changed, 21 insertions(+), 13 deletions(-) (limited to 'src/object') diff --git a/src/object/brain.cpp b/src/object/brain.cpp index babb38d..1f428b7 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -1288,18 +1288,20 @@ bool CBrain::CreateInterface(bool bSelect) type == OBJECT_BEE || type == OBJECT_WORM ) // vehicle? { - ddim.x = dim.x*5.1f; - ddim.y = dim.y*2.0f; - pos.x = ox+sx*0.0f; - pos.y = oy+sy*0.0f; - pw->CreateList(pos, ddim, -1, EVENT_OBJECT_PROGLIST, 1.10f); - UpdateScript(pw); - - pos.x = ox+sx*5.2f; - pos.y = oy+sy*1.0f; - pw->CreateButton(pos, dim, 8, EVENT_OBJECT_PROGRUN); - pos.y = oy+sy*0.0f; - pw->CreateButton(pos, dim, 22, EVENT_OBJECT_PROGEDIT); + if (!(CRobotMain::GetInstancePointer()->GetRetroMode())) { + ddim.x = dim.x*5.1f; + ddim.y = dim.y*2.0f; + pos.x = ox+sx*0.0f; + pos.y = oy+sy*0.0f; + pw->CreateList(pos, ddim, -1, EVENT_OBJECT_PROGLIST, 1.10f); + UpdateScript(pw); + + pos.x = ox+sx*5.2f; + pos.y = oy+sy*1.0f; + pw->CreateButton(pos, dim, 8, EVENT_OBJECT_PROGRUN); + pos.y = oy+sy*0.0f; + pw->CreateButton(pos, dim, 22, EVENT_OBJECT_PROGEDIT); + } } if ( type == OBJECT_HUMAN || diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 2fde567..8dedb8c 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -6795,6 +6795,10 @@ const char* CRobotMain::GetFilesDir() return m_dialog->GetFilesDir().c_str(); } +bool CRobotMain::GetRetroMode() +{ + return m_retroStyle; +} //! Change the player's name void CRobotMain::SetGamerName(const char *name) diff --git a/src/object/robotmain.h b/src/object/robotmain.h index 181a1cb..0bcd2dc 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -304,6 +304,7 @@ public: const char* GetSavegameDir(); const char* GetPublicDir(); const char* GetFilesDir(); + bool GetRetroMode(); void SetGamerName(const char *name); char* GetGamerName(); @@ -447,6 +448,7 @@ protected: int m_delayWriteMessage; int m_movieInfoIndex; + //Level Checker flags bool m_beginObject; bool m_terrainGenerate; bool m_terrainInitTextures; @@ -454,7 +456,7 @@ protected: bool m_terrainCreate; int m_version; // Mission file version - bool m_retroStyle; // Retro style + bool m_retroStyle; // Retro bool m_immediatSatCom; // SatCom immediately? bool m_beginSatCom; // messages SatCom poster? bool m_movieLock; // movie in progress? -- cgit v1.2.3-1-g7c22 From 5810fdd717a0ff0c0b5ceb75581d8443716a3fd0 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Sun, 24 Mar 2013 21:31:31 +0100 Subject: In Retro mode, robot's lights always blink. --- src/object/brain.cpp | 2 +- src/object/object.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'src/object') diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 1f428b7..53f77cf 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -1288,7 +1288,7 @@ bool CBrain::CreateInterface(bool bSelect) type == OBJECT_BEE || type == OBJECT_WORM ) // vehicle? { - if (!(CRobotMain::GetInstancePointer()->GetRetroMode())) { + if (!(m_main->GetRetroMode())) { ddim.x = dim.x*5.1f; ddim.y = dim.y*2.0f; pos.x = ox+sx*0.0f; diff --git a/src/object/object.cpp b/src/object/object.cpp index d6ac681..a0a3f09 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -6980,7 +6980,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 || @@ -7034,7 +7034,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; @@ -7157,7 +7157,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 -- cgit v1.2.3-1-g7c22 From 43c39f60cd7923e21eb676be3217feb39a4b0496 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Mon, 25 Mar 2013 16:12:18 +0100 Subject: Added option "zoom=x;y;z" to CreateObject in mission files --- src/object/robotmain.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 8dedb8c..f27438f 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -4398,6 +4398,10 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) obj->SetCheckToken(OpInt(line, "checkToken", 1)); obj->SetManual(OpInt(line, "manual", 0)); + Math::Vector zoom = OpDir(line, "zoom"); + if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f) + obj->SetZoom(0, zoom); + CMotion* motion = obj->GetMotion(); if (motion != nullptr) { -- cgit v1.2.3-1-g7c22 From df5edc703c7241279116d2bbfe08351d0c3c2a4b Mon Sep 17 00:00:00 2001 From: krzys-h Date: Tue, 26 Mar 2013 15:33:54 +0100 Subject: Added interface button for AlienSpider explosion Issue #142 --- src/object/brain.cpp | 93 +++++++++++++++++++++++++++++++++++----------------- src/object/brain.h | 1 + 2 files changed, 64 insertions(+), 30 deletions(-) (limited to 'src/object') diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 53f77cf..2cd7170 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -602,6 +602,11 @@ bool CBrain::EventProcess(const Event &event) //? err = StartTaskFireAnt(); } + if ( action == EVENT_OBJECT_SPIDEREXPLO && m_primaryTask == 0 ) + { + err = StartTaskSpiderExplo(); + } + if ( action == EVENT_OBJECT_PEN0 ) // up { err = StartTaskPen(false, m_object->GetTraceColor()); @@ -1077,6 +1082,24 @@ Error CBrain::StartTaskFire(float delay) return err; } +// Explodes spider. + +Error CBrain::StartTaskSpiderExplo() +{ + Error err; + + if ( m_primaryTask != 0 ) + { + delete m_primaryTask; // stops the current task + m_primaryTask = 0; + } + + m_primaryTask = new CTaskManager(m_object); + err = m_primaryTask->StartTaskSpiderExplo(); + UpdateInterface(); + return err; +} + // Shoots to the ant. Error CBrain::StartTaskFireAnt(Math::Vector impact) @@ -1580,6 +1603,15 @@ bool CBrain::CreateInterface(bool bSelect) //? pw->CreateButton(pos, dim, 41, EVENT_OBJECT_LIMIT); } + if ( type == OBJECT_SPIDER ) + { + pos.x = ox+sx*7.7f; + pos.y = oy+sy*0.5f; + pb = pw->CreateButton(pos, dim, 42, EVENT_OBJECT_SPIDEREXPLO); + pb->SetImmediat(true); + DefaultEnter(pw, EVENT_OBJECT_SPIDEREXPLO); + } + if ( type == OBJECT_MOBILEdr && m_object->GetManual() ) // scribbler in manual mode? { @@ -2136,37 +2168,38 @@ void CBrain::UpdateInterface() bEnable = ( m_primaryTask == 0 && m_program == -1 ); - EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord)); - EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord); - EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable); - EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable); - EnableInterface(pw, EVENT_OBJECT_UP, bEnable); - EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable); - EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable); - EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable); - EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable); - EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable); - EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable); - EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable); - EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable); - EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable); - EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable); - EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable); - EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable); - EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable); - EnableInterface(pw, EVENT_OBJECT_RESET, bEnable); + EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord)); + EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord); + EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable); + EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable); + EnableInterface(pw, EVENT_OBJECT_UP, bEnable); + EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable); + EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable); + EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable); + EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable); + EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable); + EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable); + EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable); + EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable); + EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable); + EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable); + EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable); + EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable); + EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable); + EnableInterface(pw, EVENT_OBJECT_SPIDEREXPLO, bEnable); + EnableInterface(pw, EVENT_OBJECT_RESET, bEnable); #if _TEEN - EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable); - EnableInterface(pw, EVENT_OBJECT_REC, bEnable); - EnableInterface(pw, EVENT_OBJECT_STOP, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable); + EnableInterface(pw, EVENT_OBJECT_REC, bEnable); + EnableInterface(pw, EVENT_OBJECT_STOP, bEnable); #endif if ( type == OBJECT_HUMAN ) // builder? diff --git a/src/object/brain.h b/src/object/brain.h index 5656f62..eba8004 100644 --- a/src/object/brain.h +++ b/src/object/brain.h @@ -133,6 +133,7 @@ public: Error StartTaskShield(TaskShieldMode mode); Error StartTaskFire(float delay); Error StartTaskFireAnt(Math::Vector impact); + Error StartTaskSpiderExplo(); Error StartTaskGunGoal(float dirV, float dirH); Error StartTaskReset(Math::Vector goal, Math::Vector angle); -- cgit v1.2.3-1-g7c22 From 0691460682a953770d54b9e6ceda4f18b92a510d Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 27 Mar 2013 15:30:34 +0100 Subject: Added button for grab()/drop() for AlienWasp --- src/object/brain.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/object') diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 2cd7170..52db776 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -1389,8 +1389,9 @@ bool CBrain::CreateInterface(bool bSelect) pw->CreateButton(pos, dim, 33, EVENT_OBJECT_MFRONT); } - if ( type == OBJECT_MOBILEsa && // underwater? - !m_object->GetTrainer() ) + if ( ( type == OBJECT_MOBILEsa && // underwater? + !m_object->GetTrainer() ) || + type == OBJECT_BEE ) { pos.x = ox+sx*7.7f; pos.y = oy+sy*0.5f; -- cgit v1.2.3-1-g7c22 From 8f379e5cf12a35ca9a32f34f85f42765c53cba47 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 27 Mar 2013 19:55:27 +0100 Subject: Changes to Scribbler interface --- src/object/brain.cpp | 14 ++------------ src/object/robotmain.cpp | 15 +++++++++------ 2 files changed, 11 insertions(+), 18 deletions(-) (limited to 'src/object') diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 52db776..fa3e425 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -1944,9 +1944,7 @@ bool CBrain::CreateInterface(bool bSelect) void CBrain::UpdateInterface(float rTime) { Ui::CWindow* pw; -/* TODO: #if _TEEN Ui::CButton* pb; -#endif*/ Ui::CGauge* pg; Ui::CCompass* pc; Ui::CGroup* pgr; @@ -2058,8 +2056,7 @@ void CBrain::UpdateInterface(float rTime) pc->SetState(Ui::STATE_VISIBLE, m_main->GetShowMap()); } -#if _TEEN - pb = (CButton*)pw->SearchControl(EVENT_OBJECT_REC); + pb = (Ui::CButton*)pw->SearchControl(EVENT_OBJECT_REC); if ( pb != 0 ) { if ( m_bTraceRecord && Math::Mod(m_time, 0.4f) >= 0.2f ) @@ -2071,7 +2068,6 @@ void CBrain::UpdateInterface(float rTime) pb->ClearState(Ui::STATE_CHECK); } } -#endif bOnBoard = m_camera->GetType() == Gfx::CAM_TYPE_ONBOARD; @@ -2151,10 +2147,8 @@ void CBrain::UpdateInterface() Ui::CWindow* pw; Ui::CButton* pb; Ui::CSlider* ps; -#if _TEEN - CColor* pc; + Ui::CColor* pc; int color; -#endif bool bEnable, bFly, bRun; char title[100]; @@ -2189,7 +2183,6 @@ void CBrain::UpdateInterface() EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable); EnableInterface(pw, EVENT_OBJECT_SPIDEREXPLO, bEnable); EnableInterface(pw, EVENT_OBJECT_RESET, bEnable); -#if _TEEN EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable); EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable); EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable); @@ -2201,7 +2194,6 @@ void CBrain::UpdateInterface() EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable); EnableInterface(pw, EVENT_OBJECT_REC, bEnable); EnableInterface(pw, EVENT_OBJECT_STOP, bEnable); -#endif if ( type == OBJECT_HUMAN ) // builder? { @@ -2352,7 +2344,6 @@ void CBrain::UpdateInterface() CheckInterface(pw, EVENT_OBJECT_MFRONT, m_manipStyle==EVENT_OBJECT_MFRONT); } -#if _TEEN if ( m_object->GetTraceDown() ) { pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_PEN0)); @@ -2452,7 +2443,6 @@ void CBrain::UpdateInterface() pc->ClearState(Ui::STATE_CHECK); } } -#endif } // Updates the list of programs. diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index f27438f..40157e2 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -4328,12 +4328,13 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) Math::Vector pos = OpPos(line, "pos")*g_unit; float dir = OpFloat(line, "dir", 0.0f)*Math::PI; + bool trainer = OpInt(line, "trainer", 0); CObject* obj = CreateObject(pos, dir, OpFloat(line, "z", 1.0f), OpFloat(line, "h", 0.0f), type, OpFloat(line, "power", 1.0f), - OpInt(line, "trainer", 0), + trainer, OpInt(line, "toy", 0), OpInt(line, "option", 0)); @@ -4395,12 +4396,14 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) obj->SetShield(OpFloat(line, "shield", 1.0f)); obj->SetMagnifyDamage(OpFloat(line, "magnifyDamage", 1.0f)); obj->SetClip(OpInt(line, "clip", 1)); - obj->SetCheckToken(OpInt(line, "checkToken", 1)); - obj->SetManual(OpInt(line, "manual", 0)); + obj->SetCheckToken(m_version >= 2 ? trainer : OpInt(line, "manual", 1)); + obj->SetManual(m_version >= 2 ? !trainer : OpInt(line, "manual", 0)); - Math::Vector zoom = OpDir(line, "zoom"); - if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f) - obj->SetZoom(0, zoom); + if(m_version >= 2) { + Math::Vector zoom = OpDir(line, "zoom"); + if (zoom.x != 0.0f || zoom.y != 0.0f || zoom.z != 0.0f) + obj->SetZoom(0, zoom); + } CMotion* motion = obj->GetMotion(); if (motion != nullptr) -- cgit v1.2.3-1-g7c22 From 672abbbbca5bd12441a2e3ebca0d04bfa529e84f Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 27 Mar 2013 20:38:36 +0100 Subject: Removed "X" button --- src/object/robotmain.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 40157e2..9afbe4a 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -1136,13 +1136,13 @@ void CRobotMain::ChangePhase(Phase phase) if (m_mapImage) m_map->SetFixImage(m_mapFilename); - Math::Point ddim; + /*Math::Point ddim; pos.x = 620.0f/640.0f; pos.y = 460.0f/480.0f; ddim.x = 20.0f/640.0f; ddim.y = 20.0f/480.0f; - m_interface->CreateButton(pos, ddim, 11, EVENT_BUTTON_QUIT); + m_interface->CreateButton(pos, ddim, 11, EVENT_BUTTON_QUIT);*/ if (m_immediatSatCom && !loading && m_infoFilename[SATCOM_HUSTON][0] != 0) -- cgit v1.2.3-1-g7c22 From 8659fb984f4fe5495d5a3ddbeeb7bd592f0c4a4c Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 27 Mar 2013 22:20:50 +0100 Subject: Added option to lock SatCom --- src/object/robotmain.cpp | 5 ++++- src/object/robotmain.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 9afbe4a..2df0719 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -659,6 +659,7 @@ CRobotMain::CRobotMain(CApplication* app) m_retroStyle = false; m_immediatSatCom = false; m_beginSatCom = false; + m_lockedSatCom = false; m_movieLock = false; m_satComLock = false; m_editLock = false; @@ -2027,7 +2028,7 @@ void CRobotMain::FlushDisplayInfo() //! index: SATCOM_* void CRobotMain::StartDisplayInfo(int index, bool movie) { - if (m_cmdEdit || m_satComLock) return; + if (m_cmdEdit || m_satComLock || m_lockedSatCom) return; CObject* obj = GetSelect(); bool human = obj != nullptr && obj->GetType() == OBJECT_HUMAN; @@ -3789,6 +3790,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_displayText->SetDelay(1.0f); m_displayText->SetEnable(true); m_immediatSatCom = false; + m_lockedSatCom = false; m_endingWinRank = 0; m_endingLostRank = 0; m_endTakeTotal = 0; @@ -3908,6 +3910,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) strcpy(m_infoFilename[SATCOM_HUSTON], path.c_str()); m_immediatSatCom = OpInt(line, "immediat", 0); + if(m_version >= 2) m_beginSatCom = m_lockedSatCom = OpInt(line, "lock", 0); } if (Cmd(line, "Satellite") && !resetObject) diff --git a/src/object/robotmain.h b/src/object/robotmain.h index 0bcd2dc..fe5fbd5 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -459,6 +459,7 @@ protected: bool m_retroStyle; // Retro bool m_immediatSatCom; // SatCom immediately? bool m_beginSatCom; // messages SatCom poster? + bool m_lockedSatCom; // SatCom locked? bool m_movieLock; // movie in progress? bool m_satComLock; // call of SatCom is possible? bool m_editLock; // edition in progress? -- cgit v1.2.3-1-g7c22 From 8777c126de292ca3591ffc8af820638643a19ba2 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Fri, 29 Mar 2013 10:03:35 +0100 Subject: Added SatCom translations --- src/object/robotmain.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/object') diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 2df0719..c1e4140 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -1196,7 +1196,7 @@ void CRobotMain::ChangePhase(Phase phase) pe->SetFontType(Gfx::FONT_COLOBOT); pe->SetEditCap(false); pe->SetHighlightCap(false); - pe->ReadText(std::string("help/win.txt")); + pe->ReadText(std::string("help/") + m_app->GetLanguageChar() + std::string("/win.txt")); } else { @@ -2020,7 +2020,7 @@ void CRobotMain::FlushDisplayInfo() m_infoFilename[i][0] = 0; m_infoPos[i] = 0; } - strcpy(m_infoFilename[SATCOM_OBJECT], "help/objects.txt"); + strcpy(m_infoFilename[SATCOM_OBJECT], "help/") + m_app->GetLanguageChar() + std::string("/objects.txt"); m_infoIndex = 0; } @@ -3072,7 +3072,7 @@ void CRobotMain::HelpObject() CObject* obj = GetSelect(); if (obj == nullptr) return; - const char* filename = GetHelpFilename(obj->GetType()); + const char* filename = GetHelpFilename(obj->GetType()).c_str(); if (filename[0] == 0) return; StartDisplayInfo(filename, -1); -- cgit v1.2.3-1-g7c22 From e607fed265070be8c518d4302d8b76f738421fb3 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Sat, 30 Mar 2013 14:45:55 +0100 Subject: Fixed power cell bug (#120) --- src/object/object.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/object') diff --git a/src/object/object.cpp b/src/object/object.cpp index a0a3f09..23a757a 100644 --- a/src/object/object.cpp +++ b/src/object/object.cpp @@ -2658,7 +2658,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height, if ( m_type == OBJECT_ENERGY ) { - modelManager->AddModelReference("energy.mod", false, rank); + modelManager->AddModelCopy("energy.mod", false, rank); SetPosition(0, pos); SetAngleY(0, angle); SetFloorHeight(0.0f); @@ -2841,7 +2841,7 @@ bool CObject::CreateBuilding(Math::Vector pos, float angle, float height, if ( m_type == OBJECT_STATION ) { - modelManager->AddModelReference("station.mod", false, rank); + modelManager->AddModelCopy("station.mod", false, rank); SetPosition(0, pos); SetAngleY(0, angle); SetFloorHeight(0.0f); @@ -3207,7 +3207,14 @@ bool CObject::CreateResource(Math::Vector pos, float angle, ObjectType type, if ( type == OBJECT_MARKKEYd ) name = "crossd.mod"; if ( type == OBJECT_EGG ) name = "egg.mod"; - modelManager->AddModelReference(name, false, rank); + if (type == OBJECT_POWER || type == OBJECT_ATOMIC) + { + modelManager->AddModelCopy(name, false, rank); + } + else + { + modelManager->AddModelReference(name, false, rank); + } SetPosition(0, pos); SetAngleY(0, angle); -- cgit v1.2.3-1-g7c22