Scraping queues for interpolation

This commit is contained in:
stiffly
2016-01-18 18:07:59 +01:00
parent 765509b510
commit 88eb3ca2db
4 changed files with 50 additions and 38 deletions
+8 -8
View File
@@ -12,15 +12,14 @@
#include "Network/EInterpolate.h"
struct Transform {
glm::vec3 Position;
glm::vec3 Scale;
glm::vec3 Orientation;
double interpolationTime;
};
class InterpolationSystem : public PureSystem
{
struct Transform {
glm::vec3 Position;
glm::vec3 Scale;
glm::vec3 Orientation;
double interpolationTime;
};
public:
InterpolationSystem(EventBroker* eventbroker)
: PureSystem(eventbroker, "Transform")
@@ -31,7 +30,8 @@ public:
virtual void UpdateComponent(World* world, ComponentWrapper& transform, double dt) override;
private:
std::unordered_map<EntityID, std::queue<Transform>> m_InterpolationPoints;
//std::unordered_map<EntityID, std::queue<Transform>> m_InterpolationPoints;
std::unordered_map<EntityID, Transform> m_InterpolationPoints;
glm::vec3 vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime);
+4 -4
View File
@@ -40,7 +40,7 @@ void Packet::WriteString(const std::string& str)
// Message, add one extra byte for null terminator
int sizeOfString = str.size() + 1;
if (m_Offset + sizeOfString > m_MaxPacketSize) {
LOG_WARNING("Package::WriteString(): Data size in packet exceeded maximum package size. New size is %i bytes\n", m_MaxPacketSize*2);
//LOG_WARNING("Package::WriteString(): Data size in packet exceeded maximum package size. New size is %i bytes\n", m_MaxPacketSize*2);
resizeData();
}
memcpy(m_Data + m_Offset, str.data(), sizeOfString * sizeof(char));
@@ -50,7 +50,7 @@ void Packet::WriteString(const std::string& str)
void Packet::WriteData(char * data, int sizeOfData)
{
if (m_Offset + sizeOfData > m_MaxPacketSize) {
LOG_WARNING("Packet::WriteData(): Data size in packet exceeded maximum packet size. New size is %i bytes\n", m_MaxPacketSize*2);
//LOG_WARNING("Packet::WriteData(): Data size in packet exceeded maximum packet size. New size is %i bytes\n", m_MaxPacketSize*2);
resizeData();
}
memcpy(m_Data + m_Offset, data, sizeOfData);
@@ -61,7 +61,7 @@ std::string Packet::ReadString()
{
std::string returnValue(m_Data + m_ReturnDataOffset);
if (m_Offset < m_ReturnDataOffset + returnValue.size()) {
LOG_WARNING("packet ReadString(): Oh no! You are trying to remove things outside my memory kingdom");
//LOG_WARNING("packet ReadString(): Oh no! You are trying to remove things outside my memory kingdom");
return "PopFrontString Failed";
}
// +1 for null terminator.
@@ -72,7 +72,7 @@ std::string Packet::ReadString()
char * Packet::ReadData(int SizeOfData)
{
if (m_Offset < m_ReturnDataOffset + SizeOfData) {
LOG_WARNING("packet ReadData(): Oh no! You are trying to remove things outside my memory kingdom");
//LOG_WARNING("packet ReadData(): Oh no! You are trying to remove things outside my memory kingdom");
return nullptr;
}
unsigned int oldReturnDataOffset = m_ReturnDataOffset;
+2 -2
View File
@@ -227,7 +227,7 @@ void Server::parseOnInputCommand(Packet& packet)
e.PlayerID = playerID; // Set correct player id
e.Value = packet.ReadPrimitive<float>();
m_EventBroker->Publish(e);
LOG_INFO("Server::parseOnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
//LOG_INFO("Server::parseOnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
}
}
}
@@ -239,7 +239,7 @@ void Server::parseOnPlayerDamage(Packet & packet)
e.PlayerDamagedID = packet.ReadPrimitive<EntityID>();
e.TypeOfDamage = packet.ReadString();
m_EventBroker->Publish(e);
LOG_DEBUG("Server::parseOnPlayerDamage: Command is %s. Value is %f. PlayerID is %i.", e.DamageAmount, e.PlayerDamagedID, e.TypeOfDamage.c_str());
//LOG_DEBUG("Server::parseOnPlayerDamage: Command is %s. Value is %f. PlayerID is %i.", e.DamageAmount, e.PlayerDamagedID, e.TypeOfDamage.c_str());
}
void Server::parseConnect(Packet& packet)
+36 -24
View File
@@ -1,23 +1,32 @@
#include "InterpolationSystem.h"
//void InterpolationSystem::UpdateComponent(World * world, ComponentWrapper & transform, double dt)
//{
// if (m_InterpolationPoints[transform.EntityID].size() > 0) {
// Transform& sTransform = m_InterpolationPoints[transform.EntityID].front();
// sTransform.interpolationTime += dt;
// if (sTransform.interpolationTime > 0.05) {
// double time = std::fmod(sTransform.interpolationTime, 0.05f);
// m_InterpolationPoints[transform.EntityID].pop();
// if (m_InterpolationPoints[transform.EntityID].size() <= 0) {
// return;
// }
// sTransform = m_InterpolationPoints[transform.EntityID].front();
// sTransform.interpolationTime = time;
// }
// glm::vec3 nextPosition = sTransform.Position;
// glm::vec3 currentPosition = static_cast<glm::vec3>(transform["Position"]);
// transform["Position"] = vectorInterpolation(currentPosition, nextPosition, sTransform.interpolationTime);
// }
//}
void InterpolationSystem::UpdateComponent(World * world, ComponentWrapper & transform, double dt)
{
if (m_InterpolationPoints[transform.EntityID].size() > 0) {
Transform& sTransform = m_InterpolationPoints[transform.EntityID].front();
sTransform.interpolationTime += dt;
if (sTransform.interpolationTime > 0.05) {
double time = std::fmod(sTransform.interpolationTime, 0.05f);
m_InterpolationPoints[transform.EntityID].pop();
if (m_InterpolationPoints[transform.EntityID].size() <= 0) {
return;
}
sTransform = m_InterpolationPoints[transform.EntityID].front();
sTransform.interpolationTime = time;
}
glm::vec3 nextPosition = sTransform.Position;
glm::vec3 currentPosition = static_cast<glm::vec3>(transform["Position"]);
transform["Position"] = vectorInterpolation(currentPosition, nextPosition, sTransform.interpolationTime);
}
Transform& sTransform = m_InterpolationPoints[transform.EntityID];
sTransform.interpolationTime += dt;
glm::vec3 nextPosition = sTransform.Position;
glm::vec3 currentPosition = static_cast<glm::vec3>(transform["Position"]);
transform["Position"] = vectorInterpolation(currentPosition, nextPosition, sTransform.interpolationTime);
}
glm::vec3 InterpolationSystem::vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime)
@@ -37,14 +46,17 @@ 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;
m_InterpolationPoints[e.Entity] = transform;
// Check if queue already exists
if (m_InterpolationPoints.find(e.Entity) != m_InterpolationPoints.end()) { // Did exist, push to queue
m_InterpolationPoints[e.Entity].push(transform);
} else { // Did not exist, create queue
std::queue<Transform> transformQueue;
transformQueue.push(transform);
m_InterpolationPoints[e.Entity] = transformQueue;
}
//if (m_InterpolationPoints.find(e.Entity) != m_InterpolationPoints.end()) { // Did exist, push to queue
// m_InterpolationPoints[e.Entity].push(transform);
//}
//else { // Did not exist, create queue
// std::queue<Transform> transformQueue;
// transformQueue.push(transform);
// m_InterpolationPoints[e.Entity] = transformQueue;
//}
return false;
}