diff --git a/include/Game/Events/EPlayerSpawned.h b/include/Engine/Core/EPlayerSpawned.h similarity index 100% rename from include/Game/Events/EPlayerSpawned.h rename to include/Engine/Core/EPlayerSpawned.h diff --git a/include/Engine/Core/EntityWrapper.h b/include/Engine/Core/EntityWrapper.h index d0e5e31f..711f5045 100644 --- a/include/Engine/Core/EntityWrapper.h +++ b/include/Engine/Core/EntityWrapper.h @@ -26,6 +26,7 @@ struct EntityWrapper bool HasComponent(const std::string& componentName); EntityWrapper Parent(); EntityWrapper FirstChildByName(const std::string& name); + bool IsChildOf(EntityWrapper potentialParent); bool Valid(); ComponentWrapper operator[](const char* componentName); diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 9717d22f..92d78f4a 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -20,7 +20,7 @@ #include "Input/EInputCommand.h" #include "Core/EPlayerDamage.h" #include "Network/EInterpolate.h" -#include "Game/Events/EPlayerSpawned.h" +#include "Core/EPlayerSpawned.h" class Client : public Network { diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index 87c8d944..35e6d855 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -15,8 +15,7 @@ #include "Input/EInputCommand.h" #include "Core/EPlayerDamage.h" #include "Network/EPlayerDisconnected.h" - -#include "Game/Events/EPlayerSpawned.h" +#include "Core/EPlayerSpawned.h" class Server : public Network { diff --git a/include/Engine/Rendering/RenderSystem.h b/include/Engine/Rendering/RenderSystem.h index 4c23c6c6..005d2eb7 100644 --- a/include/Engine/Rendering/RenderSystem.h +++ b/include/Engine/Rendering/RenderSystem.h @@ -15,7 +15,7 @@ #include "Renderer.h" #include "PointLightJob.h" #include "../Core/Transform.h" -#include "../../Game/Events/EPlayerSpawned.h" +#include "../Core/EPlayerSpawned.h" class RenderSystem : public ImpureSystem { diff --git a/include/Game/Systems/InterpolationSystem.h b/include/Game/Systems/InterpolationSystem.h index 707c0acf..1e345c91 100644 --- a/include/Game/Systems/InterpolationSystem.h +++ b/include/Game/Systems/InterpolationSystem.h @@ -12,7 +12,7 @@ #include "Core/EventBroker.h" #include "Core/ResourceManager.h" #include "Core/ConfigFile.h" -#include "Events/EPlayerSpawned.h" +#include "Core/EPlayerSpawned.h" #include "Network/EInterpolate.h" diff --git a/include/Game/Systems/PlayerMovementSystem.h b/include/Game/Systems/PlayerMovementSystem.h index f5b6539b..72f3b879 100644 --- a/include/Game/Systems/PlayerMovementSystem.h +++ b/include/Game/Systems/PlayerMovementSystem.h @@ -1,7 +1,7 @@ #include "Common.h" #include "GLM.h" #include "Core/System.h" -#include "Events/EPlayerSpawned.h" +#include "Core/EPlayerSpawned.h" #include "Input/FirstPersonInputController.h" class PlayerMovementSystem : public ImpureSystem, PureSystem diff --git a/include/Game/Systems/PlayerSpawnSystem.h b/include/Game/Systems/PlayerSpawnSystem.h index 6c0f6ce3..eb4d3c97 100644 --- a/include/Game/Systems/PlayerSpawnSystem.h +++ b/include/Game/Systems/PlayerSpawnSystem.h @@ -2,7 +2,7 @@ #include "Input/EInputCommand.h" #include "Systems/SpawnerSystem.h" #include "Events/ESpawnerSpawn.h" -#include "Events/EPlayerSpawned.h" +#include "Core/EPlayerSpawned.h" #include "Rendering/ESetCamera.h" #include "Core/ConfigFile.h" diff --git a/src/Engine/Core/EntityWrapper.cpp b/src/Engine/Core/EntityWrapper.cpp index 2f9c17db..55d341e1 100644 --- a/src/Engine/Core/EntityWrapper.cpp +++ b/src/Engine/Core/EntityWrapper.cpp @@ -36,6 +36,18 @@ EntityWrapper EntityWrapper::FirstChildByName(const std::string& name) return EntityWrapper::Invalid; } +bool EntityWrapper::IsChildOf(EntityWrapper potentialParent) +{ + EntityWrapper entity = *this; + while (entity.Parent().Valid()) { + entity = entity.Parent(); + if (entity == potentialParent) { + return true; + } + } + return false; +} + bool EntityWrapper::Valid() { if (this->World == nullptr) { diff --git a/src/Engine/Rendering/RenderSystem.cpp b/src/Engine/Rendering/RenderSystem.cpp index a478bb43..a8f330f0 100644 --- a/src/Engine/Rendering/RenderSystem.cpp +++ b/src/Engine/Rendering/RenderSystem.cpp @@ -48,14 +48,9 @@ void RenderSystem::fillModels(std::list>& jobs) } EntityWrapper entity(m_World, modelComponent.EntityID); - bool isLocalPlayer = entity == m_LocalPlayer; - while (entity.Parent().Valid()) { - entity = entity.Parent(); - if (entity == m_LocalPlayer) { - isLocalPlayer = true; - } - } - if (isLocalPlayer) { + + // Don't render the local player + if (entity == m_LocalPlayer || entity.IsChildOf(m_LocalPlayer)) { continue; } @@ -149,18 +144,6 @@ void RenderSystem::fillText(std::list>& jobs, World* continue; } - EntityWrapper entity(m_World, textComponent.EntityID); - bool isLocalPlayer = entity == m_LocalPlayer; - while (entity.Parent().Valid()) { - entity = entity.Parent(); - if (entity == m_LocalPlayer) { - isLocalPlayer = true; - } - } - if (isLocalPlayer) { - continue; - } - Font* font; try { font = ResourceManager::Load(resource); diff --git a/src/Game/Systems/InterpolationSystem.cpp b/src/Game/Systems/InterpolationSystem.cpp index 84f50456..2b6e82f2 100644 --- a/src/Game/Systems/InterpolationSystem.cpp +++ b/src/Game/Systems/InterpolationSystem.cpp @@ -27,16 +27,17 @@ void InterpolationSystem::UpdateComponent(EntityWrapper& entity, ComponentWrappe } } if (transform.Info.Name == "Transform") { - bool isLocalPlayer = entity == m_LocalPlayer || entity.Parent() == m_LocalPlayer; + bool isLocalPlayer = entity == m_LocalPlayer || entity.IsChildOf(m_LocalPlayer); // Position glm::vec3 nextPosition = sTransform.Position; glm::vec3 currentPosition = static_cast(transform["Position"]); + // HACK: Hardcoded tolerance value for player position desync = 1 if (isLocalPlayer && glm::length(nextPosition - currentPosition) < 1.f) { return; } (glm::vec3&)transform["Position"] += vectorInterpolation(currentPosition, nextPosition, sTransform.interpolationTime); // Orientation - //bool isPlayer = entity.HasComponent("Player") || entity.Parent().HasComponent("Player"); + // Don't force orientation for players if (!isLocalPlayer) { glm::quat nextOrientation = sTransform.Orientation; glm::quat currentOrientation = glm::quat(static_cast(transform["Orientation"]));