private void NextCombatant() { battleStatus = EBattleStatus.ActiveTurn; if (combatant < orderList.Count - 1) { combatant++; } else { combatant = 0; battleStatus = EBattleStatus.EndTurn; } }
// Update is called once per frame void Update() { switch (BattleHasEnded()) { case EEndBattleStatus.Ongoing: switch (battleStatus) { case EBattleStatus.PreparingTurn: PrepareTurn(); break; case EBattleStatus.ActiveTurn: DoBattle(playerTeamTurn, enemyTeamTurn); break; case EBattleStatus.NpcAttacking: break; case EBattleStatus.EndTurn: PrintTurn(); print("End of Turn: " + turn); turn++; battleStatus = EBattleStatus.PreparingTurn; break; } break; case EEndBattleStatus.PlayerWon: foreach (NpcBase npc in playerTeam) { npc.stats.GainExperience(enemyTeam.Count * 5); } playerDataController.Save(); sceneLoader.LoadScene(SceneNames.MAIN_SCENE); print("Battle has ended!, the player Won, do something!"); break; case EEndBattleStatus.PlayerLost: playerDataController.Save(); sceneLoader.LoadScene(SceneNames.MAIN_SCENE); print("Battle has ended!, the player Lost, do something!"); break; default: break; } }
private void DoBattle(List <NpcBase> playerList, List <NpcBase> enemyList) { NpcBase defender; NpcBase fighter = orderList[combatant]; if (fighter.stats.GetNpcCurrentHealth() > 0) { battleStatus = EBattleStatus.NpcAttacking; if (fighter.GetPlayerTeam()) { int position = UnityEngine.Random.Range(0, enemyList.Count); defender = enemyList[position]; fighter.AttackEnemy(defender, () => { if (defender.stats.GetNpcCurrentHealth() <= 0) { enemyList.Remove(defender); } NextCombatant(); }); print(fighter.stats.npcName + " has attacked " + defender.stats.npcName); } else { int position = UnityEngine.Random.Range(0, playerList.Count); defender = playerList[position]; fighter.AttackEnemy(defender, () => { if (defender.GetNpcCurrentHealth() <= 0) { defender.GetAnimator().SetBool("isDead", true); playerList.Remove(defender); } NextCombatant(); }); print(fighter.stats.npcName + " has attacked " + defender.stats.npcName); } } else { NextCombatant(); } }
private void PrepareBattle() { orderList.AddRange(goodBois); orderList.AddRange(badBois); orderList.Sort(SetBattleOrder); //PrintOrderList(); foreach (NpcBase npc in orderList) { if (npc.GetPlayerTeam()) { playerTeam.Add(npc); } else { enemyTeam.Add(npc); } } battleStatus = EBattleStatus.PreparingTurn; }
private void PrepareTurn() { //Limpiamos lista de npcs del turno anterior playerTeamTurn.Clear(); enemyTeamTurn.Clear(); //Solo lucharan aquellos que sigan vivos dentro del equipo for (int i = 0; i < playerTeam.Count; i++) { if (playerTeam[i].stats.GetNpcCurrentHealth() > 0) { playerTeamTurn.Add(playerTeam[i]); } } for (int i = 0; i < enemyTeam.Count; i++) { if (enemyTeam[i].stats.GetNpcCurrentHealth() > 0) { enemyTeamTurn.Add(enemyTeam[i]); } } battleStatus = EBattleStatus.ActiveTurn; }