public override void updateState(Enemy[] allies, int position, ICaster[] player_arr, Update_Case flag) { if (flag == Update_Case.AFTER_INTERRUPT && !changed && PlayerDialogueInfo.main.getInfo("doppel-fr-transform") == "true") { allies[position].setStats(EnemyDatabase.main.getData(nextForm), true); allies[position].changeForm(); allies[position].resetAttack(); } }
//Updates the state of this AI module based on field data public abstract void updateState(Enemy[] allies, int position, ICaster[] player_arr, Update_Case flag);
public override void updateState(Enemy[] allies, int position, ICaster[] player_arr, Update_Case flag) { Debug.Log("updating doppel AI state: attack in prog = " + allies[position].attack_in_progress + " " + flag.ToString()); if (form <= 3) { if (flag == Update_Case.AFTER_CAST) { numAttacks++; if (numAttacks > 3) { state = AI_State.CHARGE_MAX; } else { state = AI_State.NORMAL; } } else if (flag == Update_Case.UNSTUN) { if (form == 1) { state = AI_State.NORMAL; allies[position].setStats(EnemyDatabase.main.getData("Doppelganger (YELLOW)"), true); allies[position].stagger_time = 2f; allies[position].changeForm(); allies[position].resetAttack(); } else if (form == 2) { state = AI_State.NORMAL; allies[position].setStats(EnemyDatabase.main.getData("Doppelganger (RED)"), true); allies[position].stagger_time = 2f; allies[position].changeForm(); allies[position].resetAttack(); } else if (form == 3) { state = AI_State.ATTACK_SPECIAL; allies[position].setStats(EnemyDatabase.main.getData("Doppelganger (???)"), true); allies[position].stagger_time = 2f; changeToRandomColor(allies[position]); allies[position].resetAttack(); } ++form; } } else if (form == 4) { if (flag == Update_Case.UNSTUN) { state = AI_State.NORMAL; allies[position].setStats(EnemyDatabase.main.getData("Doppelganger (GRAY)"), true); allies[position].stagger_time = 10f; allies[position].resetAttack(); allies[position].changeForm(); ++form; } else if (flag == Update_Case.AFTER_CAST) { changeToRandomColor(allies[position]); } else if (flag == Update_Case.WAS_HIT)// was hit { if (allies[position].attack_in_progress) { return; } changeToRandomColor(allies[position]); switch (color) { case "RED": allies[position].getCurrSpell().element = "agni"; break; case "BLUE": allies[position].getCurrSpell().element = "cryo"; break; case "YELLOW": allies[position].getCurrSpell().element = "veld"; break; default: throw new System.Exception("Doppleganger is invalid color"); } } } else if (form == 5) { //if(flag == Update_Case.UNSTUN) //{ // allies[position].Curr_hp = 0; //} } }
public override void updateState(Enemy[] allies, int position, ICaster[] player_arr, Update_Case flag) { baseAI.updateState(allies, position, player_arr, flag); if (!hasChanged && flag == Update_Case.WAS_HIT) { allies[position].setStats(EnemyDatabase.main.getData(nextForm), resetHealthandStagger); if (resetAttack) { allies[position].resetAttack(); } allies[position].changeForm(); hasChanged = true; } }
public override void updateState(Enemy[] allies, int position, ICaster[] player_arr, Update_Case flag) { Enemy self = allies[position]; int curr_hp = Mathf.CeilToInt(((float)self.Curr_hp / self.Stats.max_hp) * 100); if (curr_hp < criticalThresh) { state = AI_State.HEALTH_CRITICAL; } else if (curr_hp < lowThresh) { state = AI_State.HEALTH_LOW; } else { state = AI_State.NORMAL; } }
public override void updateState(Enemy[] allies, int position, ICaster[] player_arr, Update_Case flag) { return; }