2020-08-06 07:00:02 +00:00
|
|
|
using Encompass;
|
|
|
|
using KavTest.Components;
|
|
|
|
using KavTest.Messages;
|
|
|
|
|
|
|
|
namespace KavTest.Engines
|
|
|
|
{
|
2020-09-19 08:06:50 +00:00
|
|
|
[Reads(typeof(PerspectiveCameraComponent), typeof(ArcballTransformComponent))]
|
2020-08-06 21:21:34 +00:00
|
|
|
[Receives(typeof(MoveCameraMessage), typeof(RotateCameraMessage))]
|
|
|
|
[Writes(typeof(ArcballTransformComponent))]
|
2020-08-06 07:00:02 +00:00
|
|
|
public class CameraEngine : Engine
|
|
|
|
{
|
|
|
|
public override void Update(double dt)
|
|
|
|
{
|
2020-09-19 08:06:50 +00:00
|
|
|
if (SomeComponent<PerspectiveCameraComponent>())
|
2020-08-06 07:00:02 +00:00
|
|
|
{
|
2020-09-19 08:06:50 +00:00
|
|
|
var cameraEntity = ReadEntity<PerspectiveCameraComponent>();
|
2020-08-06 21:21:34 +00:00
|
|
|
var arcballTransformComponent = GetComponent<ArcballTransformComponent>(cameraEntity);
|
|
|
|
|
|
|
|
var transform = arcballTransformComponent.ArcballTransform;
|
2020-08-06 07:00:02 +00:00
|
|
|
|
|
|
|
foreach (var moveMessage in ReadMessages<MoveCameraMessage>())
|
|
|
|
{
|
2020-08-06 21:21:34 +00:00
|
|
|
transform = transform.TranslateLocal(moveMessage.Translation * (float)dt);
|
2020-08-06 07:00:02 +00:00
|
|
|
}
|
2020-08-06 21:21:34 +00:00
|
|
|
|
|
|
|
foreach (var rotateMessage in ReadMessages<RotateCameraMessage>())
|
|
|
|
{
|
2020-08-06 22:29:23 +00:00
|
|
|
transform = transform.RotateLocal(rotateMessage.Yaw * 0.25f * (float)dt, rotateMessage.Pitch * 0.25f * (float)dt);
|
2020-08-06 21:21:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SetComponent(cameraEntity, new ArcballTransformComponent(transform));
|
2020-08-06 07:00:02 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|