Advertisement
Guest User

Untitled

a guest
Jan 21st, 2015
1,665
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.53 KB | None | 0 0
  1. //Titan optimization through toggling colliders based on hook raycasts, mouse raycasts, & trigger colliders
  2. // - RiceCake & Josh
  3. //Issues: Crosshair aim distance will not always work correctly on titans if grouped together
  4. //Things to test for: Ghost hooks, clipping through titans (unlikely)
  5.  
  6. public class Bullet : Photon.MonoBehaviour
  7. {
  8. //...
  9. public TITAN myTitan;
  10.  
  11. private void OnDestroy()
  12. {
  13. //...
  14. //toggle titan once hook is destroyed
  15. if (this.myTitan != null)
  16. {
  17. this.myTitan.isHooked = false;
  18. }
  19. UnityEngine.Object.Destroy(this.rope);
  20. }
  21.  
  22. //called in FixedUpdate under "else if (this.phase == 0)"
  23. public void checkTitan()
  24. {
  25. GameObject main = Camera.main.GetComponent<IN_GAME_MAIN_CAMERA>().main_object;
  26. if (main != null && this.master != null && this.master == main)
  27. {
  28. LayerMask mask = ((int)1) << LayerMask.NameToLayer("PlayerAttackBox");
  29. RaycastHit hit;
  30. if (Physics.Raycast(base.transform.position, this.velocity, out hit, 10f, mask.value))
  31. {
  32. Collider hitCollider = hit.collider;
  33. if (hitCollider.name.Contains("PlayerDetectorRC"))
  34. {
  35. TITAN titan = hitCollider.transform.root.gameObject.GetComponent<TITAN>();
  36. if (titan != null)
  37. {
  38. if (this.myTitan == null)
  39. {
  40. this.myTitan = titan;
  41. this.myTitan.isHooked = true;
  42. }
  43. else if (this.myTitan != titan)
  44. {
  45. this.myTitan.isHooked = false;
  46. this.myTitan = titan;
  47. this.myTitan.isHooked = true;
  48. }
  49. }
  50. }
  51. }
  52. }
  53. }
  54. }
  55.  
  56. public class HERO : Photon.MonoBehaviour
  57. {
  58. //...
  59. public List<TITAN> myTitans;
  60.  
  61. //called in showAimUI under "else"
  62. public void checkTitan()
  63. {
  64. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  65. LayerMask mask = ((int)1) << LayerMask.NameToLayer("PlayerAttackBox");
  66. LayerMask mask2 = ((int)1) << LayerMask.NameToLayer("Ground");
  67. LayerMask mask3 = ((int)1) << LayerMask.NameToLayer("EnemyBox");
  68. LayerMask mask4 = (mask | mask2) | mask3;
  69. RaycastHit[] hits = Physics.RaycastAll(ray, 180f, mask4.value);
  70. List<RaycastHit> sortedHits = new List<RaycastHit>();
  71. List<TITAN> currentTitans = new List<TITAN>();
  72. foreach (RaycastHit hit in hits)
  73. {
  74. sortedHits.Add(hit);
  75. }
  76. sortedHits.Sort((x,y) => x.distance.CompareTo(y.distance));
  77. float maxDistance = 180f;
  78. for (int i = 0; i < sortedHits.Count; i++)
  79. {
  80. GameObject hitObject = sortedHits[i].collider.gameObject;
  81. if (hitObject.layer == 16)
  82. {
  83. if (hitObject.name.Contains("PlayerDetectorRC") && sortedHits[i].distance < maxDistance)
  84. {
  85. maxDistance -= 60f;
  86. if (maxDistance <= 60f)
  87. {
  88. i = sortedHits.Count;
  89. }
  90. TITAN titan = hitObject.transform.root.gameObject.GetComponent<TITAN>();
  91. if (titan != null)
  92. {
  93. currentTitans.Add(titan);
  94. }
  95. }
  96. }
  97. else
  98. {
  99. i = sortedHits.Count;
  100. }
  101. }
  102. foreach (TITAN oldTitan in this.myTitans)
  103. {
  104. if (!currentTitans.Contains(oldTitan))
  105. {
  106. oldTitan.isLook = false;
  107. }
  108. }
  109. foreach (TITAN newTitan in currentTitans)
  110. {
  111. newTitan.isLook = true;
  112. }
  113. this.myTitans = currentTitans;
  114. }
  115. }
  116.  
  117. public class TITAN : Photon.MonoBehaviour
  118. {
  119. //...
  120. public bool colliderEnabled;
  121. public bool isHooked;
  122. public bool isLook;
  123. public TitanTrigger myTitanTrigger;
  124. public List<Collider> baseColliders;
  125.  
  126. private void Start()
  127. {
  128. //...
  129.  
  130. //cache colliders that will be toggled (all but AABB, the main movement capsule)
  131. this.baseColliders = new List<Collider>();
  132.  
  133. foreach (Collider childCollider in base.GetComponentsInChildren<Collider>())
  134. {
  135. if (childCollider.name != "AABB")
  136. {
  137. this.baseColliders.Add(childCollider);
  138. }
  139. }
  140.  
  141. //create a new trigger collider to completely encompass the titan
  142. GameObject obj = new GameObject();
  143. obj.name = "PlayerDetectorRC";
  144. CapsuleCollider triggerCollider = obj.AddComponent<CapsuleCollider>();
  145. CapsuleCollider referenceCollider = base.transform.Find("AABB").GetComponent<CapsuleCollider>();
  146. triggerCollider.center = referenceCollider.center;
  147. triggerCollider.radius = Math.Abs(base.transform.Find("Amarture/Core/Controller_Body/hip/spine/chest/neck/head").position.y - base.transform.position.y);
  148. triggerCollider.height = referenceCollider.height * 1.2f;
  149. triggerCollider.material = referenceCollider.material;
  150. triggerCollider.isTrigger = true;
  151. triggerCollider.name = "PlayerDetectorRC";
  152. this.myTitanTrigger = obj.AddComponent<TitanTrigger>();
  153. this.myTitanTrigger.isCollide = false;
  154. obj.layer = 16;
  155. obj.transform.parent = base.transform.Find("AABB");
  156. obj.transform.localPosition = new Vector3(0f, 0f, 0f);
  157. this.colliderEnabled = true;
  158. this.isHooked = false;
  159. this.isLook = false;
  160. }
  161.  
  162. //called in lateUpdate
  163. //compares hook & player trigger data to determine collider settings
  164. public void updateCollider()
  165. {
  166. if (this.colliderEnabled)
  167. {
  168. if (!this.isHooked && !this.myTitanTrigger.isCollide && !this.isLook)
  169. {
  170. foreach (Collider collider in this.baseColliders)
  171. {
  172. collider.enabled = false;
  173. }
  174. this.colliderEnabled = false;
  175. }
  176. }
  177. else if (this.isHooked || this.myTitanTrigger.isCollide || this.isLook)
  178. {
  179. foreach (Collider collider in this.baseColliders)
  180. {
  181. collider.enabled = true;
  182. }
  183. this.colliderEnabled = true;
  184. }
  185. }
  186. }
  187.  
  188. public class TitanTrigger : MonoBehaviour
  189. {
  190. //detects if player is near enough to justify colliders
  191. public bool isCollide;
  192. private void OnTriggerEnter(Collider other)
  193. {
  194. GameObject obj = other.transform.root.gameObject;
  195. if (obj.layer == 8)
  196. {
  197. GameObject myPlayer = Camera.main.GetComponent<IN_GAME_MAIN_CAMERA>().main_object;
  198. if (myPlayer != null && myPlayer == obj)
  199. {
  200. this.isCollide = true;
  201. }
  202. }
  203. }
  204.  
  205. private void OnTriggerExit(Collider other)
  206. {
  207. GameObject obj = other.transform.root.gameObject;
  208. if (obj.layer == 8)
  209. {
  210. GameObject myPlayer = Camera.main.GetComponent<IN_GAME_MAIN_CAMERA>().main_object;
  211. if (myPlayer != null && myPlayer == obj)
  212. {
  213. this.isCollide = false;
  214. }
  215. }
  216. }
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement