using System; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Pong.Behaviours; using Syntriax.Engine.Core; using Syntriax.Engine.Core.Abstract; using Syntriax.Engine.Graphics.TwoDimensional; using Syntriax.Engine.Input; using Syntriax.Engine.Physics2D; namespace Pong; public class Game1 : Game { private GraphicsDeviceManager _graphics = null!; private PhysicsEngine2D engine; private SpriteBatch _spriteBatch = null!; public static GameManager gameManager = null!; public static Sprite spriteBox = null!; public Game1() { _graphics = new GraphicsDeviceManager(this) { PreferredBackBufferWidth = 1024, PreferredBackBufferHeight = 576 }; Content.RootDirectory = "Content"; IsMouseVisible = true; } protected override void Initialize() { gameManager = new(); // TODO: Add your initialization logic here gameManager.Initialize(); base.Initialize(); } protected override void LoadContent() { engine = new PhysicsEngine2D() { IterationCount = 100 }; _spriteBatch = new SpriteBatch(GraphicsDevice); spriteBox = new Sprite() { Texture2D = Content.Load("Sprites/Pixel") }; Sprite spriteBall = new Sprite() { Texture2D = Content.Load("Sprites/Circle") }; IGameObject gameObjectCamera = gameManager.InstantiateGameObject(); gameObjectCamera.Name = "Camera"; gameObjectCamera.Transform.Position = Vector2.Zero; gameManager.Camera = gameObjectCamera.BehaviourController.AddBehaviour(); gameManager.Camera.Viewport = GraphicsDevice.Viewport; gameObjectBall = gameManager.InstantiateGameObject(); gameObjectBall.Name = "Ball"; gameObjectBall.Transform.Position = Vector2.Zero; gameObjectBall.Transform.Scale = new Vector2(1f / 51.2f, 1f / 51.2f); engine.AddRigidBody(gameObjectBall.BehaviourController.AddBehaviour()); gameObjectBall.BehaviourController.AddBehaviour(new Vector2(.1f, .01f), 500f); gameObjectBall.BehaviourController.AddBehaviour().Assign(spriteBall); gameObjectBall.BehaviourController.AddBehaviour().AABBLocal = new AABB(-Vector2.One * 512f * .5f, Vector2.One * 512f * .5f); IGameObject gameObjectLeft = gameManager.InstantiateGameObject(); gameObjectLeft.Name = "Left"; gameObjectLeft.Transform.Position = new Vector2(-452, 0f); gameObjectLeft.Transform.Scale = new Vector2(10f, 40f); gameObjectLeft.BehaviourController.AddBehaviour(); gameObjectLeft.BehaviourController.AddBehaviour(Keys.W, Keys.S, 268f, -268f, 400f); gameObjectLeft.BehaviourController.AddBehaviour().Assign(spriteBox); gameObjectLeft.BehaviourController.AddBehaviour().AABBLocal = new AABB(-Vector2.One * .5f, Vector2.One * .5f); engine.AddRigidBody(gameObjectLeft.BehaviourController.AddBehaviour()); IGameObject gameObjectRight = gameManager.InstantiateGameObject(); gameObjectRight.Name = "Right"; gameObjectRight.Transform.Position = new Vector2(452, 0f); gameObjectRight.Transform.Scale = new Vector2(10f, 40f); gameObjectRight.BehaviourController.AddBehaviour(); gameObjectRight.BehaviourController.AddBehaviour(Keys.Up, Keys.Down, 268f, -268f, 400f); gameObjectRight.BehaviourController.AddBehaviour().Assign(spriteBox); gameObjectRight.BehaviourController.AddBehaviour().AABBLocal = new AABB(-Vector2.One * .5f, Vector2.One * .5f); engine.AddRigidBody(gameObjectRight.BehaviourController.AddBehaviour()); IGameObject goPlayAreaTop = gameManager.InstantiateGameObject(); goPlayAreaTop.Transform.Position = new Vector2(0f, 288f + 20f); goPlayAreaTop.Transform.Scale = new Vector2(10240f, 40f); // goPlayAreaTop.BehaviourController.AddBehaviour().Assign(spriteBox); goPlayAreaTop.BehaviourController.AddBehaviour().AABBLocal = new AABB(-Vector2.One * .5f, Vector2.One * .5f); engine.AddRigidBody(goPlayAreaTop.BehaviourController.AddBehaviour()); IGameObject goPlayAreaBottom = gameManager.InstantiateGameObject(); goPlayAreaBottom.Transform.Position = new Vector2(0f, -(288f + 20f)); goPlayAreaBottom.Transform.Scale = new Vector2(10240f, 40f); // goPlayAreaBottom.BehaviourController.AddBehaviour().Assign(spriteBox); goPlayAreaBottom.BehaviourController.AddBehaviour().AABBLocal = new AABB(-Vector2.One * .5f, Vector2.One * .5f); engine.AddRigidBody(goPlayAreaBottom.BehaviourController.AddBehaviour()); IGameObject goPlayAreaRight = gameManager.InstantiateGameObject(); goPlayAreaRight.Transform.Position = new Vector2(512f + 20f, 0f); goPlayAreaRight.Transform.Scale = new Vector2(40f, 5760f); // goPlayAreaRight.BehaviourController.AddBehaviour().Assign(spriteBox); goPlayAreaRight.BehaviourController.AddBehaviour().AABBLocal = new AABB(-Vector2.One * .5f, Vector2.One * .5f); engine.AddRigidBody(goPlayAreaRight.BehaviourController.AddBehaviour()); IGameObject goPlayAreaLeft = gameManager.InstantiateGameObject(); goPlayAreaLeft.Transform.Position = new Vector2(-(512f + 20f), 0f); goPlayAreaLeft.Transform.Scale = new Vector2(40f, 5760f); // goPlayAreaLeft.BehaviourController.AddBehaviour().Assign(spriteBox); goPlayAreaLeft.BehaviourController.AddBehaviour().AABBLocal = new AABB(-Vector2.One * .5f, Vector2.One * .5f); engine.AddRigidBody(goPlayAreaLeft.BehaviourController.AddBehaviour()); // IGameObject goPlayAreaCenter = gameManager.InstantiateGameObject(); // goPlayAreaCenter.Transform.Position = new Vector2(100f, 100f); // goPlayAreaCenter.Transform.Scale = new Vector2(40f, 40f); // // goPlayAreaCenter.BehaviourController.AddBehaviour().Assign(spriteBox); // engine.AddRigidBody(goPlayAreaCenter.BehaviourController.AddBehaviour()); // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); if (Keyboard.GetState().IsKeyDown(Keys.F)) { if (_graphics.IsFullScreen) return; _graphics.PreferMultiSampling = false; _graphics.PreferredBackBufferWidth = GraphicsDevice.Adapter.CurrentDisplayMode.Width; _graphics.PreferredBackBufferHeight = GraphicsDevice.Adapter.CurrentDisplayMode.Height; _graphics.IsFullScreen = true; _graphics.ApplyChanges(); float previousScreenSize = MathF.Sqrt(MathF.Pow(gameManager.Camera.Viewport.Width, 2f) + MathF.Pow(gameManager.Camera.Viewport.Height, 2f)); float currentScreenSize = MathF.Sqrt(MathF.Pow(GraphicsDevice.Viewport.Width, 2f) + MathF.Pow(GraphicsDevice.Viewport.Height, 2f)); gameManager.Camera.Zoom /= previousScreenSize / currentScreenSize; gameManager.Camera.Viewport = GraphicsDevice.Viewport; } if (Keyboard.GetState().IsKeyDown(Keys.U)) gameManager.Camera.Zoom += gameTime.ElapsedGameTime.Nanoseconds * 0.00025f; if (Keyboard.GetState().IsKeyDown(Keys.J)) gameManager.Camera.Zoom -= gameTime.ElapsedGameTime.Nanoseconds * 0.00025f; if (Keyboard.GetState().IsKeyDown(Keys.Q)) gameManager.Camera.Rotation += gameTime.ElapsedGameTime.Nanoseconds * 0.000025f; if (Keyboard.GetState().IsKeyDown(Keys.E)) gameManager.Camera.Rotation -= gameTime.ElapsedGameTime.Nanoseconds * 0.000025f; if (Keyboard.GetState().IsKeyDown(Keys.N)) { seconds = 70f; while (physicsTimer + 0.01f < seconds) { physicsTimer += 0.01f; engine.Step(.01f); } } if (Keyboard.GetState().IsKeyDown(Keys.M)) { seconds = 0f; while (physicsTimer - 0.01f > seconds) { physicsTimer -= 0.01f; engine.Step(-.01f); } } if (Keyboard.GetState().IsKeyDown(Keys.Space)) { seconds += gameTime.ElapsedGameTime.Milliseconds * .0025f; while (physicsTimer + 0.01f < seconds) { Console.WriteLine($"Physics Timer: {physicsTimer}"); physicsTimer += 0.01f; engine.Step(.01f); } } if (Keyboard.GetState().IsKeyDown(Keys.B)) { seconds -= gameTime.ElapsedGameTime.Milliseconds * .0025f; while (physicsTimer - 0.01f > seconds) { Console.WriteLine($"Physics Timer: {physicsTimer}"); physicsTimer -= 0.01f; engine.Step(-.01f); } } // while (physicsTimer + 0.01f < gameTime.TotalGameTime.TotalMilliseconds * .001f)//seconds) // { // Console.WriteLine($"Physics Timer: {physicsTimer}"); // physicsTimer += 0.01f; // engine.Step(.01f); // } gameManager.Update(gameTime); base.Update(gameTime); } static float physicsTimer = 0f; static float seconds = 0f; private GameObject gameObjectBall; protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(new Color() { R = 32, G = 32, B = 32 }); // gameManager.Camera.Position = gameObjectBall.Transform.Position; // Console.WriteLine($"Pos: {gameManager.Camera.Position}"); // TODO: Add your drawing code here gameManager.PreDraw(gameTime); gameManager.Camera.Update(); gameManager.Draw(_spriteBatch); base.Draw(gameTime); } }