// Update is called once per frame protected virtual void Update() { // Cheqeo extra de salida de escenario // TODO: Reviasr algunas cosas que se ven afectadas opri esto if (transform.position.y < -100) { //ManageDamage(currentChasisHealth, transform.position); //Destroy(gameObject); //EnemyManager // if (enemyManager != null) { //enemyManager.SubtractOne(managerIndex); // En este caso no sacamos cuerpo muerto EnemyAnalyzer.Release(); enemyManager.SendToReserve(managerIndex, gameObject); } } // Decidimos el daño físico por cambio en la velocidad //if (CheckDrasticChangeInAcceleration(2.5f)) //{ // float impactForce = GeneralFunctions.GetCollisionForce(rb, null); // ReceiveImpact(impactForce, transform.position); // // // receivedStrongImpact = true; //} }
// Use this for initialization void Start() { //To move to its postion respect to the player Vector3 idealPos = targetPlayer.position + idealOffset.x * targetPlayer.right + idealOffset.y * targetPlayer.up + idealOffset.z * targetPlayer.forward; transform.position = idealPos; //To look at the palyer targetPos = targetPlayer.TransformPoint(targetOffset); transform.LookAt(targetPos, targetPlayer.up); // currentTarget = targetPlayer; // TODO: Preferiría no hacerlo así // Puede dar problemas si metemos más de una cámara //cameraComponent = GetComponent<Camera>(); cameraComponent = FindObjectOfType <Camera>(); // inputManager = FindObjectOfType <InputManager>(); // //originalY = targetOffset.y; // //gameManager = FindObjectOfType<GameManager>(); // positionWithoutCorrection = transform.position; // cameraReference = FindObjectOfType <CameraReference>(); // Ojo con ele enemy analyzer // Al ser pasivo se puede quedar activado entre escenas EnemyAnalyzer.Release(); }
// protected override void OnCollisionEnter(Collision collision) { // base.OnCollisionEnter(collision); // if (collision.collider.tag == "Sand" && !grounded && lunging) { lunging = false; SwitchGrounding(); // trailEmmiter.rateOverDistance = 100; } // TODO: Montarlo bien y asegurarse de que funciona if (collision.collider.tag.Equals("Hard Terrain") && grounded) { //Destroy(gameObject); //TODO: Ñapa como una catedral // Coger bien la referencia arriba //FindObjectOfType<EnemyManager>().SubtractOne(GetComponent<EnemyConsistency>().ManagerIndex); if (EnemyAnalyzer.isActive && EnemyAnalyzer.enemyTransform == transform) { EnemyAnalyzer.Release(); } FindObjectOfType <EnemyManager>().SendToReserve(GetComponent <EnemyConsistency>().ManagerIndex, gameObject); } }
// void CheckControls() { // TODO: Controlarlo mejor if (inputManager.PauseButton) { //Debug.Log("Triynig to pause"); if (!GameControl.paused) { Time.timeScale = 0; GameControl.paused = true; // Escodemos el cursor para jugar birn Cursor.lockState = CursorLockMode.None; Cursor.visible = true; } else { Time.timeScale = 1; GameControl.paused = false; // Escodemos el cursor para jugar birn Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; } } // Para volver al menu if (inputManager.JumpButton && GameControl.paused) { // Unpause GameControl.paused = false; Time.timeScale = 1; // if (EnemyAnalyzer.isActive) { EnemyAnalyzer.Release(); } // SceneManager.LoadScene("Main Menu"); } // if (GameControl.paused) { inputManager.RightAxisSensivity += inputManager.StickAxis.y * 0.01f; } // if (Input.GetKeyDown(KeyCode.P)) { if (GameControl.bulletTime) { GameControl.bulletTime = false; Time.timeScale = 1; } else { GameControl.bulletTime = true; Time.timeScale = 0.1f; } } }
public void ReceiveBulletImpact(Rigidbody impactingRigidbody, Bullet bulletComponent) { // TODO: Cambiar la detección a proximidad // Seguramente lo haga la propia Carol if (active == false && currentHealthPoints > 0) { Unveil(); // TODO: Revisar esto carolBaseHelp.TriggerIt(); } // if (currentHealthPoints > 0) { // int damageReceived = 0; //currentHealthPoints--; if (bulletComponent != null) { damageReceived = ManageImpact(impactingRigidbody, bulletComponent); } else /* Algo pondremos aqui*/ } { // if (reactionOnDamage) { bossBehaviour.RespondToDamagedWeakPoint(tagForBoss); } // if (currentHealthPoints <= 0) { bossBehaviour.LoseWeakPoint(tagForBoss); carolBaseHelp.WeakPointDestroyed(); //TODO: Meteremos el churrazo de sangre active = false; Instantiate(destructionParticles, transform.position, Quaternion.identity); gameObject.SetActive(false); //Destroy(this); //Destroy(gameObject); EnemyAnalyzer.Release(); impactInfoManager.SendImpactInfo(transform.position, damageReceived, "Weakpoint Destroyed"); } else { impactInfoManager.SendImpactInfo(transform.position, damageReceived); } // //ImpactInfoManager } }
/// <summary> /// Check the different action change buttons /// </summary> void CheckActionChange() { // Attack actions if (inputManager.SwitchWeaponButton && gameManager.playerAttributes.unlockedAttackActions > 0) { // attackMode = (AttackMode)(int)attackMode + 1; attackMode = (attackMode == AttackMode.Count || (int)attackMode >= gameManager.playerAttributes.unlockedAttackActions) ? (AttackMode)0 : attackMode; // TODO: Habrá que trabajar esto con la carga variable EnemyAnalyzer.RecalculatePenetration(); } // Defensive actions if (inputManager.SwitchDefenseButton && gameManager.playerAttributes.unlockedDefenseActions > 0) { // defenseMode = (DefenseMode)(int)defenseMode + 1; defenseMode = (defenseMode == DefenseMode.Count || (int)defenseMode >= gameManager.playerAttributes.unlockedDefenseActions) ? (DefenseMode)0 : defenseMode; } // Jump actions if (inputManager.SwitchJumpButton && gameManager.playerAttributes.unlockedJumpActions > 0) { // jumpMode = (JumpMode)(int)jumpMode + 1; jumpMode = (jumpMode == JumpMode.Count || (int)jumpMode >= gameManager.playerAttributes.unlockedJumpActions) ? (JumpMode)0 : jumpMode; } // Sprint actions if (inputManager.SwitchSprintButton && gameManager.playerAttributes.unlockedSprintActions > 0) { // sprintMode = (SprintMode)(int)sprintMode + 1; sprintMode = (sprintMode == SprintMode.Count || (int)sprintMode >= gameManager.playerAttributes.unlockedSprintActions) ? (SprintMode)0 : sprintMode; } }
/// <summary> /// Switch camera's target with a new one /// </summary> /// <param name="newTarget"></param> public void SwitchTarget(Transform newTarget = null) { // TODO: Hcaer una versión limpia if (newTarget == null) { currentTarget = targetPlayer; EnemyAnalyzer.Release(); //targetOffset.x = 3; } else { // TODO: Sustituirlo del todo currentTarget = newTarget; EnemyAnalyzer.Release(); EnemyAnalyzer.Assign(newTarget); //targetOffset.x = 0; } // In any case //targetOffset.y = 0; }
// public void ReceivePulseDamage(Vector3 forceAndDirection) { // Repetiemos un poco el codigo de bullet damage y a correr if (active == false && currentHealthPoints > 0) { Unveil(); // TODO: Revisar esto carolBaseHelp.TriggerIt(); } // if (currentHealthPoints > 0) { // float impactForce = forceAndDirection.magnitude; // float damageReceived = impactForce /* - defense*/; damageReceived = Mathf.Max(damageReceived, 0); // currentHealthPoints -= (int)damageReceived; // if (reactionOnDamage) { bossBehaviour.RespondToDamagedWeakPoint(tagForBoss); } // if (currentHealthPoints <= 0) { bossBehaviour.LoseWeakPoint(tagForBoss); carolBaseHelp.WeakPointDestroyed(); //TODO: Meteremos el churrazo de sangre active = false; Instantiate(destructionParticles, transform.position, Quaternion.identity); gameObject.SetActive(false); //Destroy(this); //Destroy(gameObject); EnemyAnalyzer.Release(); } } }
// void SwitchToNearestInWorldEnemy() { //Debug.Log("Switching to nearest enemy in world " + EnemyAnalyzer.lastEnemyPosition); // Transform enemyToSwitch = null; float nearestDistance; // Targeteable[] enemies = FindObjectsOfType <Targeteable>(); List <Targeteable> targeteableEnemies = FilterActiveTargeteables(enemies); // if (targeteableEnemies.Count > 0) { enemyToSwitch = targeteableEnemies[0].transform; nearestDistance = (enemyToSwitch.position - EnemyAnalyzer.lastEnemyPosition).magnitude; } else { SwitchTarget(); return; } // for (int i = 1; i < targeteableEnemies.Count; i++) { float nextOnedistance = (targeteableEnemies[i].transform.position - EnemyAnalyzer.lastEnemyPosition).magnitude; if (nextOnedistance < nearestDistance) { enemyToSwitch = targeteableEnemies[i].transform; nearestDistance = nextOnedistance; } } // EnemyAnalyzer.Release(); EnemyAnalyzer.Assign(enemyToSwitch); SwitchTarget(enemyToSwitch); }
/// <summary> /// /// </summary> protected virtual void ManageDamage(float damageReceived, Vector3 point, Vector3 receivedForce = new Vector3()) { // Si la vida cae a cero lo convertimos en un simple objeto con rigidbody // Le quitamos sus scripts de comportamiento, vamos if (currentHealth <= 0) { // if (impactInfoManager != null) { impactInfoManager.SendImpactInfo(point, (int)damageReceived, "Enemy destroyed"); } else { Debug.Log("Impact info manager is null. Check it"); } //Debug.Log("Enemy " + transform.name + " destroyed. Impact force " + impactForce); //gameObject.SetActive(false); // GeneralFunctions.PlaySoundEffect(audioSource, deathClip); // Anotamos muerte (mandando al propio bicho como muestra) if (levelManager != null) { // Transform wholeObject = transform.parent; // if (wholeObject == null) { wholeObject = transform; } // levelManager.AnnotateKill(inGameName); } if (enemyManager != null) { // Esto hay que abordarlo de varias maneras // Recordar que es el padre el que hay que enviar, en la mayoría de casos GameObject enemyCompleteObject; if (transform.parent != null) { enemyCompleteObject = transform.parent.gameObject; } else { enemyCompleteObject = gameObject; } enemyManager.SendToReserve(managerIndex, enemyCompleteObject); } // Lo sacamos de la formacion bodyBehaviour.LeaveFormation(); // if (deadBodyPrefab != null) { PutDeadBody(receivedForce); } // EnemyAnalyzer.Release(); // //Debug.Log("Death log: " + gameObject.name + ", " + transform.position + ", " + damageReceived); // Esto para los voladores mas que nada //rb.constraints = RigidbodyConstraints.None; // //if (deathBloodPrefab != null) // PlaceDeathBlood(); // if (deathParticlesPrefab != null) { Instantiate(deathParticlesPrefab, transform.position, Quaternion.identity); } // TODO: Mirar como hacer para quitar el rigidody a los x segundos //Destroy(rb, 10); // Destruimos el script pero dejamos el cuerpo //Destroy(this); } else { // Chequo provisional para que no de mal en el menu if (impactInfoManager != null) { impactInfoManager.SendImpactInfo(point, (int)damageReceived); } // Si sigue vivo le aplicamos la fuerza // TODO: Probar con explosive force //rb.AddExplosionForce(receivedForce, ) rb.AddForce(receivedForce, ForceMode.Impulse); } }