diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 6aaa9e77..73f0eb50 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -19,6 +19,7 @@ #include "Core/ConfigFile.h" #include "Input/EInputCommand.h" #include "Core/EPlayerDamage.h" +#include "Network/EInterpolate.h" class Client : public Network { diff --git a/include/Game/InterpolationSystem.h b/include/Game/InterpolationSystem.h index 3984ab5e..c8e88834 100644 --- a/include/Game/InterpolationSystem.h +++ b/include/Game/InterpolationSystem.h @@ -12,9 +12,11 @@ #include "Network/EInterpolate.h" + class InterpolationSystem : public PureSystem { - struct Transform { + struct Transform + { glm::vec3 Position; glm::vec3 Scale; glm::vec3 Orientation; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 139d15ae..a063e207 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -119,12 +119,16 @@ void Client::InterpolateFields(Packet& packet, const ComponentInfo& componentInf int sizeOfFields = 0; for (auto field : componentInfo.FieldsInOrder) { ComponentInfo::Field_t fieldInfo = componentInfo.Fields.at(field); - sizeOfFields = fieldInfo.Stride; + sizeOfFields += fieldInfo.Stride; } // Is the size correct? boost::shared_array eventData(new char[componentInfo.Meta.Stride]); memcpy(eventData.get(), packet.ReadData(componentInfo.Meta.Stride), componentInfo.Meta.Stride); //Send event to interpolat system + Events::Interpolate e; + e.Entity = entityID; + e.DataArray = eventData; + m_EventBroker->Publish(e); } diff --git a/src/Game/InterpolationSystem.cpp b/src/Game/InterpolationSystem.cpp index d2413234..2d8de336 100644 --- a/src/Game/InterpolationSystem.cpp +++ b/src/Game/InterpolationSystem.cpp @@ -26,7 +26,7 @@ void InterpolationSystem::UpdateComponent(World * world, ComponentWrapper & tran sTransform.interpolationTime += dt; glm::vec3 nextPosition = sTransform.Position; glm::vec3 currentPosition = static_cast(transform["Position"]); - transform["Position"] = vectorInterpolation(currentPosition, nextPosition, sTransform.interpolationTime); + (glm::vec3&)transform["Position"] += vectorInterpolation(currentPosition, nextPosition, sTransform.interpolationTime); } glm::vec3 InterpolationSystem::vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime) @@ -46,7 +46,7 @@ bool InterpolationSystem::OnInterpolate(const Events::Interpolate & e) memcpy(&transform.Orientation, e.DataArray.get() + offset, sizeof(glm::vec3)); offset += sizeof(glm::vec3); memcpy(&transform.Scale, e.DataArray.get() + offset, sizeof(glm::vec3)); - transform.interpolationTime = 0; + transform.interpolationTime = 0.0f; m_InterpolationPoints[e.Entity] = transform; // Check if queue already exists //if (m_InterpolationPoints.find(e.Entity) != m_InterpolationPoints.end()) { // Did exist, push to queue