Ejemplo n.º 1
0
 public void AddEnemyAtRoom(EnemyControl_MovementController newEnemy)
 {
     if (!currentEnemiesInRoom.Contains(newEnemy))
     {
         currentEnemiesInRoom.Add(newEnemy);
     }
 }
Ejemplo n.º 2
0
    void Awake()
    {
        myCollider = GetComponent <BoxCollider2D>();
        Vector2 hitColliderPosition = new Vector2(gameObject.transform.position.x + myCollider.offset.x, gameObject.transform.position.y + myCollider.offset.y);

        Collider2D[] hitColliders = Physics2D.OverlapBoxAll(hitColliderPosition, myCollider.size, 0f, m_enemyLayer);

        //Detectar enemigos al comenzar la partida
        int i = 0;

        while (i < hitColliders.Length)
        {
            EnemyControl_MovementController enemyController = hitColliders[i].GetComponent <EnemyControl_MovementController>();
            if (enemyController != null)
            {
                AddEnemyAtRoom(enemyController);
            }
            else if (hitColliders[i].GetComponent <Spawner>() != null)
            {
                AddSpawnerAtRoom(hitColliders[i].GetComponent <Spawner>());
            }
            i++;
        }

        //Añadir las posiciones iniciales de los enemigos a un diccionario
        foreach (EnemyControl_MovementController enemy in currentEnemiesInRoom)
        {
            originalEnemiesAtRoomPosition.Add(enemy.transform, enemy.transform.position);
            enemy.gameObject.SetActive(false);
        }
    }
Ejemplo n.º 3
0
 public void RemoveEnemyAtRoom(EnemyControl_MovementController deleteEnemy)
 {
     if (currentEnemiesInRoom.Contains(deleteEnemy))
     {
         currentEnemiesInRoom.Remove(deleteEnemy);
     }
 }
Ejemplo n.º 4
0
 void StartSaveVariables()
 {
     this_EnemyControl_MovementController = GetComponent <EnemyControl_MovementController>();
     this_EnemyShootingScript             = GetComponent <ShootingScript>();
     this_EnemyActiveAbility   = GetComponent <ActiveAbility>();
     this_EnemyAI              = GetComponent <EnemyAI_Standard>();
     this_EnemyNavAgent        = GetComponent <NavMeshAgent>();
     this_EnemyHealthScript    = GetComponent <EnemyHealth>();
     player_MovementController = GameManager.Instance.realPlayerGO.GetComponent <PlayerControl_MovementController>();
     player_PossessAbility     = GameManager.Instance.realPlayerGO.GetComponent <PossessAbility>();
     thisEnemyRB = GetComponent <Rigidbody2D>();
 }
Ejemplo n.º 5
0
    public void DeleteControlledEnemyFromRoomList()
    {
        EnemyControl_MovementController currentControlledEnemy = null;

        foreach (EnemyControl_MovementController enemy in currentEnemiesInRoom)
        {
            if (enemy == GameManager.Instance.ActualPlayerController)
            {
                currentControlledEnemy = enemy;  //Es el jugador, así que se saca de la lista de enemigos en la sala
                break;
            }
        }
        if (currentControlledEnemy != null)
        {
            RemoveEnemyAtRoom(currentControlledEnemy);
        }
    }
Ejemplo n.º 6
0
 public void DeleteEnemyFromCurrentRoom(EnemyControl_MovementController enemy)
 {
     m_activeRoom.RemoveEnemyAtRoom(enemy);
 }
Ejemplo n.º 7
0
    protected virtual void ControlArmRotation()
    {
        playerInputDirection = InputManager.Instance.RotationInput();

        float playerInputAngle = Mathf.Atan2(playerInputDirection.normalized.y, playerInputDirection.normalized.x) * Mathf.Rad2Deg;

        if (playerInputAngle < 0)
        {
            playerInputAngle += 360;
        }
        EnemyControl_MovementController enemyToAim = null; //Variable del enemigo al que se apuntará automáticamente si lo hay

        if (playerInputDirection.sqrMagnitude > 0.2f)      ////Si el valor de la dirección es mayor que 0.2...
        {
            float previousPriority = 0;                    //Variable para comparar qué enemigo está más cerca

            foreach (EnemyControl_MovementController enemy in ZoneManager.Instance.m_activeRoom.currentEnemiesInRoom)
            {
                if (enemy != GameManager.Instance.ActualPlayerController && enemy != null && autoAimIsActivated)
                {
                    Vector2 vectorToActualEnemy   = enemy.transform.position - armObject.transform.position;
                    float   distanceToActualEnemy = vectorToActualEnemy.magnitude;
                    float   angleToActualEnemy    = Mathf.Atan2(vectorToActualEnemy.y, vectorToActualEnemy.x) * Mathf.Rad2Deg;

                    if (angleToActualEnemy < 0)
                    {
                        angleToActualEnemy += 360;
                    }
                    if (Mathf.Abs(angleToActualEnemy - playerInputAngle) < maxAimAngle && distanceToActualEnemy < maxDistanceAim)
                    {
                        float thisPriority = angleAimPriority * (1 - (Mathf.Abs(angleToActualEnemy - playerInputAngle) / maxAimAngle)) + distanceAimPriority * (1 - (distanceToActualEnemy / maxDistanceAim));
                        if (thisPriority > previousPriority)
                        {
                            enemyToAim       = enemy;
                            previousPriority = thisPriority;
                        }
                    }
                }
            }

            if (enemyToAim != null) //Si un enemigo cumple las condiciones para ser apuntado automáticamente
            {
                Vector2 vectorToAimEnemy   = enemyToAim.transform.position - armObject.transform.position;
                float   distanceToAimEnemy = vectorToAimEnemy.magnitude;

                angle = Mathf.LerpAngle(angle, Vector2.SignedAngle(Vector2.right, vectorToAimEnemy), 0.2f);

                Debug.DrawRay(armObject.transform.position, Quaternion.AngleAxis(angle, Vector3.forward) * Vector3.right * vectorToAimEnemy.magnitude, Color.red);
                Debug.DrawRay(armObject.transform.position, playerInputDirection * 10f, Color.green);
            }
            else //Si no hay enemigo para hacer auto aim
            {
                angle = playerInputAngle;
            }

            armObject.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); ////Se rota el objeto de brazo para igualar la dirección del joystick en el eje Z.
        }

        else if (controlRb.velocity.normalized.magnitude != 0) //Si no se controla la dirección y se está moviendo
        {
            angle = Vector2.SignedAngle(Vector2.right, controlRb.velocity.normalized);
            armObject.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); ////Se rota el objeto de brazo para igualar la dirección del joystick en el eje Z.
        }

        else //Si NO controla la dirección y no se mueve mantiene el ángulo anterior
        {
            armObject.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
        }
    }