2020-02-01 07:52:46 +00:00
|
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.AI;
|
|
|
|
|
|
|
|
|
|
public class EnemyManager : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
public float health = 100;
|
2020-02-01 09:12:47 +00:00
|
|
|
|
public float actualHealth;
|
2020-02-01 07:52:46 +00:00
|
|
|
|
private NavMeshAgent navMeshAgent;
|
|
|
|
|
private PlayerManager player;
|
2020-02-01 09:12:47 +00:00
|
|
|
|
public List<GameObject> bodyParts = new List<GameObject>();
|
2020-02-01 07:52:46 +00:00
|
|
|
|
|
|
|
|
|
// Start is called before the first frame update
|
|
|
|
|
void Start()
|
|
|
|
|
{
|
2020-02-01 09:12:47 +00:00
|
|
|
|
actualHealth = health;
|
2020-02-01 07:52:46 +00:00
|
|
|
|
player = FindObjectOfType<PlayerManager>();
|
|
|
|
|
navMeshAgent = GetComponent<NavMeshAgent>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Update is called once per frame
|
|
|
|
|
void Update()
|
|
|
|
|
{
|
|
|
|
|
navMeshAgent.SetDestination(player.transform.position);
|
2020-02-01 09:12:47 +00:00
|
|
|
|
DropBodyPart();
|
|
|
|
|
if (actualHealth <= 0)
|
2020-02-01 07:52:46 +00:00
|
|
|
|
{
|
2020-02-01 09:12:47 +00:00
|
|
|
|
if (bodyParts.Count > 0) {
|
|
|
|
|
foreach (GameObject bodyPart in bodyParts)
|
|
|
|
|
{
|
|
|
|
|
Destroy(bodyPart, 3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
navMeshAgent.isStopped = true;
|
|
|
|
|
navMeshAgent.enabled = false;
|
|
|
|
|
gameObject.AddComponent<Rigidbody>();
|
|
|
|
|
Rigidbody rigidBodyEnemy = gameObject.GetComponent<Rigidbody>() as Rigidbody;
|
|
|
|
|
rigidBodyEnemy.velocity = -gameObject.transform.forward;
|
|
|
|
|
rigidBodyEnemy.mass = 50;
|
|
|
|
|
Destroy(this.gameObject, 3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FixedUpdate()
|
|
|
|
|
{
|
|
|
|
|
if (actualHealth > 0)
|
|
|
|
|
{
|
|
|
|
|
Vector3 _dir = player.transform.position - transform.position;
|
|
|
|
|
_dir.Normalize();
|
|
|
|
|
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(_dir), 5 * Time.deltaTime);
|
2020-02-01 07:52:46 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Damage()
|
|
|
|
|
{
|
|
|
|
|
WeaponManager weaponManager = player.weaponList[player.selectedWeapon].GetComponent<WeaponManager>();
|
|
|
|
|
if (weaponManager != null) {
|
2020-02-01 09:12:47 +00:00
|
|
|
|
actualHealth -= weaponManager.damage;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DropBodyPart()
|
|
|
|
|
{
|
|
|
|
|
if (bodyParts.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
float number = health / (bodyParts.Count + 1);
|
|
|
|
|
for (int i = 0; i < bodyParts.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
if ((health - actualHealth) / number > i)
|
|
|
|
|
{
|
|
|
|
|
bodyParts[i].transform.parent = null;
|
|
|
|
|
bodyParts[i].AddComponent<Rigidbody>();
|
|
|
|
|
Rigidbody rigidBodyEnemy = bodyParts[i].GetComponent<Rigidbody>() as Rigidbody;
|
2020-02-01 09:27:32 +00:00
|
|
|
|
bodyParts[i].AddComponent<MeshCollider>();
|
2020-02-01 09:12:47 +00:00
|
|
|
|
rigidBodyEnemy.mass = 10;
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-02-01 07:52:46 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnParticleCollision(GameObject other)
|
|
|
|
|
{
|
|
|
|
|
if (other.transform.tag == "Bullets")
|
|
|
|
|
{
|
|
|
|
|
Damage();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|