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/motionspider.cpp | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) (limited to 'src/object/motion/motionspider.cpp') 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; } -- cgit v1.2.3-1-g7c22