#ifndef Systems_InterpolationSystem_h__ #define Systems_InterpolationSystem_h__ #include #include #include #include #include #include "Common.h" #include "Core/System.h" #include "Core/EventBroker.h" #include "Network/EInterpolate.h" #define SNAPSHOTINTERVAL 0.05f class InterpolationSystem : public PureSystem { struct Transform { glm::vec3 Position; glm::vec3 Scale; glm::quat Orientation; double interpolationTime; }; public: InterpolationSystem(EventBroker* eventBroker) : System(eventBroker) , PureSystem("Transform") { EVENT_SUBSCRIBE_MEMBER(m_EInterpolate, &InterpolationSystem::OnInterpolate); } ~InterpolationSystem() { } virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& transform, double dt) override; private: std::unordered_map m_NextTransform; std::unordered_map m_LastReceivedTransform; //glm::vec3 vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime); template T vectorInterpolation(T prev, T next, double currentTime) { T difference = next - prev; T vector = (difference / SNAPSHOTINTERVAL) * static_cast(currentTime); return vector; } EventRelay m_EInterpolate; bool InterpolationSystem::OnInterpolate(const Events::Interpolate& e); }; #endif