Example #1
0
    public override void Die(Character offendingCharacter)
    {
        if (!isDead)
        {
            isDead = true;

            // Simple death functionality

            /*
             * StateController stateController = GetComponent<StateController>();
             * if (stateController)
             * {
             *  stateController.aiActive = false;
             * }
             *
             * Collider collider = GetComponent<Collider>();
             * if (collider)
             * {
             *  collider.enabled = false;
             * }
             */

            // agent.enabled = false;
            astarAgent.canMove = false;

            // Instantiate drop items
            if (drops.Length > 0)
            {
                for (int i = 0; i < drops.Length; i++)
                {
                    GameObject drop = Instantiate(drops[i], transform.position, Quaternion.identity);
                    Rigidbody  rb   = drop.GetComponent <Rigidbody>();
                    if (rb != null)
                    {
                        rb.AddForce(new Vector3(Random.Range(-300, 300), Random.Range(200, 400), Random.Range(-300, 300)));
                        rb.AddTorque(new Vector3(Random.Range(-300, 300), Random.Range(-300, 300), Random.Range(-300, 300)));
                    }
                }
            }

            // Set mesh inactive
            // characterMesh.SetActive(false);

            // Instantiate gore
            for (int i = 0; i < 5; i++)
            {
                Rigidbody gp   = Instantiate(goreParticle, transform.position, Quaternion.identity);
                Renderer  rend = gp.GetComponent <Renderer>();
                rend.material.SetColor("_Color", bloodColor);
                gp.transform.localScale = new Vector3(gp.transform.localScale.x * Random.Range(0.5f, 1f), gp.transform.localScale.y * Random.Range(0.5f, 1f), gp.transform.localScale.z * Random.Range(0.5f, 1f));
                gp.AddForce(new Vector3(Random.Range(-300, 300), Random.Range(-300, 300), Random.Range(-300, 300)));
            }

            // If the enemy came from a spawner, unsubscribe from spawner list on death
            SpawnableObject spawnable = GetComponent <SpawnableObject>();
            if (spawnable)
            {
                spawnable.Unsubscribe();
            }

            // Unsubscribe from manager
            Managers.Gameplay.aICharacters.Remove(this);

            // Add points to GameManager powerLevel
            // GameplayManager.instance.AddPowerX(killScore);

            // Death animation and cleanup
            // StartCoroutine(DeadAnimation());
            // StartCoroutine(DestroyAfterTime(3));

            if (offendingCharacter.tag == "Player")
            {
                Managers.Audio.PlayKillTargetSound(2);
                Managers.Gameplay.AddCombo();
            }

            // Destroy(gameObject);
            ReturnAttackToken();
            Destroy(equippedWeapon.gameObject);
            DestroySaveable();
        }
    }