/PlayerController.cs

https://bitbucket.org/ArtyomGod/gamedev-escape · C# · 263 lines · 233 code · 30 blank · 0 comment · 24 complexity · f254e6e3a6d72c9c2c60237605af8b84 MD5 · raw file

  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.UI;
  4. public enum Side
  5. {
  6. Right = 1,
  7. Neutral = 0,
  8. Left = -1
  9. }
  10. public class PlayerController : MonoBehaviour
  11. {
  12. public int Lives = 3;
  13. public float speed = 5f;
  14. public float jumpSpeed = 8f;
  15. public int PartsOfGunCollected = 0;
  16. public GameObject[] Hearts;
  17. private float movement = 0f;
  18. private Rigidbody2D rigidBody;
  19. bool Grounded;
  20. private Vector3 _origPos;
  21. private Side FaceTo = Side.Right;
  22. Animator AnimCharacter;
  23. GameObject Character;
  24. SpriteRenderer CharacterSpriteRenderer;
  25. private Level1Controller level1Controller;
  26. public bool HasSuperGun = false;
  27. public bool ReadyToBoss = false;
  28. private Vector3 BagOriginPos;
  29. private Quaternion BagOriginRotate;
  30. public bool IsAndroidControll = true;
  31. private GameObject Bag;
  32. public bool DoJump { get; set; }
  33. void OnCollisionStay2D(Collision2D collider)
  34. {
  35. CheckIfGrounded();
  36. }
  37. void OnCollisionExit2D(Collision2D collider)
  38. {
  39. Grounded = false;
  40. }
  41. private void CheckIfGrounded()
  42. {
  43. RaycastHit2D[] hits;
  44. Vector2 positionToCheck = transform.position;
  45. hits = Physics2D.RaycastAll(positionToCheck, new Vector2(0, -1), 0.01f);
  46. if (hits.Length > 0)
  47. {
  48. Grounded = true;
  49. }
  50. }
  51. void Start()
  52. {
  53. Character = GameObject.Find("Character");
  54. Bag = GameObject.Find("Bag");
  55. BagOriginPos = Bag.transform.position;
  56. BagOriginRotate = Bag.transform.rotation;
  57. AnimCharacter = Character.GetComponent<Animator>();
  58. CharacterSpriteRenderer = Character.GetComponent<SpriteRenderer>();
  59. _origPos = transform.position;
  60. rigidBody = GetComponent<Rigidbody2D>();
  61. level1Controller = GameObject.Find("LevelControll").GetComponent<Level1Controller>();
  62. }
  63. public void MoveHorizontal(int currMovement)
  64. {
  65. movement = currMovement;
  66. }
  67. public void StopMoveHorizontal()
  68. {
  69. movement = 0;
  70. }
  71. void Update()
  72. {
  73. Side newFaceTo = Side.Neutral;
  74. if(!IsAndroidControll)
  75. {
  76. movement = Input.GetAxis("Horizontal");
  77. }
  78. if (movement > 0)
  79. {
  80. AnimCharacter.SetBool("Run", true);
  81. AnimCharacter.SetBool("Idle", false);
  82. newFaceTo = Side.Right;
  83. rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
  84. }
  85. else if (movement < 0)
  86. {
  87. AnimCharacter.SetBool("Run", true);
  88. AnimCharacter.SetBool("Idle", false);
  89. newFaceTo = Side.Left;
  90. rigidBody.velocity = new Vector2(movement * speed, rigidBody.velocity.y);
  91. }
  92. else
  93. {
  94. AnimCharacter.SetBool("Run", false);
  95. AnimCharacter.SetBool("Idle", true);
  96. rigidBody.velocity = new Vector2(0, rigidBody.velocity.y);
  97. }
  98. FlipCharacter(newFaceTo);
  99. if ((Input.GetButtonDown("Jump") || DoJump) && Grounded)
  100. {
  101. rigidBody.velocity = new Vector2(rigidBody.velocity.x, jumpSpeed);
  102. }
  103. if(Lives <= 0)
  104. {
  105. if (AnimCharacter.GetCurrentAnimatorStateInfo(0).IsName("Death"))
  106. {
  107. Kill();
  108. }
  109. }
  110. if(HasSuperGun)
  111. {
  112. ReadyToBoss = true;
  113. FlipGun(true);
  114. HasSuperGun = false;
  115. }
  116. }
  117. void OnCollisionEnter2D(Collision2D col)
  118. {
  119. if (col.gameObject.tag == "Bullet" || col.gameObject.tag == "GreenAlien")
  120. {
  121. AnimCharacter.SetBool("Run", false);
  122. AnimCharacter.SetBool("Idle", false);
  123. AnimCharacter.SetBool("Hurt", true);
  124. Debug.Log(Lives);
  125. DecrementLives();
  126. if (Lives <= 0)
  127. {
  128. AnimCharacter.SetBool("Run", false);
  129. AnimCharacter.SetBool("Idle", false);
  130. AnimCharacter.SetBool("Hurt", false);
  131. AnimCharacter.SetBool("Death", true);
  132. if (AnimCharacter.GetCurrentAnimatorStateInfo(0).IsName("Death"))
  133. {
  134. Kill();
  135. }
  136. }
  137. }
  138. AnimCharacter.SetBool("Hurt", false);
  139. }
  140. private void FlipCharacter(Side newValue)
  141. {
  142. if (newValue != FaceTo && newValue != Side.Neutral)
  143. {
  144. FaceTo = newValue;
  145. gameObject.transform.Find("Weapon").GetComponent<Weapon>().SideToShoot = FaceTo;
  146. transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
  147. }
  148. }
  149. private void ChangeCollorOfCharacter()
  150. {
  151. switch (Lives)
  152. {
  153. case 3:
  154. CharacterSpriteRenderer.color = new Color(255, 255, 255, 255);
  155. break;
  156. case 2:
  157. CharacterSpriteRenderer.color = new Color(255, 136, 165, 255);
  158. break;
  159. case 1:
  160. CharacterSpriteRenderer.color = new Color(255, 69, 114, 255);
  161. break;
  162. case 0:
  163. CharacterSpriteRenderer.color = new Color(255, 0, 62, 255);
  164. break;
  165. }
  166. }
  167. private void DisableHearts()
  168. {
  169. switch (Lives)
  170. {
  171. case 3:
  172. break;
  173. case 2:
  174. Hearts[2].SetActive(false);
  175. break;
  176. case 1:
  177. Hearts[1].SetActive(false);
  178. break;
  179. case 0:
  180. Hearts[0].SetActive(false);
  181. break;
  182. }
  183. }
  184. private void FlipGun(bool placeHorizontal)
  185. {
  186. if(placeHorizontal)
  187. {
  188. Bag.transform.rotation = Quaternion.Euler(0, 0, -90);
  189. Bag.transform.position = new Vector3(Bag.transform.position.x, -0.15f, 0f);
  190. }
  191. else
  192. {
  193. Bag.transform.rotation = BagOriginRotate;
  194. Bag.transform.position = BagOriginPos;
  195. }
  196. }
  197. private void Kill()
  198. {
  199. gameObject.SetActive(false);
  200. level1Controller.Reset();
  201. }
  202. public void DecrementLives()
  203. {
  204. Lives--;
  205. ChangeCollorOfCharacter();
  206. DisableHearts();
  207. }
  208. public void Reset()
  209. {
  210. ReadyToBoss = false;
  211. HasSuperGun = false;
  212. FlipGun(false);
  213. Lives = 3;
  214. PartsOfGunCollected = 0;
  215. ResetHearts();
  216. ChangeCollorOfCharacter();
  217. ResetAnimation();
  218. }
  219. public void ResetHearts()
  220. {
  221. foreach(var heart in Hearts)
  222. {
  223. heart.SetActive(true);
  224. }
  225. }
  226. public void ResetAnimation()
  227. {
  228. AnimCharacter.SetBool("Run", false);
  229. AnimCharacter.SetBool("Idle", false);
  230. AnimCharacter.SetBool("Hurt", false);
  231. AnimCharacter.SetBool("Death", false);
  232. }
  233. }