Networking bugfixes
This commit is contained in:
@@ -8,9 +8,7 @@
|
|||||||
</c:AABB>
|
</c:AABB>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model/>
|
<c:Model/>
|
||||||
<c:Physics>
|
<c:Physics/>
|
||||||
<Gravity>false</Gravity>
|
|
||||||
</c:Physics>
|
|
||||||
<c:Player>
|
<c:Player>
|
||||||
<MovementSpeed>5</MovementSpeed>
|
<MovementSpeed>5</MovementSpeed>
|
||||||
</c:Player>
|
</c:Player>
|
||||||
@@ -20,7 +18,7 @@
|
|||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.550999999" Y="0.0264999866" Z="3.01600003"/>
|
<Position X="-0.246963501" Y="0.0265000071" Z="3.01600003"/>
|
||||||
<Orientation X="0" Y="2.14675093" Z="0"/>
|
<Orientation X="0" Y="2.14675093" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -31,7 +29,6 @@
|
|||||||
<c:Camera/>
|
<c:Camera/>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="1.37700009" Z="0"/>
|
<Position X="0" Y="1.37700009" Z="0"/>
|
||||||
<Orientation X="0.921535373" Y="0" Z="0"/>
|
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
|
|||||||
@@ -137,6 +137,11 @@ EntityID World::generateEntityID()
|
|||||||
|
|
||||||
void World::deleteEntityRecursive(EntityID entity, bool cascaded /*= false*/)
|
void World::deleteEntityRecursive(EntityID entity, bool cascaded /*= false*/)
|
||||||
{
|
{
|
||||||
|
// Don't attempt to delete entities that don't exist anyway
|
||||||
|
if (!ValidEntity(entity)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_EventBroker != nullptr) {
|
if (m_EventBroker != nullptr) {
|
||||||
Events::EntityDeleted e;
|
Events::EntityDeleted e;
|
||||||
e.DeletedEntity = entity;
|
e.DeletedEntity = entity;
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ InterpolationSystem::InterpolationSystem(World* world, EventBroker* eventBroker)
|
|||||||
|
|
||||||
void InterpolationSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& transform, double dt)
|
void InterpolationSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& transform, double dt)
|
||||||
{
|
{
|
||||||
|
// Don't interpolate entities that might already have been removed
|
||||||
|
if (!entity.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_NextTransform.find(transform.EntityID) != m_NextTransform.end()) { // Exists in map
|
if (m_NextTransform.find(transform.EntityID) != m_NextTransform.end()) { // Exists in map
|
||||||
m_NextTransform[transform.EntityID].interpolationTime += dt;
|
m_NextTransform[transform.EntityID].interpolationTime += dt;
|
||||||
Transform sTransform = m_NextTransform[transform.EntityID];
|
Transform sTransform = m_NextTransform[transform.EntityID];
|
||||||
@@ -31,11 +36,10 @@ void InterpolationSystem::UpdateComponent(EntityWrapper& entity, ComponentWrappe
|
|||||||
// Position
|
// Position
|
||||||
glm::vec3 nextPosition = sTransform.Position;
|
glm::vec3 nextPosition = sTransform.Position;
|
||||||
glm::vec3 currentPosition = static_cast<glm::vec3>(transform["Position"]);
|
glm::vec3 currentPosition = static_cast<glm::vec3>(transform["Position"]);
|
||||||
// HACK: Hardcoded tolerance value for player position desync = 1
|
// HACK: Don't force position for players
|
||||||
if (isLocalPlayer && glm::length(nextPosition - currentPosition) < 1.f) {
|
if (!isLocalPlayer) {
|
||||||
return;
|
(glm::vec3&)transform["Position"] += vectorInterpolation<glm::vec3>(currentPosition, nextPosition, sTransform.interpolationTime);
|
||||||
}
|
}
|
||||||
(glm::vec3&)transform["Position"] += vectorInterpolation<glm::vec3>(currentPosition, nextPosition, sTransform.interpolationTime);
|
|
||||||
// Orientation
|
// Orientation
|
||||||
// Don't force orientation for players
|
// Don't force orientation for players
|
||||||
if (!isLocalPlayer) {
|
if (!isLocalPlayer) {
|
||||||
|
|||||||
Reference in New Issue
Block a user