Files
doom-dm/DoomDeathmatch/src/Component/Util/ControllerComponent.cs
2025-01-06 00:45:28 +03:00

51 lines
1.6 KiB
C#

using DoomDeathmatch.Component.MVC.Controller;
using Engine.Input;
using OpenTK.Mathematics;
namespace DoomDeathmatch.Component.Util;
public class ControllerComponent : Engine.Scene.Component.Component
{
public float RotationSpeed { get; set; } = 70.0f;
private readonly IInputHandler _inputHandler = Engine.Engine.Instance.InputHandler!;
private MovementController _movementController = null!;
public override void Awake()
{
_movementController = GameObject.GetComponent<MovementController>()!;
ArgumentNullException.ThrowIfNull(_movementController);
}
public override void Update(double parDeltaTime)
{
var movement = Vector3.Zero;
var rotation = 0.0f;
if (_inputHandler.IsKeyPressed(KeyboardButtonCode.W))
movement.Y += 1;
if (_inputHandler.IsKeyPressed(KeyboardButtonCode.S))
movement.Y -= 1;
if (_inputHandler.IsKeyPressed(KeyboardButtonCode.D))
movement.X += 1;
if (_inputHandler.IsKeyPressed(KeyboardButtonCode.A))
movement.X -= 1;
if (_inputHandler.IsKeyPressed(KeyboardButtonCode.Q))
rotation += RotationSpeed;
if (_inputHandler.IsKeyPressed(KeyboardButtonCode.E))
rotation -= RotationSpeed;
if (movement.LengthSquared > 0)
{
movement.Normalize();
movement = GameObject.Transform.Rotation * movement;
_movementController.ApplyMovement(movement);
}
GameObject.Transform.Rotation *= Quaternion.FromAxisAngle(Vector3.UnitZ, MathHelper.DegreesToRadians(rotation) *
(float)parDeltaTime);
}
}