using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : MonoBehaviour { public float powerSuckDelay = 1; [SerializeField] private GameObject powerDrop; [SerializeField] private PowerLevels powerLevel; private float power = 1.0f; private enum PowerLevels { VeryLow, Low, Medium, High, Full} private EnemyAI.BehaviorController behaviorController; private DayTimeManager dayTimeManager; private bool dead = false; private DayTimeLabel lastCharging; private IEnumerator drainCoroutine; void OnCollisionEnter(Collision collision) { if(!dead) { if (collision.collider.tag == "Bullet") { Death(); } else if (collision.collider.tag == "Player") { drainCoroutine = DrainPower(collision.collider.GetComponent()); StartCoroutine(drainCoroutine); } } } void OnCollisionExit(Collision collision) { if (collision.collider.tag == "Player") { if (drainCoroutine != null) StopCoroutine(drainCoroutine); } } // Use this for initialization void Start () { dayTimeManager = GameObject.FindObjectOfType(); behaviorController = new EnemyAI.BehaviorController(); behaviorController.blackboard.navMeshAgent = GetComponent(); } // Update is called once per frame void Update () { if (!dead) { // AI EnemyAI.Blackboard blackboard = behaviorController.blackboard; if (dayTimeManager.dayTimeLabel == DayTimeLabel.Night) { blackboard.Night = true; } else { blackboard.Night = false; } blackboard.PlayerPosition = GameObject.FindGameObjectWithTag("Player").transform.position; blackboard.EnemyPosition = transform.position; behaviorController.Update(); // Energy collection if (dayTimeManager.dayTimeLabel != lastCharging) { switch (dayTimeManager.dayTimeLabel) { case (DayTimeLabel.Night): powerLevel = PowerLevels.Full; power = 16; lastCharging = dayTimeManager.dayTimeLabel; break; case (DayTimeLabel.Morning): powerLevel = PowerLevels.VeryLow; power = 1; lastCharging = dayTimeManager.dayTimeLabel; break; case (DayTimeLabel.Noon): powerLevel = PowerLevels.Low; power = 2; lastCharging = dayTimeManager.dayTimeLabel; break; case (DayTimeLabel.Evening): powerLevel = PowerLevels.Medium; power = 4; lastCharging = dayTimeManager.dayTimeLabel; break; } } } } private void Death() { dead = true; GetComponent().isStopped = true; GameObject go = GameObject.Instantiate(powerDrop); go.GetComponent().powerAmount = power; go.transform.position = gameObject.transform.position; GameObject.Destroy(gameObject); } private IEnumerator DrainPower(Player player) { while (true) { yield return new WaitForSeconds(powerSuckDelay); player.PowerLevel -= 0.5f; } } }