示例#1
0
    public void DealDamage()
    {
        bool success = true;

        foreach (PlayerBehaviour player in targets)
        {
            if (player.Name == "Guerreiro" && player.State == PlayerBehaviour.STATE.SPECIAL)
            {
                WarriorBehaviour warrior = (WarriorBehaviour)player;
                warrior.FinishSpecial();
                // Stunning ogres is currently disabled
                //owner.State = EnemyBehaviour.STATE.FROZEN;
                success = false;
                break;
            }
        }
        if (success)
        {
            foreach (PlayerBehaviour player in targets)
            {
                player.TakeDamage(owner.AttackValue);
            }
        }
        owner.AttackObject = null;
        GameObject.Destroy(gameObject);
    }
示例#2
0
    // Checa se, nesse turno, algum player foi atacado
    public void CheckCollisions()
    {
        List <PlayerBehaviour> playersColliding = new List <PlayerBehaviour>();
        int i;

        // Verifica quais os players que estão colidindo
        foreach (GameObject player in players)
        {
            PlayerBehaviour playerBehaviour = player.GetComponent <PlayerBehaviour> ();
            if (playerBehaviour.IsColliding)
            {
                playersColliding.Add(playerBehaviour);
                print("Colision checked");
            }
        }

        if (playersColliding.Count > 0)
        {
            // Ordena pelo menor y
            playersColliding.Sort(delegate(PlayerBehaviour x, PlayerBehaviour y) {
                return((x.transform.position.y).CompareTo(y.transform.position.y));
            });


            // Verifica se há um warrior no meio do caminho usando special
            foreach (PlayerBehaviour player in playersColliding)
            {
                if (player is WarriorBehaviour && player.State == PlayerBehaviour.STATE.SPECIAL)
                {
                    WarriorBehaviour warrior = (WarriorBehaviour)player;
                    warrior.ShieldAnim();
                    FreezeOgre(player.Collider);
                    break;
                }
                // Se não é um warrior usando special, recebe dano
                print("Colide");
                SetLifePlayer(player.Collider, player);
                player.IsColliding = false;
            }
        }

        // Destrói todos os objetos de ataque

        foreach (GameObject enemy in enemies)
        {
            EnemyBehaviour enemyBehaviour = enemy.GetComponent <EnemyBehaviour> ();
            if (enemyBehaviour.AttackObject != null)
            {
                Destroy(enemyBehaviour.AttackObject);
            }
            print("Destruiu");
        }

        /*
         * GameObject attackObject;
         * while ((attackObject = GameObject.Find ("StraightLineAttack")) != null)
         *      Destroy (attackObject);
         */
        turn = TURN.CHECK;              // Vai para o estado de checagem
    }
示例#3
0
 // Evento de clique no btnSpecial. Verifica qual player que tá selecionado e desencadeia seu special.
 public void OnClickSpecial()
 {
     foreach (PlayerBehaviour player in players)
     {
         if (player.State == PlayerBehaviour.STATE.SELECTED)
         {
             if (player is ArcherBehaviour)                                  // Se é o special do archer
             {
                 ArcherBehaviour archerBehaviour = (ArcherBehaviour)player;
                 // We need to make a copy of the list and pass it as reference,
                 // or else when the clear function is called the original list is cleared
                 GameObject[] array = new GameObject[GameManager.enemies.Count];
                 GameManager.enemies.CopyTo(array);
                 archerBehaviour.SpecialCommand(new List <GameObject>(array));
             }
             else if (player is WarriorBehaviour)
             {
                 WarriorBehaviour warriorBehaviour = (WarriorBehaviour)player;
                 warriorBehaviour.SpecialCommand(new List <GameObject>());
                 // Mage only enables selecting target
             }
             else
             {
                 player.State = PlayerBehaviour.STATE.SPECIAL;
             }
             battleUI.SetActive(false);
             return;
         }
     }
 }
示例#4
0
 private void OnTriggerEnter2D(Collider2D coll)
 {
     if (coll.gameObject.tag == "Player")
     {
         PlayerBehaviour player = coll.GetComponent <PlayerBehaviour>();
         if (player.Name == "Guerreiro" && player.State == PlayerBehaviour.STATE.SPECIAL)
         {
             WarriorBehaviour warrior = (WarriorBehaviour)player;
             warrior.FinishSpecial();
             // Stunning ogres is currently disabled
             //owner.State = EnemyBehaviour.STATE.FROZEN;
             if (!piercing)
             {
                 owner.AttackObject = null;
                 GameObject.Destroy(gameObject);
             }
         }
         else
         {
             player.TakeDamage(owner.AttackValue);
         }
     }
 }
示例#5
0
    /// OVERRIDES

    public void Start()
    {
        animator  = GetComponent <Animator>();
        movement  = GetComponent <WarriorMovement>();
        behaviour = GetComponent <WarriorBehaviour>();
    }
示例#6
0
    // Update is called once per frame
    void Update()
    {
        int             i, j, counter = 0;
        PlayerBehaviour playerBehaviour;
        EnemyBehaviour  enemyBehaviour;

        foreach (GameObject enemy in enemies)
        {
            enemyBehaviour = enemy.GetComponent <EnemyBehaviour> ();
            if (enemyBehaviour.AttackType == 1)
            {
                ogreLifeSlider1.value = enemyBehaviour.Life;
            }
            else
            {
                ogreLifeSlider2.value = enemyBehaviour.Life;
            }
        }

        if (allEnemiesFrozen)
        {
            timerFrozen += Time.deltaTime;
        }

        if (turn == TURN.CHECK)
        {
            Check();
        }
        else if (turn == TURN.PLAYERTURN)                       // Sé é o turno do player e houve um toque na tela
        {
            if (Input.GetMouseButtonDown(0))
            {
                RaycastHit hit;
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

                // Verify if a character was selected BEFORE, and not exactly now.
                // We need to do it to obtain a good synchronization with the OnMouseDown() method from PlayerBehaviour.

                foreach (GameObject player in players)
                {
                    playerBehaviour = player.GetComponent <PlayerBehaviour> ();
                    // MOVIMENTAÇÃO DO PLAYER
                    if ((playerBehaviour.State == PlayerBehaviour.STATE.SELECTED) &&                     // Se há um player selecionado e não tocou em um colisor
                        ((!Physics2D.Raycast(new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x,
                                                         Camera.main.ScreenToWorldPoint(Input.mousePosition).y), Vector2.zero, 0f))) &&
                        (Camera.main.ScreenToWorldPoint(Input.mousePosition).y <= -0.26f && Camera.main.ScreenToWorldPoint(Input.mousePosition).y >= -3.75f))
                    {
                        pointToGo = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
                        playerBehaviour.FinalPosition = pointToGo;
                        playerBehaviour.State         = PlayerBehaviour.STATE.MOVING;
                        //print ("State moving");
                        playerBehaviour.anim.SetInteger("State", 1);
                        battleUI.SetActive(false);

                        break;
                    }
                    else
                    {
                        initialPosition = (Vector2)Camera.main.ScreenToWorldPoint(Input.mousePosition);
                        if (playerBehaviour.State == PlayerBehaviour.STATE.WAITATTACK)                                          // Se o player vai atacar
                        {
                            foreach (GameObject enemy in enemies)
                            {
                                enemyBehaviour = enemy.GetComponent <EnemyBehaviour> ();
                                //ATAQUE DO PLAYER
                                if (enemyBehaviour.IsSelected)                                                  // Se um inimigo foi selecionado
                                {
                                    playerBehaviour.Attack(enemy);
                                }
                            }
                        }
                        else if (playerBehaviour.State == PlayerBehaviour.STATE.SPECIAL && playerBehaviour is MageBehaviour)                                    // Se o player está em special
                        //else if (playerBehaviour is MageBehaviour) {	// Se é o special do mage
                        {
                            MageBehaviour mageBehaviour = (MageBehaviour)playerBehaviour;
                            foreach (GameObject enemy in enemies)
                            {
                                enemyBehaviour = enemy.GetComponent <EnemyBehaviour> ();
                                //SPECIAL DO MAGO
                                if (enemyBehaviour.IsSelected)                                                  // Se um inimigo foi selecionado
                                {
                                    List <GameObject> list = new List <GameObject>();
                                    list.Add(enemyBehaviour.gameObject);
                                    mageBehaviour.SpecialCommand(list);
                                }
                            }
                        }
                    }
                }
            }
            // Verifica quantos enemies estão em espera para atacar
            foreach (GameObject enemy in enemies)
            {
                print("Preso aqui");
                enemyBehaviour = enemy.GetComponent <EnemyBehaviour> ();
                if ((enemyBehaviour.State != EnemyBehaviour.STATE.WAITATTACK && enemyBehaviour.State != EnemyBehaviour.STATE.FROZEN)
                    /*|| enemyBehaviour.State == EnemyBehaviour.STATE.FROZEN*/)
                {
                    break;
                }
                counter++;
            }
            if (counter == enemies.Count || (allEnemiesFrozen && timerFrozen > enemies[0].GetComponent <EnemyBehaviour>().time))                        // Se todos os inimigos estão esperando, entra no turno de espera
            {
                turn = TURN.WAITTURN;
                foreach (GameObject player in players)                                  // Verifica se há um player prestes a agir
                {
                    playerBehaviour = player.GetComponent <PlayerBehaviour> ();
                    if (playerBehaviour.State == PlayerBehaviour.STATE.SELECTED || playerBehaviour.State == PlayerBehaviour.STATE.WAITATTACK ||
                        playerBehaviour.State == PlayerBehaviour.STATE.FROZEN)
                    {
                        playerBehaviour.State = PlayerBehaviour.STATE.NOTSELECTED;
                        battleUI.SetActive(false);
                    }
                }
                foreach (GameObject enemy in enemies)
                {
                    enemy.GetComponent <EnemyBehaviour> ().IsSelected = false;
                }
            }
        }
        else if (turn == TURN.WAITTURN)                         // Se estão no turno de espera
        //print ("Turno de espera");
        {
            foreach (GameObject player in players)
            {
                playerBehaviour = player.GetComponent <PlayerBehaviour> ();
                if (playerBehaviour.State != PlayerBehaviour.STATE.NOTSELECTED && playerBehaviour.State != PlayerBehaviour.STATE.SPECIAL &&
                    playerBehaviour.State != PlayerBehaviour.STATE.FROZEN)
                {
                    break;
                    print("Wait turn");
                }
                counter++;
            }
            if (counter == players.Count)                       // Se todos os players pararam de agir, vai para o turno do inimigo
            {
                print("counter");
                turn = TURN.ENEMYTURN;
                foreach (GameObject player in players)
                {
                    playerBehaviour = player.GetComponent <PlayerBehaviour> ();
                    if (playerBehaviour is WarriorBehaviour && playerBehaviour.State == PlayerBehaviour.STATE.SPECIAL)
                    {
                        WarriorBehaviour warrior = (WarriorBehaviour)playerBehaviour;
                        warrior.anim.SetInteger("State", 2);
                        warrior.Special            = warrior.Special - warrior.SpecialValue;
                        warriorSpecialSlider.value = warrior.Special;
                    }
                }
                foreach (GameObject enemy in enemies)
                {
                    print("Loop");
                    enemyBehaviour = enemy.GetComponent <EnemyBehaviour> ();
                    if (enemyBehaviour.State != EnemyBehaviour.STATE.FROZEN)
                    {
                        enemyBehaviour.State = EnemyBehaviour.STATE.ATTACKING;
                        if (enemyBehaviour.AttackType == 1)
                        {
                            enemyBehaviour.anim.SetInteger("State", 2);
                        }
                        else
                        {
                            enemyBehaviour.anim.SetInteger("State", 3);
                        }
                    }
                    //print ("Setou estado 2");
                    //enemyBehaviour.Attack ();
                }
            }
        }
        else if (turn == TURN.ENEMYTURN)
        {
            timerShockwave += Time.deltaTime;
            // Checa se todos os inimigos ainda estão atacando
            foreach (GameObject enemy in enemies)
            {
                enemyBehaviour = enemy.GetComponent <EnemyBehaviour> ();
                //if (enemyBehaviour.State != EnemyBehaviour.STATE.NOTSELECTED && enemyBehaviour.State != EnemyBehaviour.STATE.FROZEN)
                if (enemyBehaviour.State == EnemyBehaviour.STATE.ATTACKING)
                {
                    break;
                }
                counter++;
            }
            if (counter == enemies.Count && timerShockwave >= 1f)
            {
                CheckCollisions();
                timerShockwave = 0f;
            }
        }
    }