feat: Basic Play Area
This commit is contained in:
		| @@ -6,9 +6,10 @@ using Syntriax.Engine.Input; | ||||
|  | ||||
| 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; | ||||
|  | ||||
|     protected override void OnInitialize() => StartDirection.Normalize(); | ||||
| @@ -16,5 +17,29 @@ public class MovementBallBehaviour(Vector2 StartDirection, float Speed) : Behavi | ||||
|     protected override void OnUpdate(GameTime time) | ||||
|     { | ||||
|         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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										26
									
								
								Game/Behaviours/PlayAreaBehaviour.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Game/Behaviours/PlayAreaBehaviour.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -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> | ||||
|     <PublishReadyToRun>false</PublishReadyToRun> | ||||
|     <TieredCompilation>false</TieredCompilation> | ||||
|     <Nullable>enable</Nullable> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup> | ||||
|     <ApplicationManifest>app.manifest</ApplicationManifest> | ||||
|   | ||||
| @@ -51,11 +51,15 @@ public class Game1 : Game | ||||
|         gameManager.Camera = gameObjectCamera.BehaviourController.AddBehaviour<CameraBehaviour>(); | ||||
|         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>(); | ||||
|         gameObjectBall.Name = "Ball"; | ||||
|         gameObjectBall.Transform.Position = Vector2.Zero; | ||||
|         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); | ||||
|  | ||||
|         IGameObject gameObjectLeft = gameManager.InstantiateGameObject<GameObject>(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user