Guest User

Game1.cs

a guest
Jan 14th, 2016
232
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using Microsoft.Xna.Framework;
  2. using Microsoft.Xna.Framework.Graphics;
  3. using Microsoft.Xna.Framework.Input;
  4. using RogueSharp;
  5. using RogueSharp.Random;
  6. using RogueSharp.DiceNotation;
  7. using System.Diagnostics;
  8. using System.Collections.Generic;
  9.  
  10. namespace Dungeon
  11. {
  12.     public class Game1 : Game
  13.     {
  14.         GraphicsDeviceManager graphics;
  15.         SpriteBatch spriteBatch;
  16.  
  17.         private Texture2D _floor;
  18.         private Texture2D _wall;
  19.         private IMap _map;
  20.         private Player _player;
  21.         private InputState _inputState;
  22.         private List<AggressiveEnemy> _aggressiveEnemies = new List<AggressiveEnemy>();
  23.  
  24.  
  25.         public Game1()
  26.         {
  27.             graphics = new GraphicsDeviceManager(this);
  28.             Content.RootDirectory = "Content";
  29.         }
  30.  
  31.         protected override void Initialize()
  32.         {
  33.             //Change resolution
  34.             graphics.PreferredBackBufferWidth = 1024;
  35.             graphics.PreferredBackBufferHeight = 768;
  36.             graphics.ApplyChanges();
  37.  
  38.             //Setup camera
  39.             Global.Camera.ViewportWidth = graphics.GraphicsDevice.Viewport.Width;
  40.             Global.Camera.ViewportHeight = graphics.GraphicsDevice.Viewport.Height;
  41.  
  42.             //Create map
  43.             IMapCreationStrategy<Map> mapCreationStrategy = new RandomRoomsMapCreationStrategy<Map>(Global.MapWidth, Global.MapHeight, 100, 7, 3);
  44.             _map = Map.Create( mapCreationStrategy );
  45.  
  46.             //Setup input
  47.             _inputState = new InputState();
  48.  
  49.             base.Initialize();
  50.         }
  51.  
  52.         protected override void LoadContent()
  53.         {
  54.             // Create a new SpriteBatch, which can be used to draw textures.
  55.             spriteBatch = new SpriteBatch(GraphicsDevice);
  56.  
  57.             _floor = Content.Load<Texture2D>( "floor" );
  58.             _wall = Content.Load<Texture2D>( "wall" );
  59.  
  60.             //Load player
  61.             Cell startingCell = GetRandomEmptyCell();
  62.             _player = new Player
  63.             {
  64.                 X = startingCell.X,
  65.                 Y = startingCell.Y,
  66.                 Sprite = Content.Load<Texture2D>("player"),
  67.                 ArmorClass = 15,
  68.                 AttackBonus = 1,
  69.                 Damage = Dice.Parse("2d4"),
  70.                 Health = 50,
  71.                 Name = "Mr. Rogue"
  72.             };
  73.             //Center camera on player
  74.             Global.Camera.CenterOn(startingCell);
  75.  
  76.             //Load aggressibe enemies
  77.             AddAggressiveEnemies(10);
  78.             Global.CombatManager = new CombatManager(_player, _aggressiveEnemies);
  79.  
  80.             //Update fov
  81.             UpdatePlayerFieldOfView();
  82.  
  83.             //Set gamestate
  84.             Global.GameState = GameStates.PlayerTurn;
  85.         }
  86.  
  87.         protected override void UnloadContent()
  88.         {
  89.             // TODO: Unload any non ContentManager content here
  90.         }
  91.  
  92.  
  93.         protected override void Update(GameTime gameTime)
  94.         {
  95.             if (_inputState.IsExitGame(PlayerIndex.One)) //Esc pressed -> exit
  96.             {
  97.                 Exit();
  98.             }
  99.             else if (_inputState.IsSpace(PlayerIndex.One)) //Space pressed -> debug mode & stop game
  100.             {
  101.                 if (Global.GameState == GameStates.PlayerTurn)
  102.                 {
  103.                     Global.GameState = GameStates.Debugging;
  104.                 }
  105.                 else if (Global.GameState == GameStates.Debugging)
  106.                 {
  107.                     Global.GameState = GameStates.PlayerTurn;
  108.                 }
  109.             }
  110.             else
  111.             {
  112.                 if (Global.GameState == GameStates.PlayerTurn && _player.HandleInput(_inputState, _map)) //handle player input
  113.                 {
  114.                     UpdatePlayerFieldOfView();
  115.                     Global.Camera.CenterOn(_map.GetCell(_player.X, _player.Y)); //Center camera on play if moves
  116.                     Global.GameState = GameStates.EnemyTurn; //Swtich to enemy turn
  117.                 }
  118.                 if (Global.GameState == GameStates.EnemyTurn) //enemy turn
  119.                 {
  120.                     foreach (var enemy in _aggressiveEnemies)
  121.                     {
  122.                         enemy.Update();
  123.                     }
  124.                     Global.GameState = GameStates.PlayerTurn; //switch to player turn
  125.                 }
  126.             }
  127.  
  128.             //Camera input
  129.             Global.Camera.HandleInput(_inputState, PlayerIndex.One);
  130.  
  131.             //Update input
  132.             _inputState.Update();
  133.  
  134.             ////////////////////////DEBUG///////////////////////////
  135.            
  136.  
  137.             base.Update(gameTime);
  138.         }
  139.  
  140.  
  141.         protected override void Draw(GameTime gameTime)
  142.         {
  143.             spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, Global.Camera.TranslationMatrix);
  144.  
  145.             foreach (Cell cell in _map.GetAllCells())
  146.             {
  147.                 var position = new Vector2(cell.X * Global.SpriteWidth, cell.Y * Global.SpriteHeight);
  148.                 //not explored and not in debuggin than don't don anything
  149.                 if (!cell.IsExplored && Global.GameState != GameStates.Debugging)
  150.                 {
  151.                     continue;
  152.                 }
  153.                 Color tint = Color.White;
  154.                 if (!cell.IsInFov && Global.GameState != GameStates.Debugging)
  155.                 {
  156.                     tint = Color.Gray;
  157.                 }
  158.                 if (cell.IsWalkable)
  159.                 {
  160.                     spriteBatch.Draw(_floor, position, null, null, null, 0.0f, Vector2.One, tint, SpriteEffects.None, LayerDepth.Cells);
  161.                 }
  162.                 else
  163.                 {
  164.                     spriteBatch.Draw(_wall, position, null, null, null, 0.0f, Vector2.One, tint, SpriteEffects.None, LayerDepth.Cells);
  165.                 }
  166.             }
  167.  
  168.             _player.Draw(spriteBatch);
  169.  
  170.             foreach (var enemy in _aggressiveEnemies)
  171.             {
  172.                 if (Global.GameState == GameStates.Debugging || _map.IsInFov(enemy.X, enemy.Y))
  173.                 {
  174.                     enemy.Draw(spriteBatch);
  175.                 }
  176.             }
  177.  
  178.             spriteBatch.End();
  179.  
  180.             base.Draw(gameTime);
  181.         }
  182.  
  183.         private Cell GetRandomEmptyCell()
  184.         {
  185.             while (true)
  186.             {
  187.                 int x = Global.Random.Next(49);
  188.                 int y = Global.Random.Next(29);
  189.                 if (_map.IsWalkable(x, y))
  190.                 {
  191.                     return _map.GetCell(x, y);
  192.                 }
  193.             }
  194.         }
  195.  
  196.         private void UpdatePlayerFieldOfView()
  197.         {
  198.             _map.ComputeFov(_player.X, _player.Y, 10, true);
  199.             foreach (Cell cell in _map.GetAllCells())
  200.             {
  201.                 if (_map.IsInFov(cell.X, cell.Y))
  202.                 {
  203.                     _map.SetCellProperties(cell.X, cell.Y, cell.IsTransparent, cell.IsWalkable, true);
  204.                 }
  205.             }
  206.         }
  207.  
  208.         private void AddAggressiveEnemies(int numberOfEnemies)
  209.         {
  210.             for (int i = 0; i < numberOfEnemies; i++)
  211.             {
  212.                 Cell enemyCell = GetRandomEmptyCell();
  213.                 var pathFromAggressiveEnemy = new PathToPlayer(_player, _map, Content.Load<Texture2D>("White"));
  214.                 pathFromAggressiveEnemy.CreateFrom(enemyCell.X, enemyCell.Y);
  215.  
  216.                 var enemy = new AggressiveEnemy(_map, pathFromAggressiveEnemy)
  217.                 {
  218.                     X = enemyCell.X,
  219.                     Y = enemyCell.Y,
  220.                     Sprite = Content.Load<Texture2D>("hound"),
  221.                     ArmorClass = 10,
  222.                     AttackBonus = 0,
  223.                     Damage = Dice.Parse("d3"),
  224.                     Health = 10,
  225.                     Name = "Hunting Hound"
  226.                 };
  227.                 _aggressiveEnemies.Add(enemy);
  228.             }
  229.         }
  230.     }
  231. }
RAW Paste Data