/// <summary> /// Constructor to load the director and initialize all values. /// </summary> /// <param name="engine">Battle engine for up-to-date information about the battle</param> /// <param name="arrowTexture">Texture for the arrow</param> public BattleDirector(Texture2D arrowTexture) { arrow = arrowTexture; // Initialize the position vectors for (int i = 0; i < BattleEngine.PartyCount; i++) { BattleEngine.PlayerPartyList[i].Position = new Vector2(cPlayerPositions[i, 0], cPlayerPositions[i, 1]); } for (int i = 0; i < BattleEngine.EnemyCount; i++) { BattleEngine.EnemyPartyList[i].Position = new Vector2(cEnemyPositions[i, 0], cEnemyPositions[i, 1]); } // Load the list of battle texts battleTextList = new List<BattleText>(ChronoConstants.cMaxPartyMembers); for (int i = 0; i < ChronoConstants.cMaxPartyMembers; i++) { BattleText tmpBattleText = new BattleText(); battleTextList.Add(tmpBattleText); } // Initialize handling what to do when an action is done ActionDone += ActionDoneHandler; }
/// <summary> /// Creates a script for commands that only involve one player and one enemy. /// </summary> /// <param name="action">String that designates the action type</param> /// <param name="attacker">Character that is attacking</param> /// <param name="defender">Character that is defending</param> /// <param name="startPos">Starting position of attacker</param> /// <param name="endPos">Position of the defender</param> /// <param name="battleText">Text for damage numbers</param> /// <returns>A full action script that animates this action in battle</returns> public ActionScript createActionScript(string action, CharacterBase attacker, CharacterBase defender, int damage, BattleText battleText) { Queue<ActionSlot> script = new Queue<ActionSlot>(); Vector2 startPos = attacker.Position; Vector2 endPos = defender.Position - cOffset; // DEBUG: For now, just return the actions for a regular attack script.Enqueue(new ActionSlot(ActionCommand.MoveTo, attacker, endPos, 20)); script.Enqueue(new ActionSlot(ActionCommand.Begin)); script.Enqueue(new ActionSlot(ActionCommand.ShowAttack, attacker)); script.Enqueue(new ActionSlot(ActionCommand.ShowText, battleText)); script.Enqueue(new ActionSlot(ActionCommand.End)); script.Enqueue(new ActionSlot(ActionCommand.TakeDamage, defender, damage)); script.Enqueue(new ActionSlot(ActionCommand.MoveTo, attacker, startPos, 20)); return new ActionScript(script); }