private void OnTriggerEnter(Collider otherObject) { // We're only concerned with triggers. if (!otherObject.isTrigger) { return; } if (otherObject.tag == "Combatant") { if (this.combatant is PlayerCombatant) { EnemyCombatant enemy = otherObject.GetComponent <EnemyCombatant>(); if (enemy != null) { this.combatantInRange = enemy; trigger.Invoke(); } } else if (this.combatant is EnemyCombatant) { PlayerCombatant player = otherObject.GetComponent <PlayerCombatant>(); if (player != null) { this.combatantInRange = player; trigger.Invoke(); } } } }
private void Start() { // Get the player party from the data repository. Party playerParty = DataRepository.Instance().Parties.GetByName("main"); List <GameObject> players = new List <GameObject>(); List <GameObject> enemies = new List <GameObject>(); foreach (string partyMember in playerParty.Members) { // We want to spawn a combatant for each player in the party. GameObject playerCombatant = Instantiate((GameObject)Resources.Load(string.Format("Prefabs/Battle/Characters/{0}", partyMember)), this.transform.parent); PlayerCombatant player = playerCombatant.GetComponent <PlayerCombatant>(); player.Character = DataRepository.Instance().Characters.GetByName(partyMember); players.Add(playerCombatant); } // Get the enemy party Party enemyParty = BattleTransitionContainer.EnemyParty; // If the enemy party is null, grab the test party. if (enemyParty == null) { enemyParty = (Party)DataRepository.Instance().Parties.GetByName("test1"); } foreach (string partyMember in enemyParty.Members) { // We want to spawn a combatant for each player in the party. GameObject enemyCombatant = Instantiate((GameObject)Resources.Load(string.Format("Prefabs/Battle/Characters/{0}", "Enemy")), this.transform.parent); EnemyCombatant enemy = enemyCombatant.GetComponent <EnemyCombatant>(); enemy.Enemy = (Enemy)DataRepository.Instance().Enemies.GetByName(partyMember).Clone(); enemies.Add(enemyCombatant); } UnitPlacement unitPlacement = this.GetComponentInChildren <UnitPlacement>(); unitPlacement.PlacePlayers(players); unitPlacement.PlaceEnemies(enemies); GameObject.Find("BattleManager").GetComponent <BattleManager>().StoreCombatants(players, enemies); BattleEventManager.Instance().BattleStart(); }
public override void OnGUI() { base.OnGUI(); // if the battle has started... if (battleEnabled) { // enforce 16:9 aspect ratio GUILayout.BeginArea(AspectUtility.screenRect); // draw the player combatants' data drawPlayerInfo(); if (isPlayerTurn()) { PlayerCombatant currentPlayer = (PlayerCombatant)PlayerCombatants[currentTurn]; switch (turnState) { case BattleTurnState.Attacking: selectedAttack = getSelectedAttack(); if (selectedAttack != null) { currentButtonSelection = 0; turnState = BattleTurnState.Targeting; } checkKeyControlFocus(); break; case BattleTurnState.Targeting: selectedTarget = getSelectedTarget(selectedAttack); if (selectedTarget != null) { currentButtonSelection = 0; currentPlayer.Attack(selectedAttack, selectedTarget); currentPlayer.IncrementTurnCounter(); turnState = BattleTurnState.WaitingForAnimation; } checkKeyControlFocus(); break; case BattleTurnState.WaitingForAnimation: // has the player's animation finished? if (!PlayerCombatants[currentTurn].AnimationInProgress) { turnState = BattleTurnState.TurnComplete; } break; } } else // otherwise it is an enemy's turn { EnemyCombatant currentEnemy = (EnemyCombatant)EnemyCombatants[currentTurn - PlayerCombatants.Count]; switch (turnState) { case BattleTurnState.Attacking: if (!currentEnemy.isSleeping) { currentEnemy.AutoAttack(PlayerCombatants); } currentEnemy.IncrementTurnCounter(); turnState = BattleTurnState.WaitingForAnimation; break; case BattleTurnState.WaitingForAnimation: // if the enemy attack has finished... if (Event.current.type == EventType.Repaint && !currentEnemy.AnimationInProgress) { turnState = BattleTurnState.TurnComplete; } break; } } if (turnState == BattleTurnState.TurnComplete) { // if the turn has completed, check if anyone won checkForVictory(); // reset turn state turnState = BattleTurnState.Attacking; //...and then increment the turn. incrementTurn(); // notify registered listeners of the turn change // note: this is not inside incrementTurn due to recursion if (OnBattleEvent != null) { OnBattleEvent(BattleEvent.TurnChange); } } GUILayout.EndArea(); } }