From 961ac314ad77dbe849be08addff30f1cdff7419c Mon Sep 17 00:00:00 2001 From: wraitii Date: Thu, 18 Mar 2021 16:40:34 +0000 Subject: [PATCH] Fix issues with motionManager / bae258f9a1 Fixes bae258f9a1. As reported by Freagarach, garrisoned units trigger error messages. As reported by Vladislavbelov, noPCH was broken & there were some style issues. Differential Revision: https://code.wildfiregames.com/D3707 This was SVN commit r25078. --- .../simulation2/components/CCmpUnitMotion.cpp | 3 ++- .../components/CCmpUnitMotionManager.cpp | 26 ++++++++++++------- .../simulation2/components/ICmpUnitMotion.h | 3 ++- .../components/ICmpUnitMotionManager.h | 4 +++ 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/source/simulation2/components/CCmpUnitMotion.cpp b/source/simulation2/components/CCmpUnitMotion.cpp index 58ccaa80e9..8c5ce40663 100644 --- a/source/simulation2/components/CCmpUnitMotion.cpp +++ b/source/simulation2/components/CCmpUnitMotion.cpp @@ -914,7 +914,8 @@ void CCmpUnitMotion::OnTurnStart() void CCmpUnitMotion::PreMove(ICmpUnitMotionManager::MotionState& state) { // If we were idle and will still be, no need for an update. - state.needUpdate = m_CurSpeed != fixed::Zero() || m_MoveRequest.m_Type != MoveRequest::NONE; + state.needUpdate = state.cmpPosition->IsInWorld() && + (m_CurSpeed != fixed::Zero() || m_MoveRequest.m_Type != MoveRequest::NONE); } void CCmpUnitMotion::Move(ICmpUnitMotionManager::MotionState& state, fixed dt) diff --git a/source/simulation2/components/CCmpUnitMotionManager.cpp b/source/simulation2/components/CCmpUnitMotionManager.cpp index e793a1837c..bf7fa96330 100644 --- a/source/simulation2/components/CCmpUnitMotionManager.cpp +++ b/source/simulation2/components/CCmpUnitMotionManager.cpp @@ -17,6 +17,7 @@ #include "precompiled.h" +#include "simulation2/system/Component.h" #include "ICmpUnitMotionManager.h" #include "simulation2/MessageTypes.h" @@ -28,14 +29,6 @@ class CCmpUnitMotionManager : public ICmpUnitMotionManager { -protected: - EntityMap m_Units; - EntityMap m_FormationControllers; - - // Temporary vector, reconstructed each turn (stored here to avoid memory reallocations). - std::vector::iterator> m_MovingUnits; - - bool m_ComputingMotion; public: static void ClassInit(CComponentManager& componentManager) { @@ -47,6 +40,19 @@ public: DEFAULT_COMPONENT_ALLOCATOR(UnitMotionManager) + EntityMap m_Units; + EntityMap m_FormationControllers; + + // Temporary vector, reconstructed each turn (stored here to avoid memory reallocations). + std::vector::iterator> m_MovingUnits; + + bool m_ComputingMotion; + + static std::string GetSchema() + { + return ""; + } + virtual void Init(const CParamNode& UNUSED(paramNode)) { m_MovingUnits.reserve(40); @@ -76,7 +82,7 @@ public: } case MT_Update_MotionFormation: { - fixed dt = static_cast (msg).turnLength; + fixed dt = static_cast(msg).turnLength; m_ComputingMotion = true; MoveFormations(dt); m_ComputingMotion = false; @@ -84,7 +90,7 @@ public: } case MT_Update_MotionUnit: { - fixed dt = static_cast (msg).turnLength; + fixed dt = static_cast(msg).turnLength; m_ComputingMotion = true; MoveUnits(dt); m_ComputingMotion = false; diff --git a/source/simulation2/components/ICmpUnitMotion.h b/source/simulation2/components/ICmpUnitMotion.h index 6d8f289d0c..49f442eb7a 100644 --- a/source/simulation2/components/ICmpUnitMotion.h +++ b/source/simulation2/components/ICmpUnitMotion.h @@ -36,8 +36,9 @@ class CCmpUnitMotionManager; */ class ICmpUnitMotion : public IComponent { - friend class CCmpUnitMotionManager; protected: + friend class CCmpUnitMotionManager; + /** * This external interface is used by the Unit Motion Manager. * Components that do not register there do not need to implement these. diff --git a/source/simulation2/components/ICmpUnitMotionManager.h b/source/simulation2/components/ICmpUnitMotionManager.h index ecef79627d..5f91f9c20c 100644 --- a/source/simulation2/components/ICmpUnitMotionManager.h +++ b/source/simulation2/components/ICmpUnitMotionManager.h @@ -20,6 +20,10 @@ #include "simulation2/system/Interface.h" +#include "maths/Fixed.h" +#include "maths/FixedVector2D.h" +#include "simulation2/system/CmpPtr.h" + class ICmpPosition; class ICmpUnitMotion;