Exemplo n.º 1
0
 private void FightCycle(Warrior w1, Warrior w2)
 {
     w1.AttackEnemy(w2);
     Draw();
     WriteMessage(w1.Message);
     WriteMessage(w2.Message);
 }
Exemplo n.º 2
0
    //Engage a specific squad: each unit in this squad will attack a specific unit in "enemy squad"
    public void EngageSquad()
    {
        for (int i = 0; i < warriors.Length; i++)
        {
            if (warriors[i] != null)
            {
                Warrior guerriero = warriors[i].GetComponent <Warrior>();

                //if guerriero does not have a target to attack
                if (guerriero.attacktarget == null && guerriero.has_already_target == false)
                {
                    //randomic choice of a target inside enemysquad.warriors
                    int random = UnityEngine.Random.Range(0, enemy_squad.GetComponent <EnemyFormationManager>().warriors.Length);
                    if (deadenemies.Count == enemy_squad.GetComponent <EnemyFormationManager>().warriors.Length)
                    {
                        //all warriors in enemy squad are dead
                        Debug.Log(guerriero.transform + "Everyone is dead!");
                        guerriero.is_attacking  = false;
                        guerriero.is_on_contact = false;
                        guerriero.is_fighting   = false;
                    }
                    else
                    {
                        //otherwise it chooses a target
                        if (!deadenemies.Contains(random) && enemy_squad.GetComponent <EnemyFormationManager>().warriors[random] != null)
                        {
                            guerriero.has_already_target = true;
                            guerriero.attacktarget       = enemy_squad.GetComponent <EnemyFormationManager>().warriors[random];
                            //deadenemies.Add(random);
                        }
                        else
                        {
                            //if the enemy choosen is already dead then it must choose another one.
                            guerriero.attacktarget       = null;
                            guerriero.has_already_target = false;
                        }
                    }
                }
                else
                {
                    //guerriero has already a target to attack
                    if (guerriero.attacktarget != null)
                    {
                        //se ha gia un target si muove e lo attacca
                        if ((guerriero.transform.position - guerriero.attacktarget.transform.position).magnitude < 1.5)
                        {
                            guerriero.shouldMove = false;
                            //è a contatto con il nemico
                            if (guerriero.attacktarget.GetComponent <Warrior>().life > 0 && guerriero.is_on_contact == false)
                            {
                                //entra una volta qui.
                                guerriero.is_on_contact = true;
                                guerriero.is_fighting   = true;
                                StartCoroutine(guerriero.AttackEnemy());
                            }
                        }
                        else
                        {
                            //è uscito dal contact, deve inseguire.
                            guerriero.is_on_contact = false;
                            guerriero.is_fighting   = false;
                            guerriero.shouldMove    = true;
                            guerriero.moveTo(guerriero.attacktarget.transform.position);
                        }
                    }
                    else
                    {
                        //vuol dire che è morto
                        guerriero.attacktarget       = null;
                        guerriero.has_already_target = false;
                    }
                }
            } //end if guerriero!=null
        }     // end for
    }         //end Engage Squad
Exemplo n.º 3
0
    //ENGAGES in combat with a target squad
    public void EngageSquad()
    {
        for (int i = 0; i < warriors.Length; i++)
        {
            if (warriors[i] != null)
            {
                Warrior guerriero = warriors[i].GetComponent <Warrior>();

                //if guerriero does not have a target to attack
                if (guerriero.attacktarget == null && guerriero.has_already_target == false)
                {
                    //randomic choice of a target inside enemysquad.warriors
                    int random = UnityEngine.Random.Range(0, enemy_squad.GetComponent <PlayerFormationManager>().warriors.Length);
                    if (deadenemies.Count == enemy_squad.GetComponent <PlayerFormationManager>().warriors.Length)
                    {
                        //all warriors in enemy squad are dead
                        Debug.Log(guerriero.transform + "Everyone is dead!");
                        guerriero.is_attacking  = false;
                        guerriero.is_on_contact = false;
                        guerriero.is_fighting   = false;
                    }
                    else
                    {
                        //otherwise it chooses a target
                        if (!deadenemies.Contains(random) && enemy_squad.GetComponent <PlayerFormationManager>().warriors[random] != null)
                        {
                            guerriero.has_already_target = true;
                            guerriero.attacktarget       = enemy_squad.GetComponent <PlayerFormationManager>().warriors[random];
                            //deadenemies.Add(random);
                        }
                        else
                        {
                            //if the enemy choosen is already dead then it must choose another one.
                            guerriero.attacktarget       = null;
                            guerriero.has_already_target = false;
                        }
                    }
                }
                else
                {
                    //guerriero has already a target to attack
                    if (guerriero.attacktarget != null)
                    {
                        //moves to it and attacks
                        if ((guerriero.transform.position - guerriero.attacktarget.transform.position).magnitude < 1.5)
                        {
                            guerriero.shouldMove = false;
                            //on contact with enemy
                            if (guerriero.attacktarget.GetComponent <Warrior>().life > 0 && guerriero.is_on_contact == false)
                            {
                                //enter once here
                                guerriero.is_on_contact = true;
                                guerriero.is_fighting   = true;
                                StartCoroutine(guerriero.AttackEnemy());
                            }
                        }
                        else
                        {
                            //not on contact anymore, must chase
                            guerriero.is_on_contact = false;
                            guerriero.is_fighting   = false;
                            guerriero.shouldMove    = true;
                            guerriero.moveTo(guerriero.attacktarget.transform.position);
                        }
                    }
                    else
                    {
                        //target is dead
                        guerriero.attacktarget       = null;
                        guerriero.has_already_target = false;
                    }
                }
            } //end if guerriero!=null
        }     // end for
    }