/// <summary> /// Creates a new StatisticsScreen object for the given player. /// </summary> public StatisticsScreen(Player player) : base() { this.IsPopup = true; this.player = player; screenAnimation = new AnimatingSprite(); screenAnimation.FrameDimensions = player.MapSprite.FrameDimensions; screenAnimation.FramesPerRow = player.MapSprite.FramesPerRow; screenAnimation.SourceOffset = player.MapSprite.SourceOffset; screenAnimation.Texture = player.MapSprite.Texture; screenAnimation.AddAnimation(new Animation("Idle", 43, 48, 150, true)); screenAnimation.PlayAnimation(0); }
/// <summary> /// Create a new CombatMonster object containing the given monster. /// </summary> /// <param name="monster"></param> public CombatantMonster(Monster monster) : base() { // check the parameter if (monster == null) { throw new ArgumentNullException("monster"); } // assign the parameters this.monster = monster; this.statistics += monster.CharacterStatistics; this.combatSprite = monster.CombatSprite.Clone() as AnimatingSprite; this.State = RolePlayingGameData.Character.CharacterState.Idle; this.CombatSprite.PlayAnimation("Idle"); // create the AI data this.artificialIntelligence = new ArtificialIntelligence(this); }
/// <summary> /// Handle user input. /// </summary> public override void HandleInput() { bool equClicked = false; bool backClicked = false; bool spellClicked = false; if (InputManager.IsButtonClicked(new Rectangle( (int)(backButtonPosition.X), (int)(backButtonPosition.Y), (int)(backButton.Width * ScaledVector2.DrawFactor ), (int)(backButton.Height * ScaledVector2.DrawFactor)))) { backClicked = true; } if (InputManager.IsButtonClicked(equipmentRecangle)) { equClicked = true; } if (InputManager.IsButtonClicked(spellRecangle)) { spellClicked = true; } // exit the screen if (InputManager.IsActionTriggered(InputManager.Action.Back) || backClicked) { ExitScreen(); return; } // shows the spells for this player else if (spellClicked) //InputManager.IsActionTriggered(InputManager.Action.Ok)) { ScreenManager.AddScreen(new SpellbookScreen(player, player.CharacterStatistics)); return; } // show the equipment for this player, allowing the user to unequip else if (InputManager.IsActionTriggered(InputManager.Action.TakeView) || equClicked) { ScreenManager.AddScreen(new EquipmentScreen(player)); return; } else if (Session.Party.Players.Contains(player)) // player is in the party { // move to the previous screen if (InputManager.IsActionTriggered(InputManager.Action.PageLeft)) { ExitScreen(); ScreenManager.AddScreen(new QuestLogScreen(null)); return; } // move to the next screen else if (InputManager.IsActionTriggered(InputManager.Action.PageRight)) { ExitScreen(); ScreenManager.AddScreen(new InventoryScreen(true)); return; } // move to the previous party member else if (InputManager.IsActionTriggered(InputManager.Action.TargetUp)) { playerIndex--; if (playerIndex < 0) { playerIndex = Session.Party.Players.Count - 1; } Player newPlayer = Session.Party.Players[playerIndex]; if (newPlayer != player) { player = newPlayer; screenAnimation = new AnimatingSprite(); screenAnimation.FrameDimensions = player.MapSprite.FrameDimensions; screenAnimation.FramesPerRow = player.MapSprite.FramesPerRow; screenAnimation.SourceOffset = player.MapSprite.SourceOffset; screenAnimation.Texture = player.MapSprite.Texture; screenAnimation.AddAnimation( new Animation("Idle", 43, 48, 150, true)); screenAnimation.PlayAnimation(0); } } // move to the next party member else if (InputManager.IsActionTriggered(InputManager.Action.TargetDown)) { playerIndex++; if (playerIndex >= Session.Party.Players.Count) { playerIndex = 0; } Player newPlayer = Session.Party.Players[playerIndex]; if (newPlayer != player) { player = newPlayer; screenAnimation = new AnimatingSprite(); screenAnimation.FrameDimensions = player.MapSprite.FrameDimensions; screenAnimation.FramesPerRow = player.MapSprite.FramesPerRow; screenAnimation.SourceOffset = player.MapSprite.SourceOffset; screenAnimation.Texture = player.MapSprite.Texture; screenAnimation.AddAnimation( new Animation("Idle", 43, 48, 150, true)); screenAnimation.PlayAnimation(0); } } } }
/// <summary> /// Handle user input. /// </summary> public override void HandleInput() { // exit the screen if (InputManager.IsActionTriggered(InputManager.Action.Back)) { ExitScreen(); return; } // shows the spells for this player else if (InputManager.IsActionTriggered(InputManager.Action.Ok)) { ScreenManager.AddScreen(new SpellbookScreen(player, player.CharacterStatistics)); return; } // show the equipment for this player, allowing the user to unequip else if (InputManager.IsActionTriggered(InputManager.Action.TakeView)) { ScreenManager.AddScreen(new EquipmentScreen(player)); return; } else if (Session.Party.Players.Contains(player)) // player is in the party { // move to the previous screen if (InputManager.IsActionTriggered(InputManager.Action.PageLeft)) { ExitScreen(); ScreenManager.AddScreen(new QuestLogScreen(null)); return; } // move to the next screen else if (InputManager.IsActionTriggered(InputManager.Action.PageRight)) { ExitScreen(); ScreenManager.AddScreen(new InventoryScreen(true)); return; } // move to the previous party member else if (InputManager.IsActionTriggered(InputManager.Action.CursorUp)) { playerIndex--; if (playerIndex < 0) { playerIndex = Session.Party.Players.Count - 1; } Player newPlayer = Session.Party.Players[playerIndex]; if (newPlayer != player) { player = newPlayer; screenAnimation = new AnimatingSprite(); screenAnimation.FrameDimensions = player.MapSprite.FrameDimensions; screenAnimation.FramesPerRow = player.MapSprite.FramesPerRow; screenAnimation.SourceOffset = player.MapSprite.SourceOffset; screenAnimation.Texture = player.MapSprite.Texture; screenAnimation.AddAnimation( new Animation("Idle", 43, 48, 150, true)); screenAnimation.PlayAnimation(0); } } // move to the next party member else if (InputManager.IsActionTriggered(InputManager.Action.CursorDown)) { playerIndex++; if (playerIndex >= Session.Party.Players.Count) { playerIndex = 0; } Player newPlayer = Session.Party.Players[playerIndex]; if (newPlayer != player) { player = newPlayer; screenAnimation = new AnimatingSprite(); screenAnimation.FrameDimensions = player.MapSprite.FrameDimensions; screenAnimation.FramesPerRow = player.MapSprite.FramesPerRow; screenAnimation.SourceOffset = player.MapSprite.SourceOffset; screenAnimation.Texture = player.MapSprite.Texture; screenAnimation.AddAnimation( new Animation("Idle", 43, 48, 150, true)); screenAnimation.PlayAnimation(0); } } } }
/// <summary> /// Handle user input. /// </summary> public override void HandleInput() { bool equClicked = false; bool backClicked = false; bool spellClicked = false; if (InputManager.IsButtonClicked(new Rectangle( (int)(backButtonPosition.X), (int)(backButtonPosition.Y), (int)(backButton.Width * ScaledVector2.DrawFactor), (int)(backButton.Height * ScaledVector2.DrawFactor)))) { backClicked = true; } if (InputManager.IsButtonClicked(equipmentRecangle)) { equClicked = true; } if (InputManager.IsButtonClicked(spellRecangle)) { spellClicked = true; } // exit the screen if (InputManager.IsActionTriggered(InputManager.Action.Back) || backClicked) { ExitScreen(); return; } // shows the spells for this player else if (spellClicked) //InputManager.IsActionTriggered(InputManager.Action.Ok)) { ScreenManager.AddScreen(new SpellbookScreen(player, player.CharacterStatistics)); return; } // show the equipment for this player, allowing the user to unequip else if (InputManager.IsActionTriggered(InputManager.Action.TakeView) || equClicked) { ScreenManager.AddScreen(new EquipmentScreen(player)); return; } else if (Session.Party.Players.Contains(player)) // player is in the party { // move to the previous screen if (InputManager.IsActionTriggered(InputManager.Action.PageLeft)) { ExitScreen(); ScreenManager.AddScreen(new QuestLogScreen(null)); return; } // move to the next screen else if (InputManager.IsActionTriggered(InputManager.Action.PageRight)) { ExitScreen(); ScreenManager.AddScreen(new InventoryScreen(true)); return; } // move to the previous party member else if (InputManager.IsActionTriggered(InputManager.Action.TargetUp)) { playerIndex--; if (playerIndex < 0) { playerIndex = Session.Party.Players.Count - 1; } Player newPlayer = Session.Party.Players[playerIndex]; if (newPlayer != player) { player = newPlayer; screenAnimation = new AnimatingSprite(); screenAnimation.FrameDimensions = player.MapSprite.FrameDimensions; screenAnimation.FramesPerRow = player.MapSprite.FramesPerRow; screenAnimation.SourceOffset = player.MapSprite.SourceOffset; screenAnimation.Texture = player.MapSprite.Texture; screenAnimation.AddAnimation( new Animation("Idle", 43, 48, 150, true)); screenAnimation.PlayAnimation(0); } } // move to the next party member else if (InputManager.IsActionTriggered(InputManager.Action.TargetDown)) { playerIndex++; if (playerIndex >= Session.Party.Players.Count) { playerIndex = 0; } Player newPlayer = Session.Party.Players[playerIndex]; if (newPlayer != player) { player = newPlayer; screenAnimation = new AnimatingSprite(); screenAnimation.FrameDimensions = player.MapSprite.FrameDimensions; screenAnimation.FramesPerRow = player.MapSprite.FramesPerRow; screenAnimation.SourceOffset = player.MapSprite.SourceOffset; screenAnimation.Texture = player.MapSprite.Texture; screenAnimation.AddAnimation( new Animation("Idle", 43, 48, 150, true)); screenAnimation.PlayAnimation(0); } } } }
/// <summary> /// Constructor with provided name and stats /// </summary> /// <param name="name">Name of the player</param> /// <param name="stats">Stats of the player</param> /// <param name="playerID">ID used in the party position</param> /// <param name="sprite">Textures used to represent the player</param> /// <param name="specialID">Special ID for specific players to determine skills and animations</param> public PlayerClass(string name, CharacterStats stats, AnimatingSprite sprite, int specialID) : base(name, stats, sprite) { this.specialID = specialID; }
/// <summary> /// Constructor with provided name, stats, ID, and sprite /// </summary> /// <param name="name">Name of the player</param> /// <param name="stats">Stats of the player</param> /// <param name="playerID">ID used in the party position</param> public EnemyClass(string name, CharacterStats stats, AnimatingSprite sprite) : base(name, stats, sprite) { }
/// <summary> /// Constructor that loads the specific name, character stats, and ID in party /// </summary> /// <param name="nameArg">Name of the character</param> /// <param name="stats">Starting stats for the character</param> /// <param name="playerID">ID used for position in party</param> /// <param name="sprite">Textures that represent the character</param> public CombatCharacter(string nameArg, CharacterStats stats, AnimatingSprite sprite) : base(nameArg, sprite) { this.stats = stats; }
/// <summary> /// Load graphics content for the screen (in this case, the battle engine and all necessary classes). /// </summary> public override void LoadContent() { // Create the menu screen menuScreen = new BattleMenuScreen(new Vector2(10, 515)); menuScreen.ScreenManager = this.ScreenManager; // Load the textures if (content == null) content = new ContentManager(ScreenManager.Game.Services, "Content"); battleDialog = content.Load<Texture2D>("battledialog"); battleMenu = content.Load<Texture2D>("battlemenuback"); battleTimer = content.Load<Texture2D>("battletime"); redBox = content.Load<Texture2D>("redbox"); blueBox = content.Load<Texture2D>("bluebox"); // Load the character sprites AnimatingSprite playerSprite = new AnimatingSprite(redBox); AnimatingSprite enemySprite = new AnimatingSprite(blueBox); // DEBUG: Create a dummy party List<CombatCharacter> testList = new List<CombatCharacter>(ChronoConstants.cMaxPartyMembers); CharacterStats testStat = new CharacterStats(1, 10, 10, 10, 10, 10, 10, 10); testStat.Speed = 50; PlayerClass testPlayer = new PlayerClass("Dummy", testStat, playerSprite, 0); testStat.Speed = 25; PlayerClass testPlayer2 = new PlayerClass("Dummy2", testStat, playerSprite, 0); testPlayer.HP = 25; testPlayer2.HP = 25; testList.Add(testPlayer); testList.Add(testPlayer2); PartyClass testParty = new PartyClass(testList); EnemyClass testEnemy = new EnemyClass("Enemy1", testStat, enemySprite); EnemyClass testEnemy2 = new EnemyClass("Enemy2", testStat, enemySprite); List<CombatCharacter> enemyList = new List<CombatCharacter>(ChronoConstants.cMaxPartyMembers); enemyList.Add(testEnemy); enemyList.Add(testEnemy2); PartyClass enemyParty = new PartyClass(enemyList); testParty.InBattle = true; enemyParty.InBattle = true; // Link events from the battle engine testParty.Ready += ReadyHandler; //enemyPlayer.Ready += EnemyReadyHandler; menuScreen.AttackSelected += AttackHandler; BattleEngine.Defeat += DefeatHandler; BattleEngine.Victory += VictoryHandler; // Initialize the engine BattleEngine.StartNewBattle(testParty, enemyParty); // Create the battle director battleDirector = new BattleDirector(ScreenManager.Arrow); }