// 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;
     //}
 }
Exemple #2
0
    // 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;
         }
     }
 }
Exemple #5
0
    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
    }
}
Exemple #6
0
    /// <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;
        }
    }
Exemple #7
0
 /// <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;
 }
Exemple #8
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();
        }
    }
}
Exemple #9
0
    //
    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);
        }
    }