aboutsummaryrefslogtreecommitdiff
path: root/src/common/Collision/Models
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-07-05 21:20:25 +0200
committerOvahlord <dreadkiller@gmx.de>2024-07-06 15:36:10 +0200
commitcaf4c02da82e868f7f77f4967d2cee2a5780828a (patch)
tree5c084c4301e0473f199712ba73056bb93ac8e7f3 /src/common/Collision/Models
parent5acd3085501fb7ad4ad76ccec4f727e20869cacd (diff)
Core/Vmaps: Optimize loading vmaps
* Changed spawn id to BIH tree index mapping from generated on load to baked in tile files * Remove map holding model load counts and moved that to ModelInstance instead (cherry picked from commit 35a2d49971984bcab96ac64fc52b30a9a4e06ce3)
Diffstat (limited to 'src/common/Collision/Models')
-rw-r--r--src/common/Collision/Models/ModelInstance.cpp2
-rw-r--r--src/common/Collision/Models/ModelInstance.h5
2 files changed, 5 insertions, 2 deletions
diff --git a/src/common/Collision/Models/ModelInstance.cpp b/src/common/Collision/Models/ModelInstance.cpp
index 2205d10833a..fb4aa97749f 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, std::shared_ptr<WorldModel> model) : ModelMinimalData(spawn), iModel(std::move(model))
+ ModelInstance::ModelInstance(ModelSpawn const& spawn, std::shared_ptr<WorldModel> model) : ModelMinimalData(spawn), iModel(std::move(model)), referencingTiles(0)
{
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 78b07f11f4b..1621e1d052e 100644
--- a/src/common/Collision/Models/ModelInstance.h
+++ b/src/common/Collision/Models/ModelInstance.h
@@ -69,7 +69,7 @@ namespace VMAP
class TC_COMMON_API ModelInstance : public ModelMinimalData
{
public:
- ModelInstance() : iInvScale(0.0f), iModel(nullptr) { }
+ ModelInstance() : iInvScale(0.0f), iModel(nullptr), referencingTiles(0) { }
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;
@@ -77,10 +77,13 @@ namespace VMAP
bool GetLiquidLevel(G3D::Vector3 const& p, LocationInfo& info, float& liqHeight) const;
G3D::Matrix3 const& GetInvRot() const { return iInvRot; }
WorldModel const* getWorldModel() const { return iModel.get(); }
+ void AddTileReference() { ++referencingTiles; }
+ uint32 RemoveTileReference() { return --referencingTiles; }
protected:
G3D::Matrix3 iInvRot;
float iInvScale;
std::shared_ptr<WorldModel> iModel;
+ uint32 referencingTiles;
};
} // namespace VMAP