public void PushLeft() { if (m_player.hasLightBulb) { Node EnemyNode = m_board.FindNodeAt(transform.position); if (m_board.playerNode.transform.position.z == EnemyNode.transform.position.z && Vector3.Distance(EnemyNode.transform.position, m_board.playerNode.transform.position) < 3f && m_board.playerNode.transform.position.x > EnemyNode.transform.position.x) { Debug.Log("MoveLeft"); m_enemyMover.MoveLeft(); m_enemyMover.destination = m_player.transform.position; m_enemyMover.FaceDestination(); m_player.clearPlayerPath(); m_enemyMover.firstChaserMove = false; } } }
IEnumerator PickRockRoutine() { CancelInvoke("ChangeDir"); Vector3 posRock = transform.position; Vector3 mid = transform.position; mid.y += 2f; switch (pos) { case Position.N: posRock.z += 4f; mid.z += 2f; break; case Position.E: posRock.x += 4f; mid.x += 2f; break; case Position.S: posRock.z -= 4f; mid.z -= 2f; break; case Position.W: posRock.x -= 4f; mid.x -= 2f; break; } Vector3 heigh = new Vector3(0f, 1f, 0f); Vector3[] path = { transform.position + heigh, mid, posRock }; ThrowRock(path); Destroy(_arrow); yield return(new WaitForSeconds(delay)); activateActivableEvent.Invoke(); Node nodeDest = _board.FindNodeAt(posRock); if (nodeDest != null) { EnemyManager[] enemies = Object.FindObjectsOfType <EnemyManager>() as EnemyManager[]; rockAudio.Play(); foreach (EnemyManager enemy in enemies) { EnemyMover mover = enemy.GetComponent <EnemyMover>(); if (mover.CurrentNode == nodeDest) { enemy.Die(); } else if (!enemy.IsDead) { List <Node> neighs = mover.CurrentNode.FindNeighbors(_board.AllNodes); Node nearestNode = FindNearestNode(neighs, nodeDest, mover.CurrentNode); mover.destination = nearestNode.transform.position; mover.FaceDestination(); } } _player.playerMover.hasMoved = false; yield return(new WaitForSeconds(1f)); } }