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(); } }