feat: Added Player Objects w/ Movement Behaviour
This commit is contained in:
56
Game/Behaviours/MovementBehaviour.cs
Normal file
56
Game/Behaviours/MovementBehaviour.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Input;
|
||||
using Syntriax.Engine.Core;
|
||||
using Syntriax.Engine.Input;
|
||||
|
||||
namespace Pong.Behaviours;
|
||||
|
||||
public class MovementBehaviour(Keys Up, Keys Down, float Speed) : BehaviourOverride
|
||||
{
|
||||
private Keys Up { get; } = Up;
|
||||
private Keys Down { get; } = Down;
|
||||
public float Speed { get; set; } = Speed;
|
||||
|
||||
private bool isUpPressed = false;
|
||||
private bool isDownPressed = false;
|
||||
|
||||
private IKeyboardInputs inputs = null!;
|
||||
|
||||
protected override void OnUpdate(GameTime time)
|
||||
{
|
||||
if (isUpPressed && isDownPressed)
|
||||
return;
|
||||
|
||||
if (isUpPressed)
|
||||
GameObject.Transform.Position = GameObject.Transform.Position + Vector2.UnitY * (float)time.ElapsedGameTime.TotalSeconds * Speed;
|
||||
else if (isDownPressed)
|
||||
GameObject.Transform.Position = GameObject.Transform.Position + -Vector2.UnitY * (float)time.ElapsedGameTime.TotalSeconds * Speed;
|
||||
}
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
if (!BehaviourController.TryGetBehaviour(out inputs))
|
||||
throw new Exception($"{nameof(IKeyboardInputs)} is missing on ${GameObject.Name}.");
|
||||
|
||||
inputs.RegisterOnPress(Up, OnUpPressed);
|
||||
inputs.RegisterOnRelease(Up, OnUpReleased);
|
||||
|
||||
inputs.RegisterOnPress(Down, OnDownPressed);
|
||||
inputs.RegisterOnRelease(Down, OnDownReleased);
|
||||
}
|
||||
|
||||
protected override void OnFinalize()
|
||||
{
|
||||
inputs.UnregisterOnPress(Up, OnUpPressed);
|
||||
inputs.UnregisterOnRelease(Up, OnUpReleased);
|
||||
|
||||
inputs.UnregisterOnPress(Down, OnDownPressed);
|
||||
inputs.UnregisterOnRelease(Down, OnDownReleased);
|
||||
}
|
||||
|
||||
private void OnUpPressed(IKeyboardInputs inputs, Keys keys) => isUpPressed = true;
|
||||
private void OnUpReleased(IKeyboardInputs inputs, Keys keys) => isUpPressed = false;
|
||||
private void OnDownPressed(IKeyboardInputs inputs, Keys keys) => isDownPressed = true;
|
||||
private void OnDownReleased(IKeyboardInputs inputs, Keys keys) => isDownPressed = false;
|
||||
}
|
Reference in New Issue
Block a user