From 083f21652949d48fc1c9dada0cfb8937e9ee2b71 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Wed, 22 Jul 2015 12:45:50 +0200 Subject: [PATCH] Team object recoloring (#514) --- src/app/app.cpp | 1 - src/graphics/engine/engine.cpp | 25 ++- src/graphics/engine/engine.h | 10 + src/graphics/engine/oldmodelmanager.cpp | 54 +++-- src/graphics/engine/oldmodelmanager.h | 22 +- src/object/auto/autofactory.cpp | 9 +- src/object/motion/motionvehicle.cpp | 150 ++++++------- src/object/object_create_params.h | 16 ++ src/object/object_factory.cpp | 278 ++++++++++++------------ src/object/object_manager.cpp | 43 ++-- src/object/object_manager.h | 5 + src/object/old_object.cpp | 4 +- src/object/robotmain.cpp | 81 ++++--- src/object/robotmain.h | 5 +- src/object/subclass/exchange_post.cpp | 2 + src/object/task/taskbuild.cpp | 11 +- 16 files changed, 423 insertions(+), 293 deletions(-) diff --git a/src/app/app.cpp b/src/app/app.cpp index 730401f7..7a83b072 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -746,7 +746,6 @@ bool CApplication::ChangeVideoConfig(const Gfx::DeviceConfig &newConfig) m_device->ConfigChanged(m_deviceConfig); m_engine->ResetAfterDeviceChanged(); - m_controller->GetRobotMain()->ResetAfterDeviceChanged(); return true; } diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index bdc816e2..7bf5e73e 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -380,6 +380,8 @@ void CEngine::ResetAfterDeviceChanged() FlushTextureCache(); + CRobotMain::GetInstancePointer()->ResetAfterDeviceChanged(); + LoadAllTextures(); } @@ -2321,6 +2323,7 @@ bool IsExcludeColor(Math::Point *exclude, int x, int y) bool CEngine::ChangeTextureColor(const std::string& texName, + const std::string& srcName, Color colorRef1, Color colorNew1, Color colorRef2, Color colorNew2, float tolerance1, float tolerance2, @@ -2330,11 +2333,11 @@ bool CEngine::ChangeTextureColor(const std::string& texName, DeleteTexture(texName); CImage img; - if (!img.Load(texName)) + if (!img.Load(srcName)) { std::string error = img.GetError(); - GetLogger()->Error("Couldn't load texture '%s': %s, blacklisting\n", texName.c_str(), error.c_str()); - m_texBlacklist.insert(texName); + GetLogger()->Error("Couldn't load texture '%s': %s, blacklisting\n", srcName.c_str(), error.c_str()); + m_texBlacklist.insert(srcName); return false; } @@ -2447,12 +2450,19 @@ bool CEngine::ChangeTextureColor(const std::string& texName, m_texNameMap[texName] = tex; m_revTexNameMap[tex] = texName; - // This updates the texture to updated Texture struct on the objects - LoadAllTextures(); - return true; } +bool CEngine::ChangeTextureColor(const std::string& texName, + Color colorRef1, Color colorNew1, + Color colorRef2, Color colorNew2, + float tolerance1, float tolerance2, + Math::Point ts, Math::Point ti, + Math::Point *exclude, float shift, bool hsv) +{ + return ChangeTextureColor(texName, texName, colorRef1, colorNew1, colorRef2, colorNew2, tolerance1, tolerance2, ts, ti, exclude, shift, hsv); +} + void CEngine::DeleteTexture(const std::string& texName) { auto it = m_texNameMap.find(texName); @@ -2832,7 +2842,6 @@ void CEngine::SetTextureFilterMode(TexFilter value) m_defaultTexParams.filter = m_terrainTexParams.filter = value; m_defaultTexParams.mipmap = m_terrainTexParams.mipmap = (value == TEX_FILTER_TRILINEAR); ResetAfterDeviceChanged(); - CRobotMain::GetInstancePointer()->ResetAfterDeviceChanged(); } TexFilter CEngine::GetTextureFilterMode() @@ -2848,7 +2857,6 @@ void CEngine::SetTextureMipmapLevel(int value) m_textureMipmapLevel = value; ResetAfterDeviceChanged(); - CRobotMain::GetInstancePointer()->ResetAfterDeviceChanged(); } int CEngine::GetTextureMipmapLevel() @@ -2865,7 +2873,6 @@ void CEngine::SetTextureAnisotropyLevel(int value) m_textureAnisotropy = value; ResetAfterDeviceChanged(); - CRobotMain::GetInstancePointer()->ResetAfterDeviceChanged(); } int CEngine::GetTextureAnisotropyLevel() diff --git a/src/graphics/engine/engine.h b/src/graphics/engine/engine.h index f8d85cdd..aee1b24e 100644 --- a/src/graphics/engine/engine.h +++ b/src/graphics/engine/engine.h @@ -959,6 +959,15 @@ public: bool LoadAllTextures(); //! Changes colors in a texture + //@{ + bool ChangeTextureColor(const std::string& texName, + const std::string& srcName, + Color colorRef1, Color colorNew1, + Color colorRef2, Color colorNew2, + float tolerance1, float tolerance2, + Math::Point ts, Math::Point ti, + Math::Point *exclude = nullptr, + float shift = 0.0f, bool hsv = false); bool ChangeTextureColor(const std::string& texName, Color colorRef1, Color colorNew1, Color colorRef2, Color colorNew2, @@ -966,6 +975,7 @@ public: Math::Point ts, Math::Point ti, Math::Point *exclude = nullptr, float shift = 0.0f, bool hsv = false); + //@} //! Sets texture for given stage; if not present in cache, the texture is loaded /** If loading fails, returns false. */ diff --git a/src/graphics/engine/oldmodelmanager.cpp b/src/graphics/engine/oldmodelmanager.cpp index 3d42ef90..d00132ba 100644 --- a/src/graphics/engine/oldmodelmanager.cpp +++ b/src/graphics/engine/oldmodelmanager.cpp @@ -23,6 +23,7 @@ #include "common/logger.h" #include "common/resources/inputstream.h" +#include "common/stringutils.h" #include "graphics/engine/engine.h" @@ -42,7 +43,7 @@ COldModelManager::~COldModelManager() { } -bool COldModelManager::LoadModel(const std::string& fileName, bool mirrored) +bool COldModelManager::LoadModel(const std::string& fileName, bool mirrored, int variant) { GetLogger()->Debug("Loading model '%s'\n", fileName.c_str()); @@ -72,7 +73,10 @@ bool COldModelManager::LoadModel(const std::string& fileName, bool mirrored) if (mirrored) Mirror(modelInfo.triangles); - FileInfo fileInfo(fileName, mirrored); + if (variant != 0) + ChangeVariant(modelInfo.triangles, variant); + + FileInfo fileInfo(fileName, mirrored, variant); m_models[fileInfo] = modelInfo; m_engine->AddBaseObjTriangles(modelInfo.baseObjRank, modelInfo.triangles); @@ -80,15 +84,15 @@ bool COldModelManager::LoadModel(const std::string& fileName, bool mirrored) return true; } -bool COldModelManager::AddModelReference(const std::string& fileName, bool mirrored, int objRank) +bool COldModelManager::AddModelReference(const std::string& fileName, bool mirrored, int objRank, int variant) { - auto it = m_models.find(FileInfo(fileName, mirrored)); + auto it = m_models.find(FileInfo(fileName, mirrored, variant)); if (it == m_models.end()) { - if (!LoadModel(fileName, mirrored)) + if (!LoadModel(fileName, mirrored, variant)) return false; - it = m_models.find(FileInfo(fileName, mirrored)); + it = m_models.find(FileInfo(fileName, mirrored, variant)); } m_engine->SetObjectBaseRank(objRank, (*it).second.baseObjRank); @@ -96,15 +100,15 @@ bool COldModelManager::AddModelReference(const std::string& fileName, bool mirro return true; } -bool COldModelManager::AddModelCopy(const std::string& fileName, bool mirrored, int objRank) +bool COldModelManager::AddModelCopy(const std::string& fileName, bool mirrored, int objRank, int variant) { - auto it = m_models.find(FileInfo(fileName, mirrored)); + auto it = m_models.find(FileInfo(fileName, mirrored, variant)); if (it == m_models.end()) { - if (!LoadModel(fileName, mirrored)) + if (!LoadModel(fileName, mirrored, variant)) return false; - it = m_models.find(FileInfo(fileName, mirrored)); + it = m_models.find(FileInfo(fileName, mirrored, variant)); } int copyBaseObjRank = m_engine->CreateBaseObject(); @@ -116,14 +120,14 @@ bool COldModelManager::AddModelCopy(const std::string& fileName, bool mirrored, return true; } -bool COldModelManager::IsModelLoaded(const std::string& fileName, bool mirrored) +bool COldModelManager::IsModelLoaded(const std::string& fileName, bool mirrored, int variant) { - return m_models.count(FileInfo(fileName, mirrored)) > 0; + return m_models.count(FileInfo(fileName, mirrored, variant)) > 0; } -int COldModelManager::GetModelBaseObjRank(const std::string& fileName, bool mirrored) +int COldModelManager::GetModelBaseObjRank(const std::string& fileName, bool mirrored, int variant) { - auto it = m_models.find(FileInfo(fileName, mirrored)); + auto it = m_models.find(FileInfo(fileName, mirrored, variant)); if (it == m_models.end()) return -1; @@ -140,9 +144,9 @@ void COldModelManager::DeleteAllModelCopies() m_copiesBaseRanks.clear(); } -void COldModelManager::UnloadModel(const std::string& fileName, bool mirrored) +void COldModelManager::UnloadModel(const std::string& fileName, bool mirrored, int variant) { - auto it = m_models.find(FileInfo(fileName, mirrored)); + auto it = m_models.find(FileInfo(fileName, mirrored, variant)); if (it == m_models.end()) return; @@ -177,5 +181,23 @@ void COldModelManager::Mirror(std::vector& triangles) } } +void COldModelManager::ChangeVariant(std::vector& triangles, int variant) +{ + for (int i = 0; i < static_cast( triangles.size() ); i++) + { + if (triangles[i].tex1Name == "base1.png" || + triangles[i].tex1Name == "convert.png" || + triangles[i].tex1Name == "derrick.png" || + triangles[i].tex1Name == "factory.png" || + triangles[i].tex1Name == "lemt.png" || + triangles[i].tex1Name == "roller.png" || + triangles[i].tex1Name == "search.png" || + triangles[i].tex1Name == "drawer.png" || + triangles[i].tex1Name == "subm.png" ) + { + triangles[i].tex1Name += StrUtils::ToString(variant); + } + } } +} diff --git a/src/graphics/engine/oldmodelmanager.h b/src/graphics/engine/oldmodelmanager.h index e965aa1f..05c732f9 100644 --- a/src/graphics/engine/oldmodelmanager.h +++ b/src/graphics/engine/oldmodelmanager.h @@ -58,31 +58,33 @@ public: ~COldModelManager(); //! Loads a model from given file - bool LoadModel(const std::string& fileName, bool mirrored); + bool LoadModel(const std::string& fileName, bool mirrored, int variant = 0); //! Adds an instance of model to the given object rank as a reference to base object - bool AddModelReference(const std::string& fileName, bool mirrored, int objRank); + bool AddModelReference(const std::string& fileName, bool mirrored, int objRank, int variant = 0); //! Adds an instance of model to the given object rank as a copy (copied base object) - bool AddModelCopy(const std::string& fileName, bool mirrored, int objRank); + bool AddModelCopy(const std::string& fileName, bool mirrored, int objRank, int variant = 0); //! Returns true if given model is loaded - bool IsModelLoaded(const std::string& fileName, bool mirrored); + bool IsModelLoaded(const std::string& fileName, bool mirrored, int variant = 0); //! Returns the rank of base engine object of given loaded model - int GetModelBaseObjRank(const std::string& fileName, bool mirrored); + int GetModelBaseObjRank(const std::string& fileName, bool mirrored, int variant = 0); //! Deletes all copied objects void DeleteAllModelCopies(); //! Unloads the given model - void UnloadModel(const std::string& fileName, bool mirrored); + void UnloadModel(const std::string& fileName, bool mirrored, int variant = 0); //! Unloads all models void UnloadAllModels(); protected: //! Mirrors the model along the Z axis void Mirror(std::vector& triangles); + //! Changes variant + void ChangeVariant(std::vector& triangles, int variant); private: struct ModelInfo @@ -94,10 +96,12 @@ private: { std::string fileName; bool mirrored; + int variant; - inline FileInfo(const std::string& _fileName, bool _mirrored) + inline FileInfo(const std::string& _fileName, bool _mirrored, int _variant = 0) : fileName(_fileName) , mirrored(_mirrored) + , variant(_variant) {} inline bool operator<(const FileInfo& other) const @@ -108,6 +112,9 @@ private: if (compare > 0) return false; + if (variant < other.variant) + return true; + return !mirrored && mirrored != other.mirrored; } }; @@ -117,4 +124,3 @@ private: }; } // namespace Gfx - diff --git a/src/object/auto/autofactory.cpp b/src/object/auto/autofactory.cpp index 37e4a4af..5ab54a82 100644 --- a/src/object/auto/autofactory.cpp +++ b/src/object/auto/autofactory.cpp @@ -27,6 +27,7 @@ #include "object/brain.h" #include "object/old_object.h" +#include "object/object_create_params.h" #include "object/object_manager.h" #include "object/robotmain.h" #include "object/level/parserline.h" @@ -643,11 +644,15 @@ bool CAutoFactory::CreateVehicle() Math::Matrix* mat = m_object->GetWorldMatrix(0); pos = Transform(*mat, pos); - CObject* vehicle = CObjectManager::GetInstancePointer()->CreateObject(pos, angle, m_type); + ObjectCreateParams params; + params.pos = pos; + params.angle = angle; + params.type = m_type; + params.team = m_object->GetTeam(); + CObject* vehicle = CObjectManager::GetInstancePointer()->CreateObject(params); vehicle->SetLock(true); // not usable vehicle->SetRange(30.0f); - vehicle->SetTeam(m_object->GetTeam()); CPhysics* physics = vehicle->GetPhysics(); if ( physics != nullptr ) diff --git a/src/object/motion/motionvehicle.cpp b/src/object/motion/motionvehicle.cpp index f06c3fa0..d99c1dc7 100644 --- a/src/object/motion/motionvehicle.cpp +++ b/src/object/motion/motionvehicle.cpp @@ -112,14 +112,14 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEfi || type == OBJECT_MOBILEfs) { - modelManager->AddModelReference("lem1f.mod", false, rank); + modelManager->AddModelReference("lem1f.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEta || type == OBJECT_MOBILEtc || type == OBJECT_MOBILEti || type == OBJECT_MOBILEts) { - modelManager->AddModelReference("lem1t.mod", false, rank); + modelManager->AddModelReference("lem1t.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEwa || type == OBJECT_MOBILEwc || @@ -128,11 +128,11 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, { if (m_object->GetTrainer()) { - modelManager->AddModelReference("lem1wt.mod", false, rank); + modelManager->AddModelReference("lem1wt.mod", false, rank, m_object->GetTeam()); } else { - modelManager->AddModelReference("lem1w.mod", false, rank); + modelManager->AddModelReference("lem1w.mod", false, rank, m_object->GetTeam()); } } else if (type == OBJECT_MOBILEia || @@ -140,46 +140,46 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, type == OBJECT_MOBILEii || type == OBJECT_MOBILEis) { - modelManager->AddModelReference("lem1i.mod", false, rank); + modelManager->AddModelReference("lem1i.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILErt || type == OBJECT_MOBILErc || type == OBJECT_MOBILErr || type == OBJECT_MOBILErs) { - modelManager->AddModelReference("roller1.mod", false, rank); + modelManager->AddModelReference("roller1.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEsa) { - modelManager->AddModelReference("subm1.mod", false, rank); + modelManager->AddModelReference("subm1.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEtg) { - modelManager->AddModelReference("target.mod", false, rank); + modelManager->AddModelReference("target.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEwt) { - modelManager->AddModelReference("trainerw.mod", false, rank); + modelManager->AddModelReference("trainerw.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEft) { - modelManager->AddModelReference("trainerf.mod", false, rank); + modelManager->AddModelReference("trainerf.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEtt) { - modelManager->AddModelReference("trainert.mod", false, rank); + modelManager->AddModelReference("trainert.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEit) { - modelManager->AddModelReference("traineri.mod", false, rank); + modelManager->AddModelReference("traineri.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_MOBILEdr) { - modelManager->AddModelReference("drawer1.mod", false, rank); + modelManager->AddModelReference("drawer1.mod", false, rank, m_object->GetTeam()); } else if (type == OBJECT_APOLLO2) { - modelManager->AddModelReference("apolloj1.mod", false, rank); + modelManager->AddModelReference("apolloj1.mod", false, rank, m_object->GetTeam()); } m_object->SetPosition(pos); @@ -225,7 +225,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("lem2.mod", false, rank); + modelManager->AddModelReference("lem2.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetPartRotationZ(1, ARM_NEUTRAL_ANGLE1); @@ -234,7 +234,7 @@ void 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); - modelManager->AddModelReference("lem3.mod", false, rank); + modelManager->AddModelReference("lem3.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(5.0f, 0.0f, 0.0f)); m_object->SetPartRotationZ(2, ARM_NEUTRAL_ANGLE2); @@ -243,7 +243,7 @@ void 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); - modelManager->AddModelReference("lem4.mod", false, rank); + modelManager->AddModelReference("lem4.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(3, Math::Vector(3.5f, 0.0f, 0.0f)); m_object->SetPartRotationZ(3, ARM_NEUTRAL_ANGLE3); m_object->SetPartRotationX(3, Math::PI/2.0f); @@ -253,7 +253,7 @@ void 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); - modelManager->AddModelReference("lem5.mod", false, rank); + modelManager->AddModelReference("lem5.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(4, Math::Vector(1.5f, 0.0f, 0.0f)); m_object->SetPartRotationZ(4, -Math::PI*0.10f); @@ -262,7 +262,7 @@ void 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); - modelManager->AddModelReference("lem6.mod", false, rank); + modelManager->AddModelReference("lem6.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(5, Math::Vector(1.5f, 0.0f, 0.0f)); m_object->SetPartRotationZ(5, Math::PI*0.10f); } @@ -277,7 +277,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("lem2.mod", false, rank); + modelManager->AddModelReference("lem2.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetPartRotationZ(1, 110.0f*Math::PI/180.0f); @@ -286,7 +286,7 @@ void 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); - modelManager->AddModelReference("lem3.mod", false, rank); + modelManager->AddModelReference("lem3.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(5.0f, 0.0f, 0.0f)); m_object->SetPartRotationZ(2, -110.0f*Math::PI/180.0f); @@ -295,7 +295,7 @@ void 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); - modelManager->AddModelReference("lem4s.mod", false, rank); + modelManager->AddModelReference("lem4s.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(3, Math::Vector(3.5f, 0.0f, 0.0f)); m_object->SetPartRotationZ(3, -65.0f*Math::PI/180.0f); } @@ -310,7 +310,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("canon.mod", false, rank); + modelManager->AddModelReference("canon.mod", false, rank, m_object->GetTeam()); //? m_object->SetPartPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetPartPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetPartRotationZ(1, 0.0f); @@ -326,7 +326,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("canoni1.mod", false, rank); + modelManager->AddModelReference("canoni1.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(0.0f, 5.3f, 0.0f)); m_object->SetPartRotationZ(1, 0.0f); @@ -334,7 +334,7 @@ void 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); - modelManager->AddModelReference("canoni2.mod", false, rank); + modelManager->AddModelReference("canoni2.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(0.0f, 2.5f, 0.0f)); m_object->SetPartRotationZ(2, 0.0f); } @@ -350,7 +350,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(6, Math::Vector(-3.0f, 1.0f, -3.0f)); // Creates the left-back wheel. @@ -358,7 +358,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(7, Math::Vector(-3.0f, 1.0f, 3.0f)); m_object->SetPartRotationY(7, Math::PI); @@ -367,7 +367,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(8, Math::Vector(2.0f, 1.0f, -3.0f)); // Creates the left-front wheel. @@ -375,7 +375,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(9, Math::Vector(2.0f, 1.0f, 3.0f)); m_object->SetPartRotationY(9, Math::PI); } @@ -387,7 +387,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(6, Math::Vector(-2.0f, 1.0f, -3.0f)); // Creates the left-back wheel. @@ -395,7 +395,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(7, Math::Vector(-2.0f, 1.0f, 3.0f)); m_object->SetPartRotationY(7, Math::PI); @@ -404,7 +404,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(8, Math::Vector(3.0f, 1.0f, -3.0f)); // Creates the left-front wheel. @@ -412,7 +412,7 @@ void 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); - modelManager->AddModelReference("lem2w.mod", false, rank); + modelManager->AddModelReference("lem2w.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(9, Math::Vector(3.0f, 1.0f, 3.0f)); m_object->SetPartRotationY(9, Math::PI); } @@ -427,7 +427,7 @@ void 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); - modelManager->AddModelCopy("lem2t.mod", false, rank); + modelManager->AddModelCopy("lem2t.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); // Creates the left caterpillar. @@ -435,7 +435,7 @@ void 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); - modelManager->AddModelCopy("lem3t.mod", false, rank); + modelManager->AddModelCopy("lem3t.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); } @@ -449,7 +449,7 @@ void 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); - modelManager->AddModelCopy("roller2.mod", false, rank); + modelManager->AddModelCopy("roller2.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(6, Math::Vector(0.0f, 2.0f, -3.0f)); // Creates the left caterpillar. @@ -457,7 +457,7 @@ void 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); - modelManager->AddModelCopy("roller3.mod", false, rank); + modelManager->AddModelCopy("roller3.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(7, Math::Vector(0.0f, 2.0f, 3.0f)); } @@ -468,7 +468,7 @@ void 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); - modelManager->AddModelCopy("subm4.mod", false, rank); + modelManager->AddModelCopy("subm4.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(6, Math::Vector(0.0f, 1.0f, -3.0f)); // Creates the left caterpillar. @@ -476,7 +476,7 @@ void 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); - modelManager->AddModelCopy("subm5.mod", false, rank); + modelManager->AddModelCopy("subm5.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(7, Math::Vector(0.0f, 1.0f, 3.0f)); } @@ -487,7 +487,7 @@ void 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); - modelManager->AddModelCopy("drawer2.mod", false, rank); + modelManager->AddModelCopy("drawer2.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(6, Math::Vector(0.0f, 1.0f, -3.0f)); // Creates the left caterpillar. @@ -495,7 +495,7 @@ void 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); - modelManager->AddModelCopy("drawer3.mod", false, rank); + modelManager->AddModelCopy("drawer3.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(7, Math::Vector(0.0f, 1.0f, 3.0f)); } @@ -510,7 +510,7 @@ void 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); - modelManager->AddModelReference("lem2f.mod", false, rank); + modelManager->AddModelReference("lem2f.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(6, Math::Vector(1.7f, 3.0f, 0.0f)); // Creates the right-back foot. @@ -518,7 +518,7 @@ void 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); - modelManager->AddModelReference("lem2f.mod", false, rank); + modelManager->AddModelReference("lem2f.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(7, Math::Vector(-1.8f, 3.0f, -1.5f)); m_object->SetPartRotationY(7, 120.0f*Math::PI/180.0f); @@ -527,7 +527,7 @@ void 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); - modelManager->AddModelReference("lem2f.mod", false, rank); + modelManager->AddModelReference("lem2f.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(8, Math::Vector(-1.8f, 3.0f, 1.5f)); m_object->SetPartRotationY(8, -120.0f*Math::PI/180.0f); } @@ -566,7 +566,7 @@ void 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); - modelManager->AddModelReference(name, false, rank); + modelManager->AddModelReference(name, false, rank, m_object->GetTeam()); pos.x = table[i*9+j*3+0]; pos.y = table[i*9+j*3+1]; pos.z = table[i*9+j*3+2]; @@ -579,7 +579,7 @@ void 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); - modelManager->AddModelReference(name, true, rank); + modelManager->AddModelReference(name, true, rank, m_object->GetTeam()); pos.x = table[i*9+j*3+0]; pos.y = table[i*9+j*3+1]; pos.z = -table[i*9+j*3+2]; @@ -595,7 +595,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("roller2t.mod", false, rank); + modelManager->AddModelReference("roller2t.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(0.0f, 0.0f, 0.0f)); m_object->SetPartRotationZ(1, 0.0f); @@ -604,7 +604,7 @@ void 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); - modelManager->AddModelReference("roller3t.mod", false, rank); + modelManager->AddModelReference("roller3t.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(9.0f, 4.0f, 0.0f)); m_object->SetPartRotationZ(2, 0.0f); } @@ -616,7 +616,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("roller2c.mod", false, rank); + modelManager->AddModelReference("roller2c.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(3.0f, 4.6f, 0.0f)); m_object->SetPartRotationZ(1, Math::PI/8.0f); @@ -625,7 +625,7 @@ void 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); - modelManager->AddModelReference("roller3p.mod", false, rank); + modelManager->AddModelReference("roller3p.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(7.0f, 6.5f, 0.0f)); m_object->SetPartRotationZ(2, 0.0f); } @@ -637,7 +637,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("recover1.mod", false, rank); + modelManager->AddModelReference("recover1.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(2.0f, 5.0f, 0.0f)); // Creates the right arm. @@ -645,7 +645,7 @@ void 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); - modelManager->AddModelReference("recover2.mod", false, rank); + modelManager->AddModelReference("recover2.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(0.1f, 0.0f, -5.0f)); m_object->SetPartRotationZ(2, 126.0f*Math::PI/180.0f); @@ -654,7 +654,7 @@ void 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); - modelManager->AddModelReference("recover3.mod", false, rank); + modelManager->AddModelReference("recover3.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(3, Math::Vector(5.0f, 0.0f, -0.5f)); m_object->SetPartRotationZ(3, -144.0f*Math::PI/180.0f); @@ -663,7 +663,7 @@ void 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); - modelManager->AddModelReference("recover2.mod", true, rank); + modelManager->AddModelReference("recover2.mod", true, rank, m_object->GetTeam()); m_object->SetPartPosition(4, Math::Vector(0.1f, 0.0f, 5.0f)); m_object->SetPartRotationZ(4, 126.0f*Math::PI/180.0f); @@ -672,7 +672,7 @@ void 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); - modelManager->AddModelReference("recover3.mod", true, rank); + modelManager->AddModelReference("recover3.mod", true, rank, m_object->GetTeam()); m_object->SetPartPosition(5, Math::Vector(5.0f, 0.0f, 0.5f)); m_object->SetPartRotationZ(5, -144.0f*Math::PI/180.0f); } @@ -684,7 +684,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("roller2s.mod", false, rank); + modelManager->AddModelReference("roller2s.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(0.0f, 0.0f, 0.0f)); m_object->SetPartRotationZ(1, 0.0f); @@ -693,7 +693,7 @@ void 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); - modelManager->AddModelReference("roller3s.mod", false, rank); + modelManager->AddModelReference("roller3s.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(7.0f, 4.5f, 0.0f)); m_object->SetPartRotationZ(2, 0.0f); @@ -702,7 +702,7 @@ void 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); - modelManager->AddModelReference("roller4s.mod", false, rank); + modelManager->AddModelReference("roller4s.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(3, Math::Vector(0.0f, 1.0f, 0.0f)); m_object->SetPartRotationZ(3, 0.0f); } @@ -714,7 +714,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("subm2.mod", false, rank); + modelManager->AddModelReference("subm2.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(4.2f, 3.0f, 0.0f)); // Creates the right tong. @@ -722,7 +722,7 @@ void 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); - modelManager->AddModelReference("subm3.mod", false, rank); + modelManager->AddModelReference("subm3.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(2, Math::Vector(0.5f, 0.0f, -1.5f)); // Creates the left tong. @@ -730,7 +730,7 @@ void 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); - modelManager->AddModelReference("subm3.mod", true, rank); + modelManager->AddModelReference("subm3.mod", true, rank, m_object->GetTeam()); m_object->SetPartPosition(3, Math::Vector(0.5f, 0.0f, 1.5f)); } @@ -741,7 +741,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("drawer4.mod", false, rank); + modelManager->AddModelReference("drawer4.mod", false, rank, m_object->GetTeam()); m_object->SetPartPosition(1, Math::Vector(-3.0f, 3.0f, 0.0f)); // Creates the key. @@ -751,7 +751,7 @@ void 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); - modelManager->AddModelReference("drawer5.mod", false, rank); + modelManager->AddModelReference("drawer5.mod", false, rank, m_object->GetTeam()); m_posKey = Math::Vector(3.0f, 5.7f, 0.0f); m_object->SetPartPosition(2, m_posKey); m_object->SetPartRotationY(2, 90.0f*Math::PI/180.0f); @@ -765,7 +765,7 @@ void CMotionVehicle::Create(Math::Vector pos, float angle, ObjectType type, m_object->SetObjectRank(10+i, rank); m_object->SetObjectParent(10+i, 1); sprintf(name, "drawer%d.mod", 10+i); - modelManager->AddModelReference(name, false, rank); + modelManager->AddModelReference(name, false, rank, m_object->GetTeam()); m_object->SetPartPosition(10+i, Math::Vector(0.0f, 0.0f, 0.0f)); m_object->SetPartRotationY(10+i, 45.0f*Math::PI/180.0f*i); } @@ -780,7 +780,7 @@ void 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); - modelManager->AddModelReference("drawer5.mod", false, rank); + modelManager->AddModelReference("drawer5.mod", false, rank, m_object->GetTeam()); m_posKey = Math::Vector(0.2f, 4.1f, 0.0f); m_object->SetPartPosition(2, m_posKey); m_object->SetPartRotationY(2, 90.0f*Math::PI/180.0f); @@ -794,7 +794,7 @@ void CMotionVehicle::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); - modelManager->AddModelReference("apolloj2.mod", false, rank); // antenna + modelManager->AddModelReference("apolloj2.mod", false, rank, m_object->GetTeam()); // antenna m_object->SetPartPosition(1, Math::Vector(5.5f, 8.8f, 2.0f)); m_object->SetPartRotationY(1, -120.0f*Math::PI/180.0f); m_object->SetPartRotationZ(1, 45.0f*Math::PI/180.0f); @@ -803,7 +803,7 @@ void 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); - modelManager->AddModelReference("apolloj3.mod", false, rank); // camera + modelManager->AddModelReference("apolloj3.mod", false, rank, m_object->GetTeam()); // camera m_object->SetPartPosition(2, Math::Vector(5.5f, 2.8f, -2.0f)); m_object->SetPartRotationY(2, 30.0f*Math::PI/180.0f); @@ -812,28 +812,28 @@ void 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); - modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj4.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(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); - modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj4.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(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); - modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj4.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(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); - modelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj4.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(9, Math::Vector(5.75f, 1.65f, 5.00f)); // Creates mud guards. @@ -841,28 +841,28 @@ void 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); - modelManager->AddModelReference("apolloj6.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj6.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(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); - modelManager->AddModelReference("apolloj6.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj6.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(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); - modelManager->AddModelReference("apolloj5.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj5.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(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); - modelManager->AddModelReference("apolloj5.mod", false, rank); // wheel + modelManager->AddModelReference("apolloj5.mod", false, rank, m_object->GetTeam()); // wheel m_object->SetPartPosition(13, Math::Vector(5.75f, 1.65f, 5.00f)); } diff --git a/src/object/object_create_params.h b/src/object/object_create_params.h index 05d2db25..c00ba7a0 100644 --- a/src/object/object_create_params.h +++ b/src/object/object_create_params.h @@ -34,5 +34,21 @@ struct ObjectCreateParams bool trainer; bool toy; int option; + int team; int id; + + ObjectCreateParams() + { + pos = Math::Vector(0.0f, 0.0f, 0.0f); + angle = 0.0f; + type = OBJECT_NULL; + power = -1.0f; + zoom = 1.0f; + height = 0.0f; + trainer = false; + toy = false; + option = 0; + team = 0; + id = -1; + } }; diff --git a/src/object/object_factory.cpp b/src/object/object_factory.cpp index 6a9cf712..d4ef8c0d 100644 --- a/src/object/object_factory.cpp +++ b/src/object/object_factory.cpp @@ -305,6 +305,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object @@ -312,7 +313,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_PORTICO ) { - m_oldModelManager->AddModelReference("portico1.mod", false, rank); + m_oldModelManager->AddModelReference("portico1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -321,14 +322,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("portico2.mod", false, rank); + m_oldModelManager->AddModelReference("portico2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(0.0f, 67.0f, 0.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 1); - m_oldModelManager->AddModelReference("portico3.mod", false, rank); + m_oldModelManager->AddModelReference("portico3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(2, Math::Vector(0.0f, 0.0f, -33.0f)); obj->SetPartRotationY(2, 45.0f*Math::PI/180.0f); @@ -336,7 +337,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(3, rank); obj->SetObjectParent(3, 2); - m_oldModelManager->AddModelReference("portico4.mod", false, rank); + m_oldModelManager->AddModelReference("portico4.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(3, Math::Vector(50.0f, 0.0f, 0.0f)); obj->SetPartRotationY(3, -60.0f*Math::PI/180.0f); @@ -344,7 +345,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(4, rank); obj->SetObjectParent(4, 3); - m_oldModelManager->AddModelReference("portico5.mod", false, rank); + m_oldModelManager->AddModelReference("portico5.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(4, Math::Vector(35.0f, 0.0f, 0.0f)); obj->SetPartRotationY(4, -55.0f*Math::PI/180.0f); @@ -352,7 +353,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(5, rank); obj->SetObjectParent(5, 1); - m_oldModelManager->AddModelReference("portico3.mod", false, rank); + m_oldModelManager->AddModelReference("portico3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(5, Math::Vector(0.0f, 0.0f, 33.0f)); obj->SetPartRotationY(5, -45.0f*Math::PI/180.0f); @@ -360,7 +361,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(6, rank); obj->SetObjectParent(6, 5); - m_oldModelManager->AddModelReference("portico4.mod", false, rank); + m_oldModelManager->AddModelReference("portico4.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(6, Math::Vector(50.0f, 0.0f, 0.0f)); obj->SetPartRotationY(6, 60.0f*Math::PI/180.0f); @@ -368,7 +369,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(7, rank); obj->SetObjectParent(7, 6); - m_oldModelManager->AddModelReference("portico5.mod", false, rank); + m_oldModelManager->AddModelReference("portico5.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(7, Math::Vector(35.0f, 0.0f, 0.0f)); obj->SetPartRotationY(7, 55.0f*Math::PI/180.0f); @@ -376,7 +377,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(8, rank); obj->SetObjectParent(8, 0); - m_oldModelManager->AddModelReference("portico6.mod", false, rank); + m_oldModelManager->AddModelReference("portico6.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(8, Math::Vector(-35.0f, 50.0f, -35.0f)); obj->SetPartRotationY(8, -Math::PI/2.0f); obj->SetPartScale(8, 2.0f); @@ -385,14 +386,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(9, rank); obj->SetObjectParent(9, 8); - m_oldModelManager->AddModelReference("portico7.mod", false, rank); + m_oldModelManager->AddModelReference("portico7.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(9, Math::Vector(0.0f, 4.5f, 1.9f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(10, rank); obj->SetObjectParent(10, 0); - m_oldModelManager->AddModelReference("portico6.mod", false, rank); + m_oldModelManager->AddModelReference("portico6.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(10, Math::Vector(-35.0f, 50.0f, 35.0f)); obj->SetPartRotationY(10, -Math::PI/2.0f); obj->SetPartScale(10, 2.0f); @@ -401,7 +402,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(11, rank); obj->SetObjectParent(11, 10); - m_oldModelManager->AddModelReference("portico7.mod", false, rank); + m_oldModelManager->AddModelReference("portico7.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(11, Math::Vector(0.0f, 4.5f, 1.9f)); obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 28.0f, 0.0f), 45.5f, SOUND_BOUMm, 0.45f)); @@ -422,7 +423,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_BASE ) { - m_oldModelManager->AddModelReference("base1.mod", false, rank); + m_oldModelManager->AddModelReference("base1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -433,7 +434,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1+i, rank); obj->SetObjectParent(1+i, 0); - m_oldModelManager->AddModelReference("base2.mod", false, rank); + m_oldModelManager->AddModelReference("base2.mod", false, rank, obj->GetTeam()); Math::Point p = Math::RotatePoint(-Math::PI/4.0f*i, 27.8f); obj->SetPartPosition(1+i, Math::Vector(p.x, 30.0f, p.y)); obj->SetPartRotationY(1+i, Math::PI/4.0f*i); @@ -443,14 +444,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(10+i, rank); obj->SetObjectParent(10+i, 1+i); - m_oldModelManager->AddModelReference("base4.mod", false, rank); + m_oldModelManager->AddModelReference("base4.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(10+i, Math::Vector(23.5f, 0.0f, 7.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(18+i, rank); obj->SetObjectParent(18+i, 1+i); - m_oldModelManager->AddModelReference("base4.mod", true, rank); + m_oldModelManager->AddModelReference("base4.mod", true, rank, obj->GetTeam()); obj->SetPartPosition(18+i, Math::Vector(23.5f, 0.0f, -7.0f)); } @@ -458,7 +459,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(9, rank); obj->SetObjectParent(9, 0); - m_oldModelManager->AddModelReference("base3.mod", false, rank); // central pillar + m_oldModelManager->AddModelReference("base3.mod", false, rank, obj->GetTeam()); // central pillar obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 33.0f, 0.0f), 2.5f, SOUND_BOUMm, 0.45f)); obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 39.0f, 0.0f), 2.5f, SOUND_BOUMm, 0.45f)); @@ -488,7 +489,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_DERRICK ) { - m_oldModelManager->AddModelReference("derrick1.mod", false, rank); + m_oldModelManager->AddModelReference("derrick1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -497,7 +498,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("derrick2.mod", false, rank); + m_oldModelManager->AddModelReference("derrick2.mod", false, rank, obj->GetTeam()); obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 0.0f, 0.0f), 6.0f, SOUND_BOUMm, 0.45f)); obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 10.0f, 0.0f), 5.0f, SOUND_BOUMm, 0.45f)); @@ -511,7 +512,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_RESEARCH ) { - m_oldModelManager->AddModelReference("search1.mod", false, rank); + m_oldModelManager->AddModelReference("search1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -520,14 +521,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("search2.mod", false, rank); + m_oldModelManager->AddModelReference("search2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(0.0f, 13.0f, 0.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 1); - m_oldModelManager->AddModelReference("search3.mod", false, rank); + m_oldModelManager->AddModelReference("search3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(2, Math::Vector(0.0f, 4.0f, 0.0f)); obj->SetPartRotationZ(2, 35.0f*Math::PI/180.0f); @@ -543,7 +544,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_RADAR ) { - m_oldModelManager->AddModelReference("radar1.mod", false, rank); + m_oldModelManager->AddModelReference("radar1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -552,14 +553,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("radar2.mod", false, rank); + m_oldModelManager->AddModelReference("radar2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(0.0f, 5.0f, 0.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 0); - m_oldModelManager->AddModelReference("radar3.mod", false, rank); + m_oldModelManager->AddModelReference("radar3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(2, Math::Vector(0.0f, 11.0f, 0.0f)); obj->SetPartRotationY(2, -Math::PI/2.0f); @@ -567,7 +568,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(3, rank); obj->SetObjectParent(3, 2); - m_oldModelManager->AddModelReference("radar4.mod", false, rank); + m_oldModelManager->AddModelReference("radar4.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(3, Math::Vector(0.0f, 4.5f, 1.9f)); obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 3.0f, 0.0f), 6.0f, SOUND_BOUMm, 0.45f)); @@ -579,7 +580,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_ENERGY ) { - m_oldModelManager->AddModelCopy("energy.mod", false, rank); + m_oldModelManager->AddModelCopy("energy.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -597,7 +598,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_LABO ) { - m_oldModelManager->AddModelReference("labo1.mod", false, rank); + m_oldModelManager->AddModelReference("labo1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -606,7 +607,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("labo2.mod", false, rank); + m_oldModelManager->AddModelReference("labo2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(-9.0f, 3.0f, 0.0f)); obj->SetPartRotationZ(1, Math::PI/2.0f); @@ -614,14 +615,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 1); - m_oldModelManager->AddModelReference("labo3.mod", false, rank); + m_oldModelManager->AddModelReference("labo3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(2, Math::Vector(9.0f, -1.0f, 0.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(3, rank); obj->SetObjectParent(3, 2); - m_oldModelManager->AddModelReference("labo4.mod", false, rank); + m_oldModelManager->AddModelReference("labo4.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(3, Math::Vector(0.0f, 0.0f, 0.0f)); obj->SetPartRotationZ(3, 80.0f*Math::PI/180.0f); @@ -629,7 +630,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(4, rank); obj->SetObjectParent(4, 2); - m_oldModelManager->AddModelReference("labo4.mod", false, rank); + m_oldModelManager->AddModelReference("labo4.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(4, Math::Vector(0.0f, 0.0f, 0.0f)); obj->SetPartRotationZ(4, 80.0f*Math::PI/180.0f); obj->SetPartRotationY(4, Math::PI*2.0f/3.0f); @@ -638,7 +639,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(5, rank); obj->SetObjectParent(5, 2); - m_oldModelManager->AddModelReference("labo4.mod", false, rank); + m_oldModelManager->AddModelReference("labo4.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(5, Math::Vector(0.0f, 0.0f, 0.0f)); obj->SetPartRotationZ(5, 80.0f*Math::PI/180.0f); obj->SetPartRotationY(5, -Math::PI*2.0f/3.0f); @@ -657,7 +658,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_FACTORY ) { - m_oldModelManager->AddModelReference("factory1.mod", false, rank); + m_oldModelManager->AddModelReference("factory1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -668,7 +669,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1+i, rank); obj->SetObjectParent(1+i, 0); - m_oldModelManager->AddModelReference("factory2.mod", false, rank); + m_oldModelManager->AddModelReference("factory2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1+i, Math::Vector(10.0f, 2.0f*i, 10.0f)); obj->SetPartRotationZ(1+i, Math::PI/2.0f); obj->SetPartScaleZ(1+i, 0.30f); @@ -677,7 +678,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(10+i, rank); obj->SetObjectParent(10+i, 0); - m_oldModelManager->AddModelReference("factory2.mod", false, rank); + m_oldModelManager->AddModelReference("factory2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(10+i, Math::Vector(10.0f, 2.0f*i, -10.0f)); obj->SetPartRotationZ(10+i, -Math::PI/2.0f); obj->SetPartRotationY(10+i, Math::PI); @@ -714,7 +715,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_REPAIR ) { - m_oldModelManager->AddModelReference("repair1.mod", false, rank); + m_oldModelManager->AddModelReference("repair1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -723,7 +724,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("repair2.mod", false, rank); + m_oldModelManager->AddModelReference("repair2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(-11.0f, 13.5f, 0.0f)); obj->SetPartRotationZ(1, Math::PI/2.0f); @@ -738,7 +739,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_DESTROYER ) { - m_oldModelManager->AddModelReference("destroy1.mod", false, rank); + m_oldModelManager->AddModelReference("destroy1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -747,7 +748,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("destroy2.mod", false, rank); + m_oldModelManager->AddModelReference("destroy2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(0.0f, 0.0f, 0.0f)); m_terrain->AddBuildingLevel(pos, 7.0f, 9.0f, 1.0f, 0.5f); @@ -762,7 +763,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_STATION ) { - m_oldModelManager->AddModelCopy("station.mod", false, rank); + m_oldModelManager->AddModelCopy("station.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -778,7 +779,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_CONVERT ) { - m_oldModelManager->AddModelReference("convert1.mod", false, rank); + m_oldModelManager->AddModelReference("convert1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -787,14 +788,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("convert2.mod", false, rank); + m_oldModelManager->AddModelReference("convert2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(0.0f, 14.0f, 0.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 0); - m_oldModelManager->AddModelReference("convert3.mod", false, rank); + m_oldModelManager->AddModelReference("convert3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(2, Math::Vector(0.0f, 11.5f, 0.0f)); obj->SetPartRotationX(2, -Math::PI*0.35f); @@ -802,7 +803,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(3, rank); obj->SetObjectParent(3, 0); - m_oldModelManager->AddModelReference("convert3.mod", false, rank); + m_oldModelManager->AddModelReference("convert3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(3, Math::Vector(0.0f, 11.5f, 0.0f)); obj->SetPartRotationY(3, Math::PI); obj->SetPartRotationX(3, -Math::PI*0.35f); @@ -818,7 +819,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_TOWER ) { - m_oldModelManager->AddModelReference("tower.mod", false, rank); + m_oldModelManager->AddModelReference("tower.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -827,7 +828,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("roller2c.mod", false, rank); + m_oldModelManager->AddModelReference("roller2c.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(0.0f, 20.0f, 0.0f)); obj->SetPartRotationZ(1, Math::PI/2.0f); @@ -835,7 +836,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 1); - m_oldModelManager->AddModelReference("roller3c.mod", false, rank); + m_oldModelManager->AddModelReference("roller3c.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(2, Math::Vector(4.5f, 0.0f, 0.0f)); obj->SetPartRotationZ(2, 0.0f); @@ -853,7 +854,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_NUCLEAR ) { - m_oldModelManager->AddModelReference("nuclear1.mod", false, rank); + m_oldModelManager->AddModelReference("nuclear1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -862,7 +863,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("nuclear2.mod", false, rank); + m_oldModelManager->AddModelReference("nuclear2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(20.0f, 10.0f, 0.0f)); obj->SetPartRotationZ(1, 135.0f*Math::PI/180.0f); @@ -878,7 +879,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_PARA ) { - m_oldModelManager->AddModelReference("para.mod", false, rank); + m_oldModelManager->AddModelReference("para.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -903,7 +904,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_SAFE ) { - m_oldModelManager->AddModelReference("safe1.mod", false, rank); + m_oldModelManager->AddModelReference("safe1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -912,14 +913,14 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("safe2.mod", false, rank); + m_oldModelManager->AddModelReference("safe2.mod", false, rank, obj->GetTeam()); obj->SetPartScale(1, 1.05f); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 0); - m_oldModelManager->AddModelReference("safe3.mod", false, rank); + m_oldModelManager->AddModelReference("safe3.mod", false, rank, obj->GetTeam()); obj->SetPartScale(2, 1.05f); m_terrain->AddBuildingLevel(pos, 18.0f, 20.0f, 1.0f, 0.5f); @@ -932,7 +933,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_HUSTON ) { - m_oldModelManager->AddModelReference("huston1.mod", false, rank); + m_oldModelManager->AddModelReference("huston1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -941,7 +942,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("huston2.mod", false, rank); + m_oldModelManager->AddModelReference("huston2.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(0.0f, 39.0f, 30.0f)); obj->SetPartRotationY(1, -Math::PI/2.0f); obj->SetPartScale(1, 3.0f); @@ -950,7 +951,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 1); - m_oldModelManager->AddModelReference("huston3.mod", false, rank); + m_oldModelManager->AddModelReference("huston3.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(2, Math::Vector(0.0f, 4.5f, 1.9f)); obj->AddCrashSphere(CrashSphere(Math::Vector( 15.0f, 6.0f, -53.0f), 16.0f, SOUND_BOUMm, 0.45f)); @@ -973,7 +974,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_TARGET1 ) { - m_oldModelManager->AddModelReference("target1.mod", false, rank); + m_oldModelManager->AddModelReference("target1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(1.5f); @@ -1002,7 +1003,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_TARGET2 ) { - m_oldModelManager->AddModelReference("target2.mod", false, rank); + m_oldModelManager->AddModelReference("target2.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -1012,7 +1013,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_NEST ) { - m_oldModelManager->AddModelReference("nest.mod", false, rank); + m_oldModelManager->AddModelReference("nest.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -1024,7 +1025,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_START ) { - m_oldModelManager->AddModelReference("start.mod", false, rank); + m_oldModelManager->AddModelReference("start.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -1034,7 +1035,7 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) if ( type == OBJECT_END ) { - m_oldModelManager->AddModelReference("end.mod", false, rank); + m_oldModelManager->AddModelReference("end.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -1054,8 +1055,8 @@ CObjectUPtr CObjectFactory::CreateBuilding(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); pPower->obj->SetObjectRank(0, rank); - if ( power <= 1.0f ) m_oldModelManager->AddModelReference("power.mod", false, rank); - else m_oldModelManager->AddModelReference("atomic.mod", false, rank); + if ( power <= 1.0f ) m_oldModelManager->AddModelReference("power.mod", false, rank, obj->GetTeam()); + else m_oldModelManager->AddModelReference("atomic.mod", false, rank, obj->GetTeam()); pPower->obj->SetPosition(GetCharacter()->posPower); pPower->obj->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 1.0f, 0.0f), 1.0f, SOUND_BOUMm, 0.45f)); @@ -1093,6 +1094,7 @@ CObjectUPtr CObjectFactory::CreateResource(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object @@ -1133,11 +1135,11 @@ CObjectUPtr CObjectFactory::CreateResource(const ObjectCreateParams& params) if (type == OBJECT_POWER || type == OBJECT_ATOMIC) { - m_oldModelManager->AddModelCopy(name, false, rank); + m_oldModelManager->AddModelCopy(name, false, rank, obj->GetTeam()); } else { - m_oldModelManager->AddModelReference(name, false, rank); + m_oldModelManager->AddModelReference(name, false, rank, obj->GetTeam()); } obj->SetPosition(pos); @@ -1212,6 +1214,7 @@ CObjectUPtr CObjectFactory::CreateFlag(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); std::string name; @@ -1225,7 +1228,7 @@ CObjectUPtr CObjectFactory::CreateFlag(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference(name, false, rank); + m_oldModelManager->AddModelReference(name, false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1242,7 +1245,7 @@ CObjectUPtr CObjectFactory::CreateFlag(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1+i, rank); obj->SetObjectParent(1+i, i); - m_oldModelManager->AddModelReference(name, false, rank); + m_oldModelManager->AddModelReference(name, false, rank, obj->GetTeam()); if ( i == 0 ) obj->SetPartPosition(1+i, Math::Vector(0.15f, 5.0f, 0.0f)); else obj->SetPartPosition(1+i, Math::Vector(0.79f, 0.0f, 0.0f)); } @@ -1273,13 +1276,14 @@ CObjectUPtr CObjectFactory::CreateBarrier(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); if ( type == OBJECT_BARRIER0 ) { int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("barrier0.mod", false, rank); + m_oldModelManager->AddModelReference("barrier0.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1295,7 +1299,7 @@ CObjectUPtr CObjectFactory::CreateBarrier(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("barrier1.mod", false, rank); + m_oldModelManager->AddModelReference("barrier1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1313,7 +1317,7 @@ CObjectUPtr CObjectFactory::CreateBarrier(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("barrier2.mod", false, rank); + m_oldModelManager->AddModelReference("barrier2.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1331,7 +1335,7 @@ CObjectUPtr CObjectFactory::CreateBarrier(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("barrier3.mod", false, rank); + m_oldModelManager->AddModelReference("barrier3.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1370,6 +1374,7 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); if ( type == OBJECT_PLANT0 || type == OBJECT_PLANT1 || @@ -1380,11 +1385,11 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - if ( type == OBJECT_PLANT0 ) m_oldModelManager->AddModelReference("plant0.mod", false, rank); - if ( type == OBJECT_PLANT1 ) m_oldModelManager->AddModelReference("plant1.mod", false, rank); - if ( type == OBJECT_PLANT2 ) m_oldModelManager->AddModelReference("plant2.mod", false, rank); - if ( type == OBJECT_PLANT3 ) m_oldModelManager->AddModelReference("plant3.mod", false, rank); - if ( type == OBJECT_PLANT4 ) m_oldModelManager->AddModelReference("plant4.mod", false, rank); + if ( type == OBJECT_PLANT0 ) m_oldModelManager->AddModelReference("plant0.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT1 ) m_oldModelManager->AddModelReference("plant1.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT2 ) m_oldModelManager->AddModelReference("plant2.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT3 ) m_oldModelManager->AddModelReference("plant3.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT4 ) m_oldModelManager->AddModelReference("plant4.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1404,9 +1409,9 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - if ( type == OBJECT_PLANT5 ) m_oldModelManager->AddModelReference("plant5.mod", false, rank); - if ( type == OBJECT_PLANT6 ) m_oldModelManager->AddModelReference("plant6.mod", false, rank); - if ( type == OBJECT_PLANT7 ) m_oldModelManager->AddModelReference("plant7.mod", false, rank); + if ( type == OBJECT_PLANT5 ) m_oldModelManager->AddModelReference("plant5.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT6 ) m_oldModelManager->AddModelReference("plant6.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT7 ) m_oldModelManager->AddModelReference("plant7.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1422,8 +1427,8 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - if ( type == OBJECT_PLANT8 ) m_oldModelManager->AddModelReference("plant8.mod", false, rank); - if ( type == OBJECT_PLANT9 ) m_oldModelManager->AddModelReference("plant9.mod", false, rank); + if ( type == OBJECT_PLANT8 ) m_oldModelManager->AddModelReference("plant8.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT9 ) m_oldModelManager->AddModelReference("plant9.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1442,11 +1447,11 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - if ( type == OBJECT_PLANT10 ) m_oldModelManager->AddModelReference("plant10.mod", false, rank); - if ( type == OBJECT_PLANT11 ) m_oldModelManager->AddModelReference("plant11.mod", false, rank); - if ( type == OBJECT_PLANT12 ) m_oldModelManager->AddModelReference("plant12.mod", false, rank); - if ( type == OBJECT_PLANT13 ) m_oldModelManager->AddModelReference("plant13.mod", false, rank); - if ( type == OBJECT_PLANT14 ) m_oldModelManager->AddModelReference("plant14.mod", false, rank); + if ( type == OBJECT_PLANT10 ) m_oldModelManager->AddModelReference("plant10.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT11 ) m_oldModelManager->AddModelReference("plant11.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT12 ) m_oldModelManager->AddModelReference("plant12.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT13 ) m_oldModelManager->AddModelReference("plant13.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT14 ) m_oldModelManager->AddModelReference("plant14.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1466,11 +1471,11 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - if ( type == OBJECT_PLANT15 ) m_oldModelManager->AddModelReference("plant15.mod", false, rank); - if ( type == OBJECT_PLANT16 ) m_oldModelManager->AddModelReference("plant16.mod", false, rank); - if ( type == OBJECT_PLANT17 ) m_oldModelManager->AddModelReference("plant17.mod", false, rank); - if ( type == OBJECT_PLANT18 ) m_oldModelManager->AddModelReference("plant18.mod", false, rank); - if ( type == OBJECT_PLANT19 ) m_oldModelManager->AddModelReference("plant19.mod", false, rank); + if ( type == OBJECT_PLANT15 ) m_oldModelManager->AddModelReference("plant15.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT16 ) m_oldModelManager->AddModelReference("plant16.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT17 ) m_oldModelManager->AddModelReference("plant17.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT18 ) m_oldModelManager->AddModelReference("plant18.mod", false, rank, obj->GetTeam()); + if ( type == OBJECT_PLANT19 ) m_oldModelManager->AddModelReference("plant19.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1489,7 +1494,7 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("tree1.mod", false, rank); + m_oldModelManager->AddModelReference("tree1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1507,7 +1512,7 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("tree2.mod", false, rank); + m_oldModelManager->AddModelReference("tree2.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1525,7 +1530,7 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("tree3.mod", false, rank); + m_oldModelManager->AddModelReference("tree3.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1542,7 +1547,7 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("tree4.mod", false, rank); + m_oldModelManager->AddModelReference("tree4.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1558,7 +1563,7 @@ CObjectUPtr CObjectFactory::CreatePlant(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("tree5.mod", false, rank); + m_oldModelManager->AddModelReference("tree5.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1594,13 +1599,14 @@ CObjectUPtr CObjectFactory::CreateMushroom(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); if ( type == OBJECT_MUSHROOM1 ) { int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("mush1.mod", false, rank); + m_oldModelManager->AddModelReference("mush1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1616,7 +1622,7 @@ CObjectUPtr CObjectFactory::CreateMushroom(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("mush2.mod", false, rank); + m_oldModelManager->AddModelReference("mush2.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1652,13 +1658,14 @@ CObjectUPtr CObjectFactory::CreateQuartz(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); if ( type == OBJECT_QUARTZ0 ) { int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("quartz0.mod", false, rank); + m_oldModelManager->AddModelReference("quartz0.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1672,7 +1679,7 @@ CObjectUPtr CObjectFactory::CreateQuartz(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("quartz1.mod", false, rank); + m_oldModelManager->AddModelReference("quartz1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1686,7 +1693,7 @@ CObjectUPtr CObjectFactory::CreateQuartz(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("quartz2.mod", false, rank); + m_oldModelManager->AddModelReference("quartz2.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1700,7 +1707,7 @@ CObjectUPtr CObjectFactory::CreateQuartz(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_QUARTZ); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("quartz3.mod", false, rank); + m_oldModelManager->AddModelReference("quartz3.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1764,7 +1771,7 @@ CObjectUPtr CObjectFactory::CreateRoot(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("root0.mod", false, rank); + m_oldModelManager->AddModelReference("root0.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(2.0f); @@ -1785,7 +1792,7 @@ CObjectUPtr CObjectFactory::CreateRoot(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("root1.mod", false, rank); + m_oldModelManager->AddModelReference("root1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(2.0f); @@ -1806,7 +1813,7 @@ CObjectUPtr CObjectFactory::CreateRoot(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("root2.mod", false, rank); + m_oldModelManager->AddModelReference("root2.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(2.0f); @@ -1826,7 +1833,7 @@ CObjectUPtr CObjectFactory::CreateRoot(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("root3.mod", false, rank); + m_oldModelManager->AddModelReference("root3.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(2.0f); @@ -1848,7 +1855,7 @@ CObjectUPtr CObjectFactory::CreateRoot(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("root4.mod", false, rank); + m_oldModelManager->AddModelReference("root4.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(2.0f); @@ -1872,7 +1879,7 @@ CObjectUPtr CObjectFactory::CreateRoot(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("root4.mod", false, rank); + m_oldModelManager->AddModelReference("root4.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(2.0f); @@ -1881,7 +1888,7 @@ CObjectUPtr CObjectFactory::CreateRoot(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("root5.mod", false, rank); + m_oldModelManager->AddModelReference("root5.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(-5.0f, 28.0f, -4.0f)); obj->SetPartRotationX(1, -30.0f*Math::PI/180.0f); obj->SetPartRotationZ(1, 20.0f*Math::PI/180.0f); @@ -1925,13 +1932,14 @@ CObjectUPtr CObjectFactory::CreateHome(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); if ( type == OBJECT_HOME1 ) { int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("home1.mod", false, rank); + m_oldModelManager->AddModelReference("home1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(1.3f); @@ -1965,6 +1973,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object @@ -1985,7 +1994,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) if ( type == OBJECT_RUINbase ) name = "ruin9.mod"; if ( type == OBJECT_RUINhead ) name = "ruin10.mod"; - m_oldModelManager->AddModelReference(name, false, rank); + m_oldModelManager->AddModelReference(name, false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); @@ -1998,7 +2007,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) obj->SetObjectRank(6, rank); obj->SetObjectParent(6, 0); - m_oldModelManager->AddModelReference("ruin1w.mod", false, rank); + m_oldModelManager->AddModelReference("ruin1w.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(6, Math::Vector(-3.0f, 1.8f, -4.0f)); obj->SetPartRotationX(6, -Math::PI/2.0f); @@ -2009,7 +2018,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) obj->SetObjectRank(7, rank); obj->SetObjectParent(7, 0); - m_oldModelManager->AddModelReference("ruin1w.mod", false, rank); + m_oldModelManager->AddModelReference("ruin1w.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(7, Math::Vector(-3.0f, 1.0f, 3.0f)); obj->SetPartRotationY(7, Math::PI-0.3f); @@ -2021,7 +2030,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) obj->SetObjectRank(8, rank); obj->SetObjectParent(8, 0); - m_oldModelManager->AddModelReference("ruin1w.mod", false, rank); + m_oldModelManager->AddModelReference("ruin1w.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(8, Math::Vector(2.0f, 1.6f, -3.0f)); obj->SetPartRotationY(8, 0.3f); @@ -2032,7 +2041,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) obj->SetObjectRank(9, rank); obj->SetObjectParent(9, 0); - m_oldModelManager->AddModelReference("ruin1w.mod", false, rank); + m_oldModelManager->AddModelReference("ruin1w.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(9, Math::Vector(2.0f, 1.0f, 3.0f)); obj->SetPartRotationY(9, Math::PI-0.2f); @@ -2052,7 +2061,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) obj->SetObjectRank(7, rank); obj->SetObjectParent(7, 0); - m_oldModelManager->AddModelReference("ruin1w.mod", false, rank); + m_oldModelManager->AddModelReference("ruin1w.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(7, Math::Vector(-3.0f, 1.0f, 3.0f)); obj->SetPartRotationY(7, Math::PI+0.3f); @@ -2064,7 +2073,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) obj->SetObjectRank(9, rank); obj->SetObjectParent(9, 0); - m_oldModelManager->AddModelReference("ruin1w.mod", false, rank); + m_oldModelManager->AddModelReference("ruin1w.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(9, Math::Vector(2.0f, 1.0f, 3.0f)); obj->SetPartRotationY(9, Math::PI+0.3f); @@ -2084,7 +2093,7 @@ CObjectUPtr CObjectFactory::CreateRuin(const ObjectCreateParams& params) obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("ruin2c.mod", false, rank); + m_oldModelManager->AddModelReference("ruin2c.mod", false, rank, obj->GetTeam()); obj->SetPartPosition(1, Math::Vector(3.0f, 5.0f, -2.5f)); obj->SetPartRotationX(1, -Math::PI*0.85f); @@ -2380,13 +2389,14 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); if ( type == OBJECT_APOLLO1 ) // LEM ? { int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("apollol1.mod", false, rank); + m_oldModelManager->AddModelReference("apollol1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetScale(1.2f); @@ -2398,7 +2408,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(i+1, rank); obj->SetObjectParent(i+1, 0); - m_oldModelManager->AddModelReference("apollol2.mod", false, rank); + m_oldModelManager->AddModelReference("apollol2.mod", false, rank, obj->GetTeam()); obj->SetPartRotationY(i+1, Math::PI/2.0f*i); } @@ -2406,7 +2416,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(5, rank); obj->SetObjectParent(5, 0); - m_oldModelManager->AddModelReference("apollol3.mod", false, rank); // ladder + m_oldModelManager->AddModelReference("apollol3.mod", false, rank, obj->GetTeam()); // ladder //? m_terrain->AddBuildingLevel(pos, 10.0f, 13.0f, 12.0f, 0.0f); @@ -2426,7 +2436,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); //it is a stationary object obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("apolloj1.mod", false, rank); + m_oldModelManager->AddModelReference("apolloj1.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -2436,28 +2446,28 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + m_oldModelManager->AddModelReference("apolloj4.mod", false, rank, obj->GetTeam()); // wheel obj->SetPartPosition(1, Math::Vector(-5.75f, 1.65f, -5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(2, rank); obj->SetObjectParent(2, 0); - m_oldModelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + m_oldModelManager->AddModelReference("apolloj4.mod", false, rank, obj->GetTeam()); // wheel obj->SetPartPosition(2, Math::Vector(-5.75f, 1.65f, 5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(3, rank); obj->SetObjectParent(3, 0); - m_oldModelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + m_oldModelManager->AddModelReference("apolloj4.mod", false, rank, obj->GetTeam()); // wheel obj->SetPartPosition(3, Math::Vector(5.75f, 1.65f, -5.0f)); rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(4, rank); obj->SetObjectParent(4, 0); - m_oldModelManager->AddModelReference("apolloj4.mod", false, rank); // wheel + m_oldModelManager->AddModelReference("apolloj4.mod", false, rank, obj->GetTeam()); // wheel obj->SetPartPosition(4, Math::Vector(5.75f, 1.65f, 5.0f)); // Accessories: @@ -2465,7 +2475,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(5, rank); obj->SetObjectParent(5, 0); - m_oldModelManager->AddModelReference("apolloj2.mod", false, rank); // antenna + m_oldModelManager->AddModelReference("apolloj2.mod", false, rank, obj->GetTeam()); // antenna obj->SetPartPosition(5, Math::Vector(5.5f, 8.8f, 2.0f)); obj->SetPartRotationY(5, -120.0f*Math::PI/180.0f); obj->SetPartRotationZ(5, 45.0f*Math::PI/180.0f); @@ -2474,7 +2484,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(6, rank); obj->SetObjectParent(6, 0); - m_oldModelManager->AddModelReference("apolloj3.mod", false, rank); // camera + m_oldModelManager->AddModelReference("apolloj3.mod", false, rank, obj->GetTeam()); // camera obj->SetPartPosition(6, Math::Vector(5.5f, 2.8f, -2.0f)); obj->SetPartRotationY(6, 30.0f*Math::PI/180.0f); @@ -2492,7 +2502,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("apollof.mod", false, rank); + m_oldModelManager->AddModelReference("apollof.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -2506,7 +2516,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("apollom.mod", false, rank); + m_oldModelManager->AddModelReference("apollom.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -2522,7 +2532,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) int rank = m_engine->CreateObject(); m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object obj->SetObjectRank(0, rank); - m_oldModelManager->AddModelReference("apolloa.mod", false, rank); + m_oldModelManager->AddModelReference("apolloa.mod", false, rank, obj->GetTeam()); obj->SetPosition(pos); obj->SetRotationY(angle); obj->SetFloorHeight(0.0f); @@ -2531,7 +2541,7 @@ CObjectUPtr CObjectFactory::CreateApollo(const ObjectCreateParams& params) m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT); obj->SetObjectRank(1, rank); obj->SetObjectParent(1, 0); - m_oldModelManager->AddModelReference("apolloj2.mod", false, rank); // antenna + m_oldModelManager->AddModelReference("apolloj2.mod", false, rank, obj->GetTeam()); // antenna obj->SetPartPosition(1, Math::Vector(0.0f, 5.0f, 0.0f)); obj->SetPartRotationY(1, -120.0f*Math::PI/180.0f); obj->SetPartRotationZ(1, 45.0f*Math::PI/180.0f); @@ -2564,6 +2574,7 @@ CObjectUPtr CObjectFactory::CreateVehicle(const ObjectCreateParams& params) obj->SetType(type); obj->SetOption(option); + obj->SetTeam(params.team); if ( type == OBJECT_TOTO ) { @@ -2661,6 +2672,7 @@ CObjectUPtr CObjectFactory::CreateInsect(const ObjectCreateParams& params) auto obj = MakeUnique(params.id); obj->SetType(type); + obj->SetTeam(params.team); auto physics = MakeUnique(obj.get()); auto brain = MakeUnique(obj.get()); diff --git a/src/object/object_manager.cpp b/src/object/object_manager.cpp index c3353534..516e7f30 100644 --- a/src/object/object_manager.cpp +++ b/src/object/object_manager.cpp @@ -116,6 +116,28 @@ CObject* CObjectManager::GetObjectByRank(unsigned int id) return it->second.get(); } +CObject* CObjectManager::CreateObject(ObjectCreateParams params) +{ + if (params.id < 0) + { + params.id = m_nextId; + m_nextId++; + } + + assert(m_objects.find(params.id) == m_objects.end()); + + auto objectUPtr = m_objectFactory->CreateObject(params); + + if (objectUPtr == nullptr) + throw CObjectCreateException("Something went wrong in CObjectFactory", params.type); + + CObject* objectPtr = objectUPtr.get(); + + m_objects[params.id] = std::move(objectUPtr); + + return objectPtr; +} + CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, ObjectType type, @@ -125,16 +147,9 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, bool trainer, bool toy, int option, + int team, int id) { - if (id < 0) - { - id = m_nextId; - m_nextId++; - } - - assert(m_objects.find(id) == m_objects.end()); - ObjectCreateParams params; params.pos = pos; params.angle = angle; @@ -145,18 +160,10 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, params.trainer = trainer; params.toy = toy; params.option = option; + params.team = team; params.id = id; - auto objectUPtr = m_objectFactory->CreateObject(params); - - if (objectUPtr == nullptr) - throw CObjectCreateException("Something went wrong in CObjectFactory", type); - - CObject* objectPtr = objectUPtr.get(); - - m_objects[id] = std::move(objectUPtr); - - return objectPtr; + return CreateObject(params); } std::vector CObjectManager::GetObjectsOfTeam(int team) diff --git a/src/object/object_manager.h b/src/object/object_manager.h index 56e7c5e2..cdc1feec 100644 --- a/src/object/object_manager.h +++ b/src/object/object_manager.h @@ -29,6 +29,7 @@ #include "math/const.h" #include "math/vector.h" +#include "object/object_create_params.h" #include "object/object_type.h" #include @@ -133,6 +134,8 @@ public: virtual ~CObjectManager(); //! Creates an object + //@{ + CObject* CreateObject(ObjectCreateParams params); CObject* CreateObject(Math::Vector pos, float angle, ObjectType type, @@ -142,7 +145,9 @@ public: bool trainer = false, bool toy = false, int option = 0, + int team = 0, int id = -1); + //@} //! Deletes the object bool DeleteObject(CObject* instance); diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp index d1e55ed0..97fcebe1 100644 --- a/src/object/old_object.cpp +++ b/src/object/old_object.cpp @@ -27,6 +27,7 @@ #include "common/global.h" #include "common/make_unique.h" #include "common/restext.h" +#include "common/stringutils.h" #include "graphics/engine/lightman.h" #include "graphics/engine/lightning.h" @@ -710,7 +711,7 @@ bool COldObject::ExplodeObject(ExplosionType type, float force, float decay) } m_main->RemoveFromSelectionHistory(this); - SetTeam(0); // Back to neutral on destruction + m_team = 0; // Back to neutral on destruction if ( m_botVar != 0 ) { @@ -2435,6 +2436,7 @@ bool COldObject::GetClip() void COldObject::SetTeam(int team) { + // NOTE: This shouldn't be called after the object is already created m_team = team; } diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 2c726a28..6eabad59 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -35,6 +35,7 @@ #include "common/misc.h" #include "common/config_file.h" #include "common/restext.h" +#include "common/stringutils.h" #include "common/resources/resourcemanager.h" #include "common/resources/inputstream.h" @@ -2898,7 +2899,8 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) m_colorRefBot.g = 166.0f/256.0f; m_colorRefBot.b = 254.0f/256.0f; // blue m_colorRefBot.a = 0.0f; - m_colorNewBot = m_colorRefBot; + m_colorNewBot.clear(); + m_colorNewBot[0] = m_colorRefBot; m_colorRefAlien.r = 135.0f/256.0f; m_colorRefAlien.g = 170.0f/256.0f; @@ -3148,7 +3150,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) if (line->GetCommand() == "VehicleColor" && !resetObject) { - m_colorNewBot = line->GetParam("color")->AsColor(Gfx::Color(0.533f, 0.533f, 0.533f, 0.533f)); + m_colorNewBot[line->GetParam("team")->AsInt(0)] = line->GetParam("color")->AsColor(Gfx::Color(0.533f, 0.533f, 0.533f, 0.533f)); continue; } @@ -3436,6 +3438,9 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) InitEye(); SetMovieLock(false); + if(!resetObject) + ChangeColor(); // changes the colors of texture + if (read[0] != 0) // loading file ? sel = IOReadScene(read, stack); @@ -3493,7 +3498,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) CObject* obj = nullptr; try { - obj = m_objMan->CreateObject( + obj = m_objMan->CreateObject( pos, dirAngle, type, line->GetParam("power")->AsFloat(1.0f), @@ -3501,7 +3506,8 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) line->GetParam("h")->AsFloat(0.0f), trainer = line->GetParam("trainer")->AsBool(false), line->GetParam("toy")->AsBool(false), - line->GetParam("option")->AsInt(0) + line->GetParam("option")->AsInt(0), + line->GetParam("team")->AsInt(0) ); } catch (const CObjectCreateException& e) @@ -3578,7 +3584,6 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) oldObj->SetRange(line->GetParam("range")->AsFloat(30.0f)); oldObj->SetShield(line->GetParam("shield")->AsFloat(1.0f)); oldObj->SetMagnifyDamage(line->GetParam("magnifyDamage")->AsFloat(1.0f)); - oldObj->SetTeam(line->GetParam("team")->AsInt(0)); oldObj->SetClip(line->GetParam("clip")->AsBool(true)); oldObj->SetCheckToken(!line->GetParam("checkToken")->IsDefined() ? trainer || !selectable : line->GetParam("checkToken")->AsBool(true)); // SetManual will affect bot speed @@ -3908,7 +3913,6 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) if (!resetObject) { - ChangeColor(); // changes the colors of texture m_short->SetMode(false); // vehicles? } @@ -4028,6 +4032,8 @@ void CRobotMain::ChangeColor() m_phase != PHASE_LOST && m_phase != PHASE_APPERANCE ) return; + // Player texture + Math::Point ts = Math::Point(0.0f, 0.0f); Math::Point ti = Math::Point(1.0f, 1.0f); // the entire image @@ -4108,27 +4114,39 @@ void CRobotMain::ChangeColor() colorNew2.g = 0.0f; colorNew2.b = 0.0f; - m_engine->ChangeTextureColor("textures/objects/base1.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); - m_engine->ChangeTextureColor("textures/objects/convert.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); - m_engine->ChangeTextureColor("textures/objects/derrick.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); - m_engine->ChangeTextureColor("textures/objects/factory.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); - m_engine->ChangeTextureColor("textures/objects/lemt.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); - m_engine->ChangeTextureColor("textures/objects/roller.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); - m_engine->ChangeTextureColor("textures/objects/search.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + // VehicleColor - exclu[0] = Math::Point( 0.0f/256.0f, 160.0f/256.0f); - exclu[1] = Math::Point(256.0f/256.0f, 256.0f/256.0f); // pencils - exclu[2] = Math::Point(0.0f, 0.0f); - exclu[3] = Math::Point(0.0f, 0.0f); // terminator - m_engine->ChangeTextureColor("textures/objects/drawer.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, exclu, 0, true); + for(auto it : m_colorNewBot) + { + int team = it.first; + Gfx::Color newColor = it.second; + std::string teamStr = StrUtils::ToString(team); + if(team == 0) teamStr = ""; - exclu[0] = Math::Point(237.0f/256.0f, 176.0f/256.0f); - exclu[1] = Math::Point(256.0f/256.0f, 220.0f/256.0f); // blue canister - exclu[2] = Math::Point(106.0f/256.0f, 150.0f/256.0f); - exclu[3] = Math::Point(130.0f/256.0f, 214.0f/256.0f); // safe location - exclu[4] = Math::Point(0.0f, 0.0f); - exclu[5] = Math::Point(0.0f, 0.0f); // terminator - m_engine->ChangeTextureColor("textures/objects/subm.png", m_colorRefBot, m_colorNewBot, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, exclu, 0, true); + m_engine->ChangeTextureColor("textures/objects/base1.png"+teamStr, "textures/objects/base1.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + m_engine->ChangeTextureColor("textures/objects/convert.png"+teamStr, "textures/objects/convert.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + m_engine->ChangeTextureColor("textures/objects/derrick.png"+teamStr, "textures/objects/derrick.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + m_engine->ChangeTextureColor("textures/objects/factory.png"+teamStr, "textures/objects/factory.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + m_engine->ChangeTextureColor("textures/objects/lemt.png"+teamStr, "textures/objects/lemt.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + m_engine->ChangeTextureColor("textures/objects/roller.png"+teamStr, "textures/objects/roller.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + m_engine->ChangeTextureColor("textures/objects/search.png"+teamStr, "textures/objects/search.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, 0, 0, true); + + exclu[0] = Math::Point( 0.0f/256.0f, 160.0f/256.0f); + exclu[1] = Math::Point(256.0f/256.0f, 256.0f/256.0f); // pencils + exclu[2] = Math::Point(0.0f, 0.0f); + exclu[3] = Math::Point(0.0f, 0.0f); // terminator + m_engine->ChangeTextureColor("textures/objects/drawer.png"+teamStr, "textures/objects/drawer.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, exclu, 0, true); + + exclu[0] = Math::Point(237.0f/256.0f, 176.0f/256.0f); + exclu[1] = Math::Point(256.0f/256.0f, 220.0f/256.0f); // blue canister + exclu[2] = Math::Point(106.0f/256.0f, 150.0f/256.0f); + exclu[3] = Math::Point(130.0f/256.0f, 214.0f/256.0f); // safe location + exclu[4] = Math::Point(0.0f, 0.0f); + exclu[5] = Math::Point(0.0f, 0.0f); // terminator + m_engine->ChangeTextureColor("textures/objects/subm.png"+teamStr, "textures/objects/subm.png", m_colorRefBot, newColor, colorRef2, colorNew2, 0.10f, -1.0f, ts, ti, exclu, 0, true); + } + + // AlienColor exclu[0] = Math::Point(128.0f/256.0f, 160.0f/256.0f); exclu[1] = Math::Point(256.0f/256.0f, 256.0f/256.0f); // SatCom @@ -4137,8 +4155,11 @@ void CRobotMain::ChangeColor() m_engine->ChangeTextureColor("textures/objects/ant.png", m_colorRefAlien, m_colorNewAlien, colorRef2, colorNew2, 0.50f, -1.0f, ts, ti, exclu); m_engine->ChangeTextureColor("textures/objects/mother.png", m_colorRefAlien, m_colorNewAlien, colorRef2, colorNew2, 0.50f, -1.0f, ts, ti); + // GreeneryColor m_engine->ChangeTextureColor("textures/objects/plant.png", m_colorRefGreen, m_colorNewGreen, colorRef2, colorNew2, 0.50f, -1.0f, ts, ti); + // water color + // PARTIPLOUF0 and PARTIDROP : ts = Math::Point(0.500f, 0.500f); ti = Math::Point(0.875f, 0.750f); @@ -4148,6 +4169,9 @@ void CRobotMain::ChangeColor() ts = Math::Point(0.00f, 0.75f); ti = Math::Point(0.25f, 1.00f); m_engine->ChangeTextureColor("textures/effect02.png", m_colorRefWater, m_colorNewWater, colorRef2, colorNew2, 0.20f, -1.0f, ts, ti, 0, m_colorShiftWater, true); + + // This loads the newly recolored textures to objects + m_engine->LoadAllTextures(); } //! Updates the number of unnecessary objects @@ -6073,6 +6097,13 @@ const std::string& CRobotMain::GetTeamName(int id) return m_teamNames[id]; } +bool CRobotMain::IsTeamColorDefined(int id) +{ + if(id == 0) return false; // Always use default for team 0 + + return m_colorNewBot.find(id) != m_colorNewBot.end(); +} + int CRobotMain::GetEnableBuild() { diff --git a/src/object/robotmain.h b/src/object/robotmain.h index f8a06aa3..e7001cdb 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -328,6 +328,9 @@ public: //! Returns team name for the given team id const std::string& GetTeamName(int id); + //! Returns true if team-specific colored texture is available + bool IsTeamColorDefined(int id); + //! Get/set enabled buildings //@{ int GetEnableBuild(); @@ -568,7 +571,7 @@ protected: ShowLimit m_showLimit[MAXSHOWLIMIT]; Gfx::Color m_colorRefBot; - Gfx::Color m_colorNewBot; + std::map m_colorNewBot; Gfx::Color m_colorRefAlien; Gfx::Color m_colorNewAlien; Gfx::Color m_colorRefGreen; diff --git a/src/object/subclass/exchange_post.cpp b/src/object/subclass/exchange_post.cpp index e7d37928..42dadf92 100644 --- a/src/object/subclass/exchange_post.cpp +++ b/src/object/subclass/exchange_post.cpp @@ -51,6 +51,8 @@ std::unique_ptr CExchangePost::Create( { auto obj = MakeUnique(params.id); + obj->SetTeam(params.team); + int rank = engine->CreateObject(); engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX); // it is a stationary object obj->SetObjectRank(0, rank); diff --git a/src/object/task/taskbuild.cpp b/src/object/task/taskbuild.cpp index dc7e8711..f511a3c1 100644 --- a/src/object/task/taskbuild.cpp +++ b/src/object/task/taskbuild.cpp @@ -81,10 +81,14 @@ CTaskBuild::~CTaskBuild() bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle) { - float power = 0.0f; - m_building = CObjectManager::GetInstancePointer()->CreateObject(pos, angle, m_type, power); + ObjectCreateParams params; + params.pos = pos; + params.angle = angle; + params.type = m_type; + params.power = 0.0f; + params.team = m_object->GetTeam(); + m_building = CObjectManager::GetInstancePointer()->CreateObject(params); m_building->SetLock(true); // not yet usable - m_building->SetTeam(m_object->GetTeam()); if ( m_type == OBJECT_DERRICK ) m_buildingHeight = 35.0f; if ( m_type == OBJECT_FACTORY ) m_buildingHeight = 28.0f; @@ -810,4 +814,3 @@ void CTaskBuild::DeleteMark(Math::Vector pos, float radius) CObjectManager::GetInstancePointer()->DeleteObject(obj); } } -