Ignoring interpolation and rendering for local player entities!

This commit is contained in:
2016-01-23 00:40:18 +01:00
parent 3ac3311c0c
commit 31e7340daf
8 changed files with 113 additions and 23 deletions
+34 -1
View File
@@ -7,6 +7,7 @@ RenderSystem::RenderSystem(World* world, EventBroker* eventBroker, const IRender
{
EVENT_SUBSCRIBE_MEMBER(m_ESetCamera, &RenderSystem::OnSetCamera);
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &RenderSystem::OnInputCommand);
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &RenderSystem::OnPlayerSpawned);
m_Camera = new Camera((float)m_Renderer->Resolution().Width / m_Renderer->Resolution().Height, glm::radians(45.f), 0.01f, 5000.f);
}
@@ -46,6 +47,18 @@ void RenderSystem::fillModels(std::list<std::shared_ptr<RenderJob>>& jobs)
continue;
}
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) {
continue;
}
Model* model;
try {
model = ResourceManager::Load<::Model, true>(resource);
@@ -68,6 +81,14 @@ void RenderSystem::fillModels(std::list<std::shared_ptr<RenderJob>>& jobs)
}
}
bool RenderSystem::OnPlayerSpawned(Events::PlayerSpawned& e)
{
if (e.PlayerID == -1) {
m_LocalPlayer = e.Player;
}
return true;
}
void RenderSystem::fillPointLights(std::list<std::shared_ptr<RenderJob>>& jobs, World* world)
{
auto pointLights = m_World->GetComponents("PointLight");
@@ -128,6 +149,18 @@ void RenderSystem::fillText(std::list<std::shared_ptr<RenderJob>>& 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<Font>(resource);
@@ -169,7 +202,7 @@ void RenderSystem::Update(double dt)
fillModels(scene.ForwardJobs);
fillPointLights(scene.PointLightJobs, m_World);
fillDirectionalLights(scene.DirectionalLightJobs, m_World);
fillText(scene.TextJobs, world);
fillText(scene.TextJobs, m_World);
m_RenderFrame->Add(scene);
}