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); }
// 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 }
// 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; } } }
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); } } }
/// OVERRIDES public void Start() { animator = GetComponent <Animator>(); movement = GetComponent <WarriorMovement>(); behaviour = GetComponent <WarriorBehaviour>(); }
// 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; } } }