Exemplo n.º 1
0
    /// <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);
        }
    }