diff options
Diffstat (limited to 'src/common/Collision/Models')
-rw-r--r-- | src/common/Collision/Models/GameObjectModel.cpp | 6 | ||||
-rw-r--r-- | src/common/Collision/Models/GameObjectModel.h | 9 | ||||
-rw-r--r-- | src/common/Collision/Models/ModelInstance.cpp | 2 | ||||
-rw-r--r-- | src/common/Collision/Models/ModelInstance.h | 14 | ||||
-rw-r--r-- | src/common/Collision/Models/WorldModel.h | 8 |
5 files changed, 17 insertions, 22 deletions
diff --git a/src/common/Collision/Models/GameObjectModel.cpp b/src/common/Collision/Models/GameObjectModel.cpp index f2b19e038fa..24e9489326e 100644 --- a/src/common/Collision/Models/GameObjectModel.cpp +++ b/src/common/Collision/Models/GameObjectModel.cpp @@ -93,11 +93,7 @@ bool LoadGameObjectModelList(std::string const& dataPath) return true; } -GameObjectModel::~GameObjectModel() -{ - if (iModel) - VMAP::VMapFactory::createOrGetVMapManager()->releaseModelInstance(iModel->GetName()); -} +GameObjectModel::~GameObjectModel() = default; bool GameObjectModel::initialize(std::unique_ptr<GameObjectModelOwnerBase> modelOwner, std::string const& dataPath) { diff --git a/src/common/Collision/Models/GameObjectModel.h b/src/common/Collision/Models/GameObjectModel.h index f875d9e3197..1cfe27a050e 100644 --- a/src/common/Collision/Models/GameObjectModel.h +++ b/src/common/Collision/Models/GameObjectModel.h @@ -18,12 +18,11 @@ #ifndef _GAMEOBJECT_MODEL_H #define _GAMEOBJECT_MODEL_H -#include <G3D/Matrix3.h> -#include <G3D/Vector3.h> +#include "Define.h" #include <G3D/AABox.h> +#include <G3D/Matrix3.h> #include <G3D/Ray.h> - -#include "Define.h" +#include <G3D/Vector3.h> #include <memory> namespace G3D @@ -91,7 +90,7 @@ private: G3D::Vector3 iPos; float iInvScale; float iScale; - VMAP::WorldModel* iModel; + std::shared_ptr<VMAP::WorldModel> iModel; std::unique_ptr<GameObjectModelOwnerBase> owner; }; diff --git a/src/common/Collision/Models/ModelInstance.cpp b/src/common/Collision/Models/ModelInstance.cpp index 6838babcbe2..2205d10833a 100644 --- a/src/common/Collision/Models/ModelInstance.cpp +++ b/src/common/Collision/Models/ModelInstance.cpp @@ -24,7 +24,7 @@ using G3D::Ray; namespace VMAP { - ModelInstance::ModelInstance(ModelSpawn const& spawn, WorldModel* model) : ModelMinimalData(spawn), iModel(model) + ModelInstance::ModelInstance(ModelSpawn const& spawn, std::shared_ptr<WorldModel> model) : ModelMinimalData(spawn), iModel(std::move(model)) { iInvRot = G3D::Matrix3::fromEulerAnglesZYX(G3D::pif() * spawn.iRot.y / 180.f, G3D::pif() * spawn.iRot.x / 180.f, G3D::pif() * spawn.iRot.z / 180.f).inverse(); iInvScale = 1.f / iScale; diff --git a/src/common/Collision/Models/ModelInstance.h b/src/common/Collision/Models/ModelInstance.h index 7361fbb9335..78b07f11f4b 100644 --- a/src/common/Collision/Models/ModelInstance.h +++ b/src/common/Collision/Models/ModelInstance.h @@ -18,12 +18,12 @@ #ifndef _MODELINSTANCE_H_ #define _MODELINSTANCE_H_ -#include <G3D/Matrix3.h> -#include <G3D/Vector3.h> +#include "Define.h" +#include <memory> #include <G3D/AABox.h> +#include <G3D/Matrix3.h> #include <G3D/Ray.h> - -#include "Define.h" +#include <G3D/Vector3.h> namespace VMAP { @@ -70,17 +70,17 @@ namespace VMAP { public: ModelInstance() : iInvScale(0.0f), iModel(nullptr) { } - ModelInstance(ModelSpawn const& spawn, WorldModel* model); + ModelInstance(ModelSpawn const& spawn, std::shared_ptr<WorldModel> model); void setUnloaded() { iModel = nullptr; } bool intersectRay(G3D::Ray const& pRay, float& pMaxDist, bool pStopAtFirstHit, ModelIgnoreFlags ignoreFlags) const; bool GetLocationInfo(G3D::Vector3 const& p, LocationInfo& info) const; bool GetLiquidLevel(G3D::Vector3 const& p, LocationInfo& info, float& liqHeight) const; G3D::Matrix3 const& GetInvRot() const { return iInvRot; } - WorldModel const* getWorldModel() const { return iModel; } + WorldModel const* getWorldModel() const { return iModel.get(); } protected: G3D::Matrix3 iInvRot; float iInvScale; - WorldModel* iModel; + std::shared_ptr<WorldModel> iModel; }; } // namespace VMAP diff --git a/src/common/Collision/Models/WorldModel.h b/src/common/Collision/Models/WorldModel.h index 48e75f3b797..9d2ba99bb80 100644 --- a/src/common/Collision/Models/WorldModel.h +++ b/src/common/Collision/Models/WorldModel.h @@ -117,7 +117,7 @@ namespace VMAP class TC_COMMON_API WorldModel { public: - WorldModel(): Flags(ModelFlags::None), RootWMOID(0) { } + WorldModel(): Flags(ModelFlags::None), RootWMOID(0), name(nullptr) { } //! pass group models to WorldModel and create BIH. Passed vector is swapped with old geometry! void setGroupModels(std::vector<GroupModel> &models); @@ -129,14 +129,14 @@ namespace VMAP bool readFile(const std::string &filename); bool IsM2() const { return Flags.HasFlag(ModelFlags::IsM2); } std::vector<GroupModel> const& getGroupModels() const { return groupModels; } - std::string const& GetName() const { return name; } - void SetName(std::string newName) { name = std::move(newName); } + std::string const& GetName() const { return *name; } + void SetName(std::string const* newName) { name = newName; } protected: EnumFlag<ModelFlags> Flags; uint32 RootWMOID; std::vector<GroupModel> groupModels; BIH groupTree; - std::string name; + std::string const* name; // valid only while model is held in VMapManager2::iLoadedModelFiles }; } // namespace VMAP |