feat: Basic Play Area
This commit is contained in:
parent
38c6691180
commit
5512696a04
|
@ -6,9 +6,10 @@ using Syntriax.Engine.Input;
|
||||||
|
|
||||||
namespace Pong.Behaviours;
|
namespace Pong.Behaviours;
|
||||||
|
|
||||||
public class MovementBallBehaviour(Vector2 StartDirection, float Speed) : BehaviourOverride
|
public class MovementBallBehaviour(Vector2 StartDirection, PlayAreaBehaviour PlayAreaBehaviour, float Speed) : BehaviourOverride
|
||||||
{
|
{
|
||||||
public Vector2 StartDirection { get; } = StartDirection;
|
public Vector2 StartDirection { get; private set; } = StartDirection;
|
||||||
|
public PlayAreaBehaviour PlayAreaBehaviour { get; } = PlayAreaBehaviour;
|
||||||
public float Speed { get; set; } = Speed;
|
public float Speed { get; set; } = Speed;
|
||||||
|
|
||||||
protected override void OnInitialize() => StartDirection.Normalize();
|
protected override void OnInitialize() => StartDirection.Normalize();
|
||||||
|
@ -16,5 +17,29 @@ public class MovementBallBehaviour(Vector2 StartDirection, float Speed) : Behavi
|
||||||
protected override void OnUpdate(GameTime time)
|
protected override void OnUpdate(GameTime time)
|
||||||
{
|
{
|
||||||
GameObject.Transform.Position += StartDirection * (time.ElapsedGameTime.Nanoseconds * .001f) * Speed;
|
GameObject.Transform.Position += StartDirection * (time.ElapsedGameTime.Nanoseconds * .001f) * Speed;
|
||||||
|
|
||||||
|
float absY = MathF.Abs(GameObject.Transform.Position.Y);
|
||||||
|
float differenceY = absY - PlayAreaBehaviour.PlayArea.Y * 0.5f;
|
||||||
|
if (differenceY > 0f)
|
||||||
|
{
|
||||||
|
if (GameObject.Transform.Position.Y > 0f)
|
||||||
|
GameObject.Transform.Position -= Vector2.UnitY * differenceY * 2f;
|
||||||
|
else
|
||||||
|
GameObject.Transform.Position += Vector2.UnitY * differenceY * 2f;
|
||||||
|
|
||||||
|
StartDirection = new(StartDirection.X, -StartDirection.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
float absX = MathF.Abs(GameObject.Transform.Position.X);
|
||||||
|
float differenceX = absX - PlayAreaBehaviour.PlayArea.X * 0.5f;
|
||||||
|
if (differenceX > 0f)
|
||||||
|
{
|
||||||
|
if (GameObject.Transform.Position.X > 0f)
|
||||||
|
GameObject.Transform.Position -= Vector2.UnitX * differenceX * 2f;
|
||||||
|
else
|
||||||
|
GameObject.Transform.Position += Vector2.UnitX * differenceX * 2f;
|
||||||
|
|
||||||
|
StartDirection = new(-StartDirection.X, StartDirection.Y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.Xna.Framework;
|
||||||
|
using Syntriax.Engine.Core;
|
||||||
|
|
||||||
|
namespace Pong.Behaviours;
|
||||||
|
|
||||||
|
public class PlayAreaBehaviour : BehaviourOverride
|
||||||
|
{
|
||||||
|
public Action<PlayAreaBehaviour>? OnPlayAreaChanged { get; set; } = null;
|
||||||
|
|
||||||
|
private Vector2 _playArea = Vector2.Zero;
|
||||||
|
|
||||||
|
public Vector2 PlayArea
|
||||||
|
{
|
||||||
|
get => _playArea;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_playArea == value)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_playArea = value;
|
||||||
|
OnPlayAreaChanged?.Invoke(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -5,6 +5,7 @@
|
||||||
<RollForward>Major</RollForward>
|
<RollForward>Major</RollForward>
|
||||||
<PublishReadyToRun>false</PublishReadyToRun>
|
<PublishReadyToRun>false</PublishReadyToRun>
|
||||||
<TieredCompilation>false</TieredCompilation>
|
<TieredCompilation>false</TieredCompilation>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
|
|
@ -51,11 +51,15 @@ public class Game1 : Game
|
||||||
gameManager.Camera = gameObjectCamera.BehaviourController.AddBehaviour<CameraBehaviour>();
|
gameManager.Camera = gameObjectCamera.BehaviourController.AddBehaviour<CameraBehaviour>();
|
||||||
gameManager.Camera.Viewport = GraphicsDevice.Viewport;
|
gameManager.Camera.Viewport = GraphicsDevice.Viewport;
|
||||||
|
|
||||||
|
IGameObject gameObjectPlayArea = gameManager.InstantiateGameObject<GameObject>();
|
||||||
|
PlayAreaBehaviour playAreaBehaviour = gameObjectPlayArea.BehaviourController.AddBehaviour<PlayAreaBehaviour>();
|
||||||
|
playAreaBehaviour.PlayArea = new Vector2(_graphics.PreferredBackBufferWidth, _graphics.PreferredBackBufferHeight);
|
||||||
|
|
||||||
IGameObject gameObjectBall = gameManager.InstantiateGameObject<GameObject>();
|
IGameObject gameObjectBall = gameManager.InstantiateGameObject<GameObject>();
|
||||||
gameObjectBall.Name = "Ball";
|
gameObjectBall.Name = "Ball";
|
||||||
gameObjectBall.Transform.Position = Vector2.Zero;
|
gameObjectBall.Transform.Position = Vector2.Zero;
|
||||||
gameObjectBall.Transform.Scale = new Vector2(1f / 51.2f, 1f / 51.2f);
|
gameObjectBall.Transform.Scale = new Vector2(1f / 51.2f, 1f / 51.2f);
|
||||||
// gameObjectBall.BehaviourController.AddBehaviour<MovementBallBehaviour>(new Vector2(.1f, .1f), 100f);
|
gameObjectBall.BehaviourController.AddBehaviour<MovementBallBehaviour>(new Vector2(.1f, .1f), playAreaBehaviour, 100f);
|
||||||
gameObjectBall.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBall);
|
gameObjectBall.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBall);
|
||||||
|
|
||||||
IGameObject gameObjectLeft = gameManager.InstantiateGameObject<GameObject>();
|
IGameObject gameObjectLeft = gameManager.InstantiateGameObject<GameObject>();
|
||||||
|
|
Loading…
Reference in New Issue