KavTest/KavTest/Renderers/SceneRenderer.cs

75 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using Encompass;
using Kav;
using KavTest.Components;
using Microsoft.Xna.Framework.Graphics;
namespace KavTest.Renderers
{
public class SceneRenderer : GeneralRenderer
{
private GraphicsDevice GraphicsDevice { get; }
private IEnumerable<Kav.Model> Models
{
get
{
foreach (var entity in ReadEntitiesAsEnumerable<ModelComponent>())
{
var transformComponent = GetComponent<Transform3DComponent>(entity);
var modelComponent = GetComponent<ModelComponent>(entity);
modelComponent.Model.ApplyTransform(transformComponent.Transform.TransformMatrix);
yield return modelComponent.Model;
}
}
}
private IEnumerable<PointLight> PointLights
{
get
{
foreach (var entity in ReadEntitiesAsEnumerable<PointLightComponent>())
{
var transformComponent = GetComponent<Transform3DComponent>(entity);
var pointLightComponent = GetComponent<PointLightComponent>(entity);
yield return new PointLight(
transformComponent.Transform.TransformMatrix.Translation,
pointLightComponent.Color,
pointLightComponent.Intensity
);
}
}
}
public SceneRenderer(GraphicsDevice graphicsDevice)
{
GraphicsDevice = graphicsDevice;
}
public override void Render()
{
if (SomeComponent<CameraComponent>())
{
var cameraEntity = ReadEntity<CameraComponent>();
var transformComponent = GetComponent<ArcballTransformComponent>(cameraEntity);
var cameraComponent = GetComponent<CameraComponent>(cameraEntity);
var camera = new Kav.Camera(
transformComponent.ArcballTransform.TransformMatrix,
cameraComponent.Projection
);
Kav.Renderer.Render(
GraphicsDevice,
camera,
Models,
PointLights
);
}
}
}
}