summaryrefslogtreecommitdiffstats
path: root/src/object/motion/motionmother.cpp
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2012-12-26 20:58:02 +0100
committerPiotr Dziwinski <piotrdz@gmail.com>2012-12-26 20:58:02 +0100
commit5574eccebd16ae38a2a21ed202d1f9d1ba8f67a4 (patch)
treeb742447d1b3262c1541e9c0fe037ad35be467dff /src/object/motion/motionmother.cpp
parentf9f15a2f3f80f968a64e76141b1e6fa5e28c7232 (diff)
downloadcolobot-5574eccebd16ae38a2a21ed202d1f9d1ba8f67a4.tar.gz
colobot-5574eccebd16ae38a2a21ed202d1f9d1ba8f67a4.tar.bz2
colobot-5574eccebd16ae38a2a21ed202d1f9d1ba8f67a4.zip
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
Diffstat (limited to 'src/object/motion/motionmother.cpp')
-rw-r--r--src/object/motion/motionmother.cpp74
1 files changed, 23 insertions, 51 deletions
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;
}