From 91ad17c685dc34f2bfa687dff5d3e348183a3339 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Wed, 20 Apr 2011 00:04:05 +0000 Subject: [PATCH] Fix entity ID association with animations. Fixes #790. This was SVN commit r9286. --- source/graphics/Unit.cpp | 7 +++++++ source/graphics/Unit.h | 2 +- source/graphics/UnitAnimation.cpp | 5 +++++ source/graphics/UnitAnimation.h | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/source/graphics/Unit.cpp b/source/graphics/Unit.cpp index cf0c502bc1..245bf2d5ac 100644 --- a/source/graphics/Unit.cpp +++ b/source/graphics/Unit.cpp @@ -70,6 +70,13 @@ void CUnit::UpdateModel(float frameTime) m_Animation->Update(frameTime*1000.0f); } +void CUnit::SetID(entity_id_t id) +{ + m_ID = id; + if (m_Animation) + m_Animation->SetEntityID(id); +} + void CUnit::SetEntitySelection(const CStr& selection) { CStr selection_lc = selection.LowerCase(); diff --git a/source/graphics/Unit.h b/source/graphics/Unit.h index b31457ac95..0b7a4fcb13 100644 --- a/source/graphics/Unit.h +++ b/source/graphics/Unit.h @@ -71,7 +71,7 @@ public: // persistently despite saving/loading maps. Default for new units is -1; should // usually be set to CUnitManager::GetNewID() after creation. entity_id_t GetID() const { return m_ID; } - void SetID(entity_id_t id) { m_ID = id; } + void SetID(entity_id_t id); const std::set& GetActorSelections() const { return m_ActorSelections; } diff --git a/source/graphics/UnitAnimation.cpp b/source/graphics/UnitAnimation.cpp index 7d7d000a8d..f82bac9e8d 100644 --- a/source/graphics/UnitAnimation.cpp +++ b/source/graphics/UnitAnimation.cpp @@ -47,6 +47,11 @@ CUnitAnimation::CUnitAnimation(entity_id_t ent, CModel* model, CObjectEntry* obj ReloadUnit(model, object); } +void CUnitAnimation::SetEntityID(entity_id_t ent) +{ + m_Entity = ent; +} + void CUnitAnimation::AddModel(CModel* model, const CObjectEntry* object) { SModelAnimState state; diff --git a/source/graphics/UnitAnimation.h b/source/graphics/UnitAnimation.h index 4190a969d9..21efd7c17c 100644 --- a/source/graphics/UnitAnimation.h +++ b/source/graphics/UnitAnimation.h @@ -41,6 +41,12 @@ public: */ CUnitAnimation(entity_id_t ent, CModel* model, CObjectEntry* object); + /** + * Change the entity ID associated with this animation + * (currently used for playing locational sound effects). + */ + void SetEntityID(entity_id_t ent); + /** * Start playing an animation. * The unit's actor defines the available animations, and if more than one is available