Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.55 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Panda;
  5.  
  6. public class Enemy : MonoBehaviour {
  7.  
  8. // DISTANCE BETWEEN PLAYER & ENEMY
  9. float distance;
  10.  
  11. // HEALTH & AMMO VALUES
  12. int health = 100;
  13. int ammo = 10;
  14.  
  15. // OBJECTS
  16. public GameObject player;
  17. public GameObject gun;
  18. public GameObject projectile;
  19. public GameObject cover;
  20.  
  21. // PATROL WPS
  22. public GameObject[] patrol;
  23. int current_patrol = 0;
  24.  
  25. // CELEBRATION WPS
  26. public GameObject[] celeb;
  27. int current_celeb = 0;
  28.  
  29. // WAYPOINT ACCURACY
  30. float accuracy = 0.3f;
  31.  
  32. // MOVEMENT SPEEDS
  33. float patrol_speed = 3f;
  34. float chase_speed = 8f;
  35. float flee_speed = 8f;
  36.  
  37. // PROJECTILE SPEED & DESPAWN TIMER
  38. float projecile_speed = 15f;
  39. float projecile_despawn = 3f;
  40.  
  41. // EVERY FRAME, UPDATE DISTANCE BETWEEN PLAYER & ENEMY
  42. void Update() {
  43. distance = Vector3.Distance(player.transform.position, transform.position);
  44. }
  45.  
  46. // BEHAVIOUR TRIGGERS
  47. [Task] bool patrolling() { if (!celebrating() && !low_on_health() && !out_of_ammo() && distance > 15) { return true; } return false; }
  48. [Task] bool chasing() { if (!celebrating() && !low_on_health() && !out_of_ammo() && distance > 8 && distance < 15) { return true; } return false; }
  49. [Task] bool shooting() { if (!celebrating() && !low_on_health() && !out_of_ammo() && distance < 8) { return true; } return false; }
  50. [Task] bool low_on_health() { if (!celebrating() && health < 30) { return true; } return false; }
  51. [Task] bool out_of_ammo() { if (!celebrating() && ammo < 1) { return true; } return false; }
  52. [Task] bool celebrating() { if (!player.activeSelf) { return true; } return false; }
  53.  
  54. // MOVE MODE
  55. [Task] void move() {
  56.  
  57. // CURRENT WAYPOINT
  58. GameObject waypoint = patrol[current_patrol];
  59.  
  60. // CHECK DISTANCE BETWEEN OBJECT & WAYPOINT
  61. float distance = Vector3.Distance(waypoint.transform.position, transform.position);
  62.  
  63. // IF DISTANCE IS LARGER THAN ACCURACY
  64. if (distance > accuracy) {
  65.  
  66. // MOVE OBJECT TOWARDS WAYPOINT
  67. Vector3 foo = waypoint.transform.position - transform.position;
  68. transform.Translate(foo.normalized * (patrol_speed * Time.deltaTime), Space.World);
  69.  
  70. // OTHERWISE
  71. } else {
  72.  
  73. // INCREMENT THE INDEX
  74. current_patrol++;
  75.  
  76. // IF INCREMENTED VALUE EXCEEDS LAST CHECKPOINT, SWAP IT TO THE FIRST
  77. if (current_patrol >= patrol.Length) { current_patrol = 0; }
  78. }
  79.  
  80. Task.current.Succeed();
  81. }
  82.  
  83. // CHASE MODE
  84. [Task] void chase() {
  85.  
  86. // MOVE OBJECT TOWARDS WAYPOINT
  87. Vector3 foo = player.transform.position - transform.position;
  88. transform.Translate(foo.normalized * (chase_speed * Time.deltaTime), Space.World);
  89.  
  90. Task.current.Succeed();
  91. }
  92.  
  93. // TURN MODE
  94. [Task] void turn() {
  95.  
  96. // TURN TOWARDS THE PLAYER & FINISH
  97. transform.LookAt(player.transform.position);
  98. Task.current.Succeed();
  99. }
  100.  
  101. // SHOOT MODE
  102. [Task] void shoot() {
  103.  
  104. // CREATE A PROJECTILE & MOVE IT TOWARD THE PLAYER
  105. GameObject proj = Instantiate(projectile, gun.transform.position, gun.transform.rotation);
  106. proj.GetComponent<Rigidbody>().velocity = proj.transform.forward * projecile_speed;
  107.  
  108. // DESTROY IT AFTER X SECONDS
  109. Destroy(proj, projecile_despawn);
  110.  
  111. // REMOVE ONE BULLET
  112. ammo -= 1;
  113.  
  114. Task.current.Succeed();
  115. }
  116.  
  117. // FLEE MODE
  118. [Task] void flee() {
  119.  
  120. // CHECK DISTANCE BETWEEN OBJECT & WAYPOINT
  121. float distance = Vector3.Distance(cover.transform.position, transform.position);
  122.  
  123. // IF DISTANCE IS LARGER THAN ACCURACY
  124. if (distance > accuracy) {
  125.  
  126. // MOVE OBJECT TOWARDS WAYPOINT
  127. Vector3 foo = cover.transform.position - transform.position;
  128. transform.Translate(foo.normalized * (flee_speed * Time.deltaTime), Space.World);
  129.  
  130. // OTHERWISE, FINISH THE TASK
  131. } else { Task.current.Succeed(); }
  132. }
  133.  
  134. // RELOAD MODE
  135. [Task] void reload() {
  136.  
  137. // RESET AMMO & FINISH
  138. ammo = 10;
  139. Task.current.Succeed();
  140. }
  141.  
  142. // RECOVER MODE
  143. [Task] void recover() {
  144.  
  145. // RESET HEALTH & FINISH
  146. health = 100;
  147. Task.current.Succeed();
  148. }
  149.  
  150. // CELEBRATION MODE
  151. [Task] void celebrate() {
  152.  
  153. // CURRENT WAYPOINT
  154. GameObject waypoint = celeb[current_celeb];
  155.  
  156. // CHECK DISTANCE BETWEEN OBJECT & WAYPOINT
  157. float distance = Vector3.Distance(waypoint.transform.position, transform.position);
  158.  
  159. // IF DISTANCE IS LARGER THAN ACCURACY
  160. if (distance > accuracy) {
  161.  
  162. // MOVE OBJECT TOWARDS WAYPOINT
  163. Vector3 foo = waypoint.transform.position - transform.position;
  164. transform.Translate(foo.normalized * (patrol_speed * Time.deltaTime), Space.World);
  165.  
  166. // OTHERWISE
  167. } else {
  168.  
  169. // INCREMENT THE INDEX
  170. current_celeb++;
  171.  
  172. // IF INCREMENTED VALUE EXCEEDS LAST CHECKPOINT, SWAP IT TO THE FIRST
  173. if (current_celeb >= celeb.Length) { current_celeb = 0; }
  174. }
  175.  
  176. Task.current.Succeed();
  177. }
  178.  
  179. // ON PROJECTILE IMPACT
  180. private void OnTriggerEnter(Collider other) {
  181.  
  182. // REMOVE 10 HEALTH & DESTROY THE PROJECTILE
  183. health -= 10;
  184. Destroy(other.gameObject);
  185. }
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement