PageRenderTime 82ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Development/EyesOfTheDragon/EyesOfTheDragon/GameScreens/CharacterGeneratorScreen.cs

#
C# | 348 lines | 254 code | 90 blank | 4 comment | 12 complexity | 860651fd719d4af6f9b832e85b6576ee MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Microsoft.Xna.Framework;
  6. using Microsoft.Xna.Framework.Graphics;
  7. using Microsoft.Xna.Framework.Input;
  8. using XRpgLibrary;
  9. using XRpgLibrary.Controls;
  10. using XRpgLibrary.SpriteClasses;
  11. using XRpgLibrary.TileEngine;
  12. using XRpgLibrary.WorldClasses;
  13. using XRpgLibrary.ItemClasses;
  14. using XRpgLibrary.CharacterClasses;
  15. using RpgLibrary.ItemClasses;
  16. using RpgLibrary.CharacterClasses;
  17. using RpgLibrary.SkillClasses;
  18. using EyesOfTheDragon.Components;
  19. using RpgLibrary.WorldClasses;
  20. using XRpgLibrary.EventClasses;
  21. using XRpgLibrary.SessionClasses;
  22. namespace EyesOfTheDragon.GameScreens
  23. {
  24. public class CharacterGeneratorScreen : BaseGameState
  25. {
  26. #region Fields
  27. LeftRightSelector genderSelector;
  28. LeftRightSelector classSelector;
  29. PictureBox backgroundImage;
  30. PictureBox characterImage;
  31. Texture2D[,] characterImages;
  32. Texture2D containers;
  33. string[] genderItems = { "Male", "Female" };
  34. string[] classItems;
  35. Texture2D grid;
  36. #endregion
  37. #region Properties
  38. public string SelectedGender
  39. {
  40. get { return genderSelector.SelectedItem; }
  41. }
  42. public string SelectedClass
  43. {
  44. get { return classSelector.SelectedItem; }
  45. }
  46. #endregion
  47. #region Costructors
  48. public CharacterGeneratorScreen( Game game, GameStateManager stateManager )
  49. : base( game, stateManager )
  50. {
  51. }
  52. #endregion
  53. #region XNA Methods
  54. public override void Initialize()
  55. {
  56. base.Initialize();
  57. }
  58. protected override void LoadContent()
  59. {
  60. base.LoadContent();
  61. classItems = new string[DataManager.EntityData.Count];
  62. int counter = 0;
  63. foreach ( string className in DataManager.EntityData.Keys )
  64. {
  65. classItems[counter] = className;
  66. counter++;
  67. }
  68. LoadImages();
  69. CreateControls();
  70. containers = Game.Content.Load<Texture2D>( @"ObjectSprites\containers" );
  71. }
  72. public override void Update( GameTime gameTime )
  73. {
  74. ControlManager.Update( gameTime, PlayerIndex.One );
  75. base.Update( gameTime );
  76. }
  77. public override void Draw( GameTime gameTime )
  78. {
  79. GameRef.SpriteBatch.Begin();
  80. base.Draw( gameTime );
  81. ControlManager.Draw( GameRef.SpriteBatch );
  82. GameRef.SpriteBatch.End();
  83. }
  84. #endregion
  85. #region Methods
  86. private void CreateControls()
  87. {
  88. Texture2D leftTexture = Game.Content.Load<Texture2D>( @"GUI\leftarrowUp" );
  89. Texture2D rightTexture = Game.Content.Load<Texture2D>( @"GUI\rightarrowUp" );
  90. Texture2D stopTexture = Game.Content.Load<Texture2D>( @"GUI\StopBar" );
  91. backgroundImage = new PictureBox(
  92. Game.Content.Load<Texture2D>( @"Backgrounds\titlescreen" ),
  93. GameRef.ScreenRectangle );
  94. ControlManager.Add( backgroundImage );
  95. Label label1 = new Label();
  96. label1.Text = "Who will search for the Eyes of the Dragon?";
  97. label1.Size = label1.SpriteFont.MeasureString( label1.Text );
  98. label1.Position = new Vector2( ( GameRef.Window.ClientBounds.Width - label1.Size.X ) / 2, 150 );
  99. ControlManager.Add( label1 );
  100. genderSelector = new LeftRightSelector( leftTexture, rightTexture, stopTexture );
  101. genderSelector.SetItems( genderItems, 125 );
  102. genderSelector.Position = new Vector2( label1.Position.X, 200 );
  103. genderSelector.SelectionChanged += new EventHandler( selectionChanged );
  104. ControlManager.Add( genderSelector );
  105. classSelector = new LeftRightSelector( leftTexture, rightTexture, stopTexture );
  106. classSelector.SetItems( classItems, 125 );
  107. classSelector.Position = new Vector2( label1.Position.X, 250 );
  108. classSelector.SelectionChanged += selectionChanged;
  109. ControlManager.Add( classSelector );
  110. LinkLabel linkLabel1 = new LinkLabel();
  111. linkLabel1.Text = "Accept this character.";
  112. linkLabel1.Position = new Vector2( label1.Position.X, 300 );
  113. linkLabel1.Selected += new EventHandler( linkLabel1_Selected );
  114. ControlManager.Add( linkLabel1 );
  115. characterImage = new PictureBox(
  116. characterImages[0, 0],
  117. new Rectangle( 500, 200, 96, 96 ),
  118. new Rectangle( 0, 0, 32, 32 ) );
  119. ControlManager.Add( characterImage );
  120. ControlManager.NextControl();
  121. }
  122. private void LoadImages()
  123. {
  124. characterImages = new Texture2D[genderItems.Length, classItems.Length];
  125. for ( int i = 0; i < genderItems.Length; i++ )
  126. {
  127. for ( int j = 0; j < classItems.Length; j++ )
  128. {
  129. characterImages[i, j] = Game.Content.Load<Texture2D>(
  130. string.Format( @"PlayerSprites\{0}{1}", genderItems[i], classItems[j] ) );
  131. }
  132. }
  133. }
  134. void selectionChanged( object sender, EventArgs e )
  135. {
  136. characterImage.Image = characterImages[genderSelector.SelectedIndex, classSelector.SelectedIndex];
  137. }
  138. void linkLabel1_Selected( object sender, EventArgs e )
  139. {
  140. InputHandler.Flush();
  141. Session.StartNewSession( StateManager, GameRef.GamePlayScreen );
  142. CreatePlayer();
  143. CreateWorld();
  144. //GameRef.SkillScreen.SkillPoints = 10;
  145. Transition( ChangeType.Change, GameRef.GamePlayScreen );
  146. //GameRef.SkillScreen.SetTarget( GamePlayScreen.Player.Character );
  147. }
  148. private void CreatePlayer()
  149. {
  150. Session.StartNewSession( StateManager, GameRef.GamePlayScreen );
  151. }
  152. private void CreateWorld()
  153. {
  154. World.CreateWorld( GameRef, GameRef.ScreenRectangle );
  155. #region Load Levels
  156. List<Level> levels = new List<Level>();
  157. foreach ( string s in DataManager.LevelData.Keys )
  158. {
  159. LevelData lData = DataManager.LevelData[s];
  160. #region Load Map Data
  161. MapData mData = DataManager.MapData[lData.MapName];
  162. List<Tileset> tilesets = new List<Tileset>();
  163. foreach ( TilesetData td in mData.Tilesets )
  164. {
  165. tilesets.Add( new Tileset(
  166. Game.Content.Load<Texture2D>( @"Tilesets\" + td.TilesetName ),
  167. td.TilesWide,
  168. td.TilesHigh,
  169. td.TileWidthInPixels,
  170. td.TileHeightInPixels ) );
  171. }
  172. List<MapLayer> groundLayers = new List<MapLayer>();
  173. foreach ( MapLayerData mld in mData.GroundLayers )
  174. {
  175. MapLayer layer = new MapLayer( mld.Width, mld.Height );
  176. for ( int y = 0; y < mld.Height; y++ )
  177. {
  178. for ( int x = 0; x < mld.Width; x++ )
  179. {
  180. RpgLibrary.WorldClasses.Tile t = mld.GetTile( x, y );
  181. layer.SetTile( x, y, t.TileIndex, t.TileSetIndex );
  182. }
  183. }
  184. groundLayers.Add( layer );
  185. }
  186. List<MapLayer> skyLayers = new List<MapLayer>();
  187. foreach ( MapLayerData mld in mData.SkyLayers )
  188. {
  189. MapLayer layer = new MapLayer( mld.Width, mld.Height );
  190. for ( int y = 0; y < mld.Height; y++ )
  191. {
  192. for ( int x = 0; x < mld.Width; x++ )
  193. {
  194. RpgLibrary.WorldClasses.Tile t = mld.GetTile( x, y );
  195. layer.SetTile( x, y, t.TileIndex, t.TileSetIndex );
  196. }
  197. }
  198. skyLayers.Add( layer );
  199. }
  200. List<Event> events = new List<Event>();
  201. foreach ( EventData eData in mData.Events )
  202. {
  203. if ( eData is PortalData )
  204. {
  205. events.Add( Portal.FromPortalData( (PortalData) eData ) );
  206. }
  207. else if ( eData is FixedCombatData )
  208. {
  209. events.Add( FixedCombat.FromFixedCombatData( (FixedCombatData) eData ) );
  210. }
  211. }
  212. TileMap map = new TileMap( tilesets[0], groundLayers[0], events );
  213. for ( int i = 1; i < tilesets.Count; i++ )
  214. {
  215. map.AddTileset( tilesets[i] );
  216. }
  217. for ( int i = 1; i < groundLayers.Count; i++ )
  218. {
  219. map.AddGroundLayer( groundLayers[i] );
  220. }
  221. for ( int i = 0; i < skyLayers.Count; i++ )
  222. {
  223. map.AddSkyLayer( skyLayers[i] );
  224. }
  225. #endregion
  226. #region Load Level Data
  227. Level l = new Level( map, lData.LevelName );
  228. //*** Hardcode level background
  229. l.CombatBackground = GameRef.Content.Load<Texture2D>( @"Backgrounds\field" );
  230. #region Load NPCs
  231. foreach ( string cName in lData.CharacterNames )
  232. {
  233. NPCData nData = DataManager.NPCData[cName];
  234. NonPlayerCharacter npc = NonPlayerCharacter.FromNPCData(
  235. nData,
  236. GameRef.ContentLoader.GetNPCTexture( NonPlayerCharacter.GetSpriteTextureName( nData ) ) );
  237. npc.Sprite.IsAnimating = true;
  238. l.Characters.Add( npc );
  239. }
  240. #endregion
  241. #region Load Chests
  242. #endregion
  243. #endregion
  244. levels.Add( l );
  245. }
  246. #endregion
  247. #region Load World
  248. foreach ( Level l in levels )
  249. {
  250. World.Levels.Add( l );
  251. }
  252. World.ChangeMap( Portal.FromPortalData( new PortalData( "GameStart", "", 0, 0, "Level1", 0, 0 ) ) );
  253. //World.CurrentLevel = 0;
  254. #endregion
  255. }
  256. #endregion
  257. }
  258. }