153 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
| using Encompass;
 | |
| using Microsoft.Xna.Framework;
 | |
| using Microsoft.Xna.Framework.Graphics;
 | |
| using PongFE.Engines;
 | |
| using PongFE.Enums;
 | |
| using PongFE.Messages;
 | |
| using PongFE.Renderers;
 | |
| using PongFE.Spawners;
 | |
| 
 | |
| namespace PongFE
 | |
| {
 | |
|     class PongFEGame : Game
 | |
|     {
 | |
|         GraphicsDeviceManager graphics;
 | |
| 
 | |
|         WorldBuilder WorldBuilder { get; } = new WorldBuilder();
 | |
|         World World { get; set; }
 | |
| 
 | |
|         SpriteBatch SpriteBatch { get; set; }
 | |
|         Texture2D WhitePixel { get; set; }
 | |
| 
 | |
|         public PongFEGame()
 | |
|         {
 | |
|             graphics = new GraphicsDeviceManager(this);
 | |
|             graphics.PreferredBackBufferWidth = 1280;
 | |
|             graphics.PreferredBackBufferHeight = 720;
 | |
|             graphics.PreferMultiSampling = true;
 | |
|             Content.RootDirectory = "Content";
 | |
| 
 | |
|             Window.AllowUserResizing = true;
 | |
|             IsMouseVisible = true;
 | |
|             IsFixedTimeStep = true;
 | |
|         }
 | |
| 
 | |
|         protected override void LoadContent()
 | |
|         {
 | |
|             SpriteBatch = new SpriteBatch(GraphicsDevice);
 | |
| 
 | |
|             WhitePixel = new Texture2D(GraphicsDevice, 1, 1);
 | |
|             WhitePixel.SetData(new Color[] { Color.White });
 | |
| 
 | |
|             WorldBuilder.AddEngine(new InputEngine());
 | |
|             WorldBuilder.AddEngine(new PaddleMovementEngine());
 | |
|             WorldBuilder.AddEngine(new VelocityEngine());
 | |
|             WorldBuilder.AddEngine(new MotionEngine());
 | |
|             WorldBuilder.AddEngine(new CollisionEngine());
 | |
|             WorldBuilder.AddEngine(new BounceEngine());
 | |
|             WorldBuilder.AddEngine(new DestroyEngine());
 | |
|             WorldBuilder.AddEngine(new ScoreEngine());
 | |
|             WorldBuilder.AddEngine(new UpdatePositionEngine());
 | |
|             WorldBuilder.AddEngine(new UpdateVelocityEngine());
 | |
|             WorldBuilder.AddEngine(new ComputerControlEngine());
 | |
| 
 | |
|             WorldBuilder.AddEngine(new BallSpawner(WhitePixel));
 | |
|             WorldBuilder.AddEngine(new BoundarySpawner());
 | |
|             WorldBuilder.AddEngine(new GoalBoundarySpawner());
 | |
|             WorldBuilder.AddEngine(new PaddleSpawner(WhitePixel));
 | |
| 
 | |
|             WorldBuilder.AddOrderedRenderer(new Texture2DRenderer(SpriteBatch));
 | |
| 
 | |
|             WorldBuilder.SendMessage(
 | |
|                 new PaddleSpawnMessage(
 | |
|                     new MoonTools.Structs.Position2D(5, 5),
 | |
|                     Enums.PlayerIndex.One,
 | |
|                     PaddleControl.Player,
 | |
|                     20,
 | |
|                     80
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             WorldBuilder.SendMessage(
 | |
|                 new PaddleSpawnMessage(
 | |
|                     new MoonTools.Structs.Position2D(1255, 5),
 | |
|                     Enums.PlayerIndex.Two,
 | |
|                     PaddleControl.Computer,
 | |
|                     20,
 | |
|                     80
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             WorldBuilder.SendMessage(
 | |
|                 new BallSpawnMessage(
 | |
|                     new MoonTools.Structs.Position2D(640, 360),
 | |
|                     300,
 | |
|                     16,
 | |
|                     16
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             // top boundary
 | |
|             WorldBuilder.SendMessage(
 | |
|                 new BoundarySpawnMessage(
 | |
|                     new MoonTools.Structs.Position2D(0, -6),
 | |
|                     1280,
 | |
|                     6
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             // bottom boundary
 | |
|             WorldBuilder.SendMessage(
 | |
|                 new BoundarySpawnMessage(
 | |
|                     new MoonTools.Structs.Position2D(0, 720),
 | |
|                     1280,
 | |
|                     6
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             // right boundary
 | |
|             WorldBuilder.SendMessage(
 | |
|                 new GoalBoundarySpawnMessage(
 | |
|                     new MoonTools.Structs.Position2D(1280, 0),
 | |
|                     6,
 | |
|                     720
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             // left boundary
 | |
|             WorldBuilder.SendMessage(
 | |
|                 new GoalBoundarySpawnMessage(
 | |
|                     new MoonTools.Structs.Position2D(-6, 0),
 | |
|                     6,
 | |
|                     720
 | |
|                 )
 | |
|             );
 | |
| 
 | |
|             World = WorldBuilder.Build();
 | |
|         }
 | |
| 
 | |
|         protected override void UnloadContent()
 | |
|         {
 | |
|             base.UnloadContent();
 | |
|         }
 | |
| 
 | |
|         protected override void Update(GameTime gameTime)
 | |
|         {
 | |
|             World.Update(gameTime.ElapsedGameTime.TotalSeconds);
 | |
| 
 | |
|             base.Update(gameTime);
 | |
|         }
 | |
| 
 | |
|         protected override void Draw(GameTime gameTime)
 | |
|         {
 | |
|             GraphicsDevice.Clear(Color.Black);
 | |
| 
 | |
|             SpriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied);
 | |
|             World.Draw();
 | |
|             SpriteBatch.End();
 | |
| 
 | |
|             base.Draw(gameTime);
 | |
|         }
 | |
|     }
 | |
| }
 |