feat: Added Player Objects w/ Movement Behaviour
This commit is contained in:
parent
03bbababf8
commit
0ec68e6b1a
2
Engine
2
Engine
|
@ -1 +1 @@
|
||||||
Subproject commit 5fcf63c5a70f031fb7a808723fb8a25adb19ab39
|
Subproject commit d60537f9406ae3615c7cdcd6f986cf368fa77cfb
|
|
@ -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;
|
||||||
|
}
|
|
@ -24,6 +24,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Engine\Engine.Core\Engine.Core.csproj" />
|
<ProjectReference Include="..\Engine\Engine.Core\Engine.Core.csproj" />
|
||||||
|
<ProjectReference Include="..\Engine\Engine.Input\Engine.Input.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Target Name="RestoreDotnetTools" BeforeTargets="Restore">
|
<Target Name="RestoreDotnetTools" BeforeTargets="Restore">
|
||||||
<Message Text="Restoring dotnet tools" Importance="High" />
|
<Message Text="Restoring dotnet tools" Importance="High" />
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
using Pong.Behaviours;
|
||||||
using Syntriax.Engine.Core;
|
using Syntriax.Engine.Core;
|
||||||
|
using Syntriax.Engine.Core.Abstract;
|
||||||
|
using Syntriax.Engine.Core.Behaviours;
|
||||||
|
using Syntriax.Engine.Input;
|
||||||
|
|
||||||
namespace Pong;
|
namespace Pong;
|
||||||
|
|
||||||
|
@ -21,7 +25,9 @@ public class Game1 : Game
|
||||||
protected override void Initialize()
|
protected override void Initialize()
|
||||||
{
|
{
|
||||||
gameManager = new();
|
gameManager = new();
|
||||||
|
|
||||||
// TODO: Add your initialization logic here
|
// TODO: Add your initialization logic here
|
||||||
|
gameManager.Initialize();
|
||||||
|
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
}
|
}
|
||||||
|
@ -30,6 +36,25 @@ public class Game1 : Game
|
||||||
{
|
{
|
||||||
_spriteBatch = new SpriteBatch(GraphicsDevice);
|
_spriteBatch = new SpriteBatch(GraphicsDevice);
|
||||||
|
|
||||||
|
Sprite sprite = new Sprite() { Texture2D = Content.Load<Texture2D>("Sprites/Pixel") };
|
||||||
|
{
|
||||||
|
IGameObject gameObject = gameManager.InstantiateGameObject<GameObject>();
|
||||||
|
gameObject.Name = "Left";
|
||||||
|
gameObject.Transform.Position = new Vector2(Window.ClientBounds.Width * .1f, Window.ClientBounds.Height * .5f);
|
||||||
|
gameObject.Transform.Scale = new Vector2(Window.ClientBounds.Width * .02f, Window.ClientBounds.Height * .15f);
|
||||||
|
gameObject.BehaviourController.AddBehaviour<KeyboardInputsBehaviour>();
|
||||||
|
gameObject.BehaviourController.AddBehaviour<MovementBehaviour>(Keys.S, Keys.W, 200f);
|
||||||
|
gameObject.BehaviourController.AddBehaviour<DrawableSpriteBehaviour>().Assign(sprite);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
IGameObject gameObject = gameManager.InstantiateGameObject<GameObject>();
|
||||||
|
gameObject.Name = "Right";
|
||||||
|
gameObject.Transform.Position = new Vector2(Window.ClientBounds.Width * .9f, Window.ClientBounds.Height * .5f);
|
||||||
|
gameObject.Transform.Scale = new Vector2(Window.ClientBounds.Width * .02f, Window.ClientBounds.Height * .15f);
|
||||||
|
gameObject.BehaviourController.AddBehaviour<KeyboardInputsBehaviour>();
|
||||||
|
gameObject.BehaviourController.AddBehaviour<MovementBehaviour>(Keys.Down, Keys.Up, 200f);
|
||||||
|
gameObject.BehaviourController.AddBehaviour<DrawableSpriteBehaviour>().Assign(sprite);
|
||||||
|
}
|
||||||
// TODO: use this.Content to load your game content here
|
// TODO: use this.Content to load your game content here
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,17 +62,28 @@ public class Game1 : Game
|
||||||
{
|
{
|
||||||
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
|
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
|
||||||
Exit();
|
Exit();
|
||||||
|
if (Keyboard.GetState().IsKeyDown(Keys.F))
|
||||||
|
{
|
||||||
|
_graphics.PreferMultiSampling = false;
|
||||||
|
_graphics.PreferredBackBufferWidth = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
|
||||||
|
_graphics.PreferredBackBufferHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;
|
||||||
|
_graphics.IsFullScreen = true;
|
||||||
|
_graphics.ApplyChanges();
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Add your update logic here
|
// TODO: Add your update logic here
|
||||||
|
gameManager.Update(gameTime);
|
||||||
|
|
||||||
base.Update(gameTime);
|
base.Update(gameTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Draw(GameTime gameTime)
|
protected override void Draw(GameTime gameTime)
|
||||||
{
|
{
|
||||||
GraphicsDevice.Clear(Color.CornflowerBlue);
|
GraphicsDevice.Clear(new Color() { R = 32, G = 32, B = 32 });
|
||||||
|
|
||||||
// TODO: Add your drawing code here
|
// TODO: Add your drawing code here
|
||||||
|
gameManager.PreDraw(gameTime);
|
||||||
|
gameManager.Draw(_spriteBatch);
|
||||||
|
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue