KavTest/KavTest/Engines/CameraEngine.cs

36 lines
1.3 KiB
C#
Raw Normal View History

2020-08-06 07:00:02 +00:00
using Encompass;
using KavTest.Components;
using KavTest.Messages;
namespace KavTest.Engines
{
2020-08-06 21:21:34 +00:00
[Reads(typeof(CameraComponent), typeof(ArcballTransformComponent))]
[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)
{
if (SomeComponent<CameraComponent>())
{
var cameraEntity = ReadEntity<CameraComponent>();
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>())
{
transform = transform.RotateLocal(-rotateMessage.Yaw * 0.25f * (float)dt, rotateMessage.Pitch * 0.25f * (float)dt);
}
SetComponent(cameraEntity, new ArcballTransformComponent(transform));
2020-08-06 07:00:02 +00:00
}
}
}
}