Split screen working

This commit is contained in:
2014-05-19 17:20:43 +02:00
parent e07a0a2b1a
commit bd7ba73bca
7 changed files with 184 additions and 115 deletions
+50 -33
View File
@@ -2,27 +2,55 @@
#include "RenderSystem.h"
#include "World.h"
void Systems::RenderSystem::RegisterResourceTypes(ResourceManager* rm)
{
rm->RegisterType("Model", [rm](std::string resourceName) { return new Model(rm, *rm->Load<OBJ>("OBJ", resourceName)); });
rm->RegisterType("OBJ", [](std::string resourceName) { return new OBJ(resourceName); });
rm->RegisterType("Texture", [](std::string resourceName) { return new Texture(resourceName); });
}
void Systems::RenderSystem::RegisterComponents(ComponentFactory* cf)
{
cf->Register("Camera", []() { return new Components::Camera(); });
cf->Register("Model", []() { return new Components::Model(); });
cf->Register("Sprite", []() { return new Components::Sprite(); });
cf->Register("PointLight", []() { return new Components::PointLight(); });
cf->Register("DirectionalLight", []() { return new Components::DirectionalLight(); });
cf->Register("Viewport", []() { return new Components::Viewport(); });
}
void Systems::RenderSystem::OnEntityCommit(EntityID entity)
{
auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform");
auto camera = m_World->GetComponent<Components::Camera>(entity, "Camera");
if (transform && camera)
{
m_Renderer->RegisterCamera(entity, camera->FOV, camera->NearClip, camera->FarClip);
m_Renderer->UpdateCamera(entity, m_TransformSystem->AbsolutePosition(entity), m_TransformSystem->AbsoluteOrientation(entity), camera->FOV, camera->NearClip, camera->FarClip);
}
auto viewport = m_World->GetComponent<Components::Viewport>(entity, "Viewport");
if (viewport)
{
m_Renderer->CreateViewport(entity, viewport->Left, viewport->Top, viewport->Right, viewport->Bottom);
m_Renderer->RegisterViewport(entity, viewport->Left, viewport->Top, viewport->Right, viewport->Bottom);
if (viewport->Camera != 0)
{
m_Renderer->UpdateViewport(entity, viewport->Camera);
}
}
}
void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform");
if (transformComponent == nullptr)
return;
// Draw models
auto modelComponent = m_World->GetComponent<Components::Model>(entity, "Model");
if (modelComponent != nullptr)
if (transformComponent&& modelComponent)
{
auto model = m_World->GetResourceManager()->Load<Model>("Model", modelComponent->ModelFile);
if (model != nullptr)
if (model)
{
/*glm::vec3 position = m_TransformSystem->AbsolutePosition(entity);
glm::quat orientation = m_TransformSystem->AbsoluteOrientation(entity);
@@ -33,7 +61,7 @@ void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID pa
}
auto pointLightComponent = m_World->GetComponent<Components::PointLight>(entity, "PointLight");
if (pointLightComponent != nullptr)
if (transformComponent && pointLightComponent)
{
glm::vec3 position = m_TransformSystem->AbsolutePosition(entity);
m_Renderer->AddPointLightToDraw(
@@ -48,18 +76,27 @@ void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID pa
}
auto cameraComponent = m_World->GetComponent<Components::Camera>(entity, "Camera");
if (cameraComponent != nullptr)
if (transformComponent && cameraComponent)
{
m_Renderer->GetCamera()->Position(m_TransformSystem->AbsolutePosition(entity));
m_Renderer->GetCamera()->Orientation(m_TransformSystem->AbsoluteOrientation(entity));
m_Renderer->UpdateCamera(entity
, m_TransformSystem->AbsolutePosition(entity)
, m_TransformSystem->AbsoluteOrientation(entity)
, cameraComponent->FOV
, cameraComponent->NearClip
, cameraComponent->FarClip);
}
m_Renderer->GetCamera()->FOV(cameraComponent->FOV);
m_Renderer->GetCamera()->NearClip(cameraComponent->NearClip);
m_Renderer->GetCamera()->FarClip(cameraComponent->FarClip);
auto viewportComponent = m_World->GetComponent<Components::Viewport>(entity, "Viewport");
if (viewportComponent)
{
if (viewportComponent->Camera != 0)
{
m_Renderer->UpdateViewport(entity, viewportComponent->Camera);
}
}
auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity, "Sprite");
if(spriteComponent != nullptr)
if (transformComponent && spriteComponent)
{
//TEMP
Texture* texture = m_World->GetResourceManager()->Load<Texture>("Texture", spriteComponent->SpriteFile);
@@ -76,23 +113,3 @@ void Systems::RenderSystem::Initialize()
m_Renderer->SetSphereModel(m_World->GetResourceManager()->Load<Model>("Model", "Models/Placeholders/PhysicsTest/Sphere.obj"));
}
void Systems::RenderSystem::RegisterComponents(ComponentFactory* cf)
{
cf->Register("Camera", []() { return new Components::Camera(); });
cf->Register("Model", []() { return new Components::Model(); });
cf->Register("Sprite", []() { return new Components::Sprite(); });
cf->Register("PointLight", []() { return new Components::PointLight(); });
cf->Register("DirectionalLight", []() { return new Components::DirectionalLight(); });
}
void Systems::RenderSystem::RegisterResourceTypes(ResourceManager* rm)
{
rm->RegisterType("Model", [rm](std::string resourceName) { return new Model(rm, *rm->Load<OBJ>("OBJ", resourceName)); });
rm->RegisterType("OBJ", [](std::string resourceName) { return new OBJ(resourceName); });
rm->RegisterType("Texture", [](std::string resourceName) { return new Texture(resourceName); });
}