public void AddEnemyAtRoom(EnemyControl_MovementController newEnemy) { if (!currentEnemiesInRoom.Contains(newEnemy)) { currentEnemiesInRoom.Add(newEnemy); } }
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); } }
public void RemoveEnemyAtRoom(EnemyControl_MovementController deleteEnemy) { if (currentEnemiesInRoom.Contains(deleteEnemy)) { currentEnemiesInRoom.Remove(deleteEnemy); } }
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>(); }
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); } }
public void DeleteEnemyFromCurrentRoom(EnemyControl_MovementController enemy) { m_activeRoom.RemoveEnemyAtRoom(enemy); }
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); } }