Flower.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.Serialization;
  4. using System.Collections;
  5. public enum OperateType
  6. {
  7. Ripping,
  8. Watering,
  9. Fertilizing,
  10. }
  11. public class Flower : MonoBehaviour
  12. {
  13. #region 变量
  14. #region 引用变量
  15. private Transform ScoreHudTra;
  16. private Transform PhaseHudTra;
  17. private Transform OperateHudTra;
  18. private GameObject GameA;
  19. private SpriteRenderer FlagSr;
  20. private SpriteRenderer OperateSr;
  21. #endregion
  22. private int _Phase;
  23. private Text PhaseLabel;
  24. private Text OperateLabel;
  25. private OperateType OperateType;
  26. public int Phase
  27. {
  28. get { return _Phase; }
  29. set
  30. {
  31. _Phase = value;
  32. OnPhaseChange();
  33. }
  34. }
  35. #endregion
  36. private void Awake()
  37. {
  38. #region 引用变量赋值
  39. Hashtable hashtable = new Hashtable();
  40. Transform[] transforms = GetComponentsInChildren<Transform>(true);
  41. for (int i = 0; i < transforms.Length; i++)
  42. {
  43. hashtable.Add(transforms[i].name, transforms[i]);
  44. }
  45. ScoreHudTra = ((Transform) hashtable["ScoreHudTra"]);
  46. PhaseHudTra = ((Transform)hashtable["PhaseHudTra"]);
  47. OperateHudTra = ((Transform) hashtable["OperateHudTra"]);
  48. GameA = ((Transform)hashtable["GameA"]).gameObject;
  49. FlagSr = ((Transform) hashtable["FlagSr"]).GetComponent<SpriteRenderer>();
  50. OperateSr = ((Transform) hashtable["OperateSr"]).GetComponent<SpriteRenderer>();
  51. #endregion
  52. GameA.SetActive(false);
  53. }
  54. private void FixedUpdate()
  55. {
  56. }
  57. public void MarkAsFirst()
  58. {
  59. FlagSr.color = ChangeAlpha(FlagSr.color, 1);
  60. OperateSr.color = ChangeAlpha(OperateSr.color, 1);
  61. OperateLabel.color = ChangeAlpha(OperateLabel.color, 1);
  62. FlagSr.gameObject.SetActive(true);
  63. OperateSr.gameObject.SetActive(true);
  64. OperateLabel.gameObject.SetActive(true);
  65. }
  66. public void MarkAsSecond()
  67. {
  68. FlagSr.color = ChangeAlpha(FlagSr.color, 1);
  69. OperateSr.color = ChangeAlpha(OperateSr.color, 1);
  70. OperateLabel.color = ChangeAlpha(OperateLabel.color, 1);
  71. FlagSr.gameObject.SetActive(false);
  72. OperateSr.gameObject.SetActive(true);
  73. OperateLabel.gameObject.SetActive(true);
  74. }
  75. public void MarkAsStandby()
  76. {
  77. FlagSr.color = ChangeAlpha(FlagSr.color, 0.5f);
  78. OperateSr.color = ChangeAlpha(OperateSr.color, 0.5f);
  79. OperateLabel.color = ChangeAlpha(OperateLabel.color, 0.5f);
  80. FlagSr.gameObject.SetActive(false);
  81. OperateSr.gameObject.SetActive(true);
  82. OperateLabel.gameObject.SetActive(true);
  83. }
  84. public void OnGameOverA()
  85. {
  86. GameA.SetActive(false);
  87. ManagerResource.Ins.Save(PhaseLabel.gameObject);
  88. ManagerResource.Ins.Save(OperateLabel.gameObject);
  89. }
  90. public void OnGameBeginA()
  91. {
  92. GameA.SetActive(true);
  93. PhaseLabel = ManagerResource.Ins.GetHUD(Color.black, Camera.main.WorldToScreenPoint(PhaseHudTra.position), true);
  94. OperateLabel = ManagerResource.Ins.GetHUD(Color.black, Camera.main.WorldToScreenPoint(OperateHudTra.position), true);
  95. Plant();
  96. }
  97. public void NeedOperate(int sequence)
  98. {
  99. float random = Random.Range(0f, 1f);
  100. if (random <= 0.3333333f)
  101. {
  102. NeedWatering();
  103. }
  104. else if (random <= 0.6666666f)
  105. {
  106. NeedRipping();
  107. }
  108. else
  109. {
  110. NeedFertilizing();
  111. }
  112. if (sequence == 0)
  113. {
  114. MarkAsFirst();
  115. }
  116. else if (sequence == 1)
  117. {
  118. MarkAsSecond();
  119. }
  120. else
  121. {
  122. MarkAsStandby();
  123. }
  124. }
  125. public bool Operate(OperateType operateType)
  126. {
  127. if (operateType != OperateType) //错误的操作
  128. {
  129. return false;
  130. }
  131. else //操作正确 植物升级
  132. {
  133. Phase++;
  134. FlagSr.gameObject.SetActive(false);
  135. OperateSr.gameObject.SetActive(false);
  136. OperateLabel.gameObject.SetActive(false);
  137. return true;
  138. }
  139. }
  140. private void Plant()
  141. {
  142. Phase = 0;
  143. FlagSr.gameObject.SetActive(false);
  144. OperateSr.gameObject.SetActive(false);
  145. OperateLabel.gameObject.SetActive(false);
  146. }
  147. private void Harvest()
  148. {
  149. ManagerResource.Ins.GetHUD(Color.yellow, Camera.main.WorldToScreenPoint(ScoreHudTra.position), false, "得分+1");
  150. ManagerLittleGame.Ins.Scoring(1);
  151. Plant();
  152. }
  153. private void NeedRipping()
  154. {
  155. OperateType = OperateType.Ripping;
  156. OperateLabel.text = "松土";
  157. }
  158. private void NeedWatering()
  159. {
  160. OperateType = OperateType.Watering;
  161. OperateLabel.text = "浇水";
  162. }
  163. private void NeedFertilizing()
  164. {
  165. OperateType = OperateType.Fertilizing;
  166. OperateLabel.text = "施肥";
  167. }
  168. private void OnPhaseChange()
  169. {
  170. if (Phase == 0)
  171. {
  172. PhaseLabel.text = "阶段0";
  173. }
  174. else if (Phase == 1)
  175. {
  176. PhaseLabel.text = "阶段1";
  177. }
  178. else if (Phase == 2)
  179. {
  180. PhaseLabel.text = "阶段2";
  181. }
  182. else if (Phase == 3)
  183. {
  184. Harvest();
  185. }
  186. }
  187. private Color ChangeAlpha(Color color, float alpha)
  188. {
  189. return new Color(color.r, color.g, color.b, alpha);
  190. }
  191. }