GameView.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. public class GameView : PinBallUIBase
  7. {
  8. /// <summary>左转按钮 </summary>
  9. public GameObject btn_Left;
  10. /// <summary>右转按钮 </summary>
  11. public GameObject btn_Right;
  12. /// <summary>加满子弹 </summary>
  13. public GameObject btn_AddBullet;
  14. /// <summary>取消发射按钮 </summary>
  15. public Image btn_CancelShoot;
  16. public GameObject btn_Return;
  17. /// <summary>倒计时文本 </summary>
  18. public Text text_downTime;
  19. /// <summary>子弹数量文本 </summary>
  20. public Text text_ArrowCount;
  21. /// <summary>目标数量文本 </summary>
  22. public Text text_TargetCount;
  23. /// <summary>倒计时数量 </summary>
  24. public int int_ShowTime;
  25. /// <summary>子弹数量 </summary>
  26. public int int_bulletCount;
  27. /// <summary>剩余目标 </summary>
  28. public int int_tangetNum;
  29. /// <summary>目标总数量 </summary>
  30. public int int_tangetCount;
  31. /// <summary>是否倒计时 </summary>
  32. public bool isShowTime;
  33. /// <summary>时间累计 </summary>
  34. private float timeing;
  35. /// <summary>
  36. /// 测试面板
  37. /// </summary>
  38. public GameObject contorlPanel;
  39. private GameObject btn_Contorl;
  40. /// <summary>准心开关</summary>
  41. public Toggle toggle_IsAni;
  42. public Toggle tgl_isShowGun; //是否显示枪模型
  43. /// <summary>
  44. /// 摄像机距离 调整测试
  45. /// </summary>
  46. private Text text_CameraDis;
  47. private Slider slider_CameraDis;
  48. /// <summary>
  49. /// 气球飞行速度
  50. /// </summary>
  51. private Text text_BalloonFlySpeed;
  52. private Slider slider_BalloonFlySpeed;
  53. //子弹相关
  54. private InputField input_Mass;
  55. private InputField input_Force;
  56. private Toggle useGravity;
  57. private Text text_BulletBounciness;
  58. private Slider slider_BulletBounciness;
  59. protected override void Init()
  60. {
  61. base.Init();
  62. uILevel = PinBallUILevel.Content;
  63. btn_Left = transform.Find("btn_Left").gameObject;
  64. btn_Right = transform.Find("btn_Right").gameObject;
  65. btn_AddBullet = transform.Find("btn_AddBullet").gameObject;
  66. btn_Return = transform.Find("btn_Return").gameObject;
  67. btn_CancelShoot = transform.Find("btn_CancelShoot").GetComponent<Image>();
  68. Transform hintPanel = transform.Find("HintPanel");
  69. text_downTime = hintPanel.Find("text_downTime").GetComponent<Text>();
  70. text_ArrowCount = hintPanel.Find("text_ArrowCount").GetComponent<Text>();
  71. text_TargetCount = hintPanel.Find("text_TargetCount").GetComponent<Text>();
  72. UIEventListener.Get(btn_Left).onClick = OnClick;
  73. UIEventListener.Get(btn_Right).onClick = OnClick;
  74. UIEventListener.Get(btn_AddBullet).onClick = OnClick;
  75. UIEventListener.Get(btn_Return).onClick = OnClick;
  76. UIEventListener.Get(btn_CancelShoot.gameObject).onEnter = OnPointerClick;
  77. UIEventListener.Get(btn_CancelShoot.gameObject).onExit = OnExit;
  78. //测试项
  79. contorlPanel = transform.Find("ContorlPanel").gameObject;
  80. btn_Contorl = transform.Find("btn_Contorl").gameObject;
  81. text_CameraDis = contorlPanel.transform.Find("Text_CameraDis").GetComponent<Text>();
  82. slider_CameraDis = contorlPanel.transform.Find("Slider_CameraDis").GetComponent<Slider>();
  83. slider_CameraDis.onValueChanged.AddListener(SliderCameraDis);
  84. slider_CameraDis.minValue = 5;
  85. slider_CameraDis.maxValue = 16;
  86. text_BalloonFlySpeed = contorlPanel.transform.Find("Text_BalloonFlySpeed").GetComponent<Text>();
  87. slider_BalloonFlySpeed = contorlPanel.transform.Find("Slider_BalloonFlySpeed").GetComponent<Slider>();
  88. slider_BalloonFlySpeed.onValueChanged.AddListener(SliderBalloonFlySpeed);
  89. UIEventListener.Get(btn_Contorl.gameObject).onClick = OnTestClick;
  90. input_Mass = contorlPanel.transform.Find("InputField_BulletMass").GetComponent<InputField>();
  91. input_Force = contorlPanel.transform.Find("InputField_BulletForce").GetComponent<InputField>();
  92. useGravity = contorlPanel.transform.Find("Tgl_useGravity").GetComponent<Toggle>();
  93. UIEventListener.Get(useGravity.gameObject).onClick = OnTestClick;
  94. input_Mass.onEndEdit.AddListener(OnEndEditMass);
  95. input_Force.onEndEdit.AddListener(OnEndEditForce);
  96. input_Mass.text = GameInstantiateData.Instance.bullet_Mass.ToString();
  97. input_Force.text = GameInstantiateData.Instance.bullet_Force.ToString();
  98. useGravity.isOn = GameInstantiateData.Instance.bullet_useGravity;
  99. text_BulletBounciness = contorlPanel.transform.Find("Text_BulletBounciness").GetComponent<Text>();
  100. slider_BulletBounciness = contorlPanel.transform.Find("Slider_BulletBounciness").GetComponent<Slider>();
  101. slider_BulletBounciness.onValueChanged.AddListener(ChangeBulletBounciness);
  102. toggle_IsAni = contorlPanel.transform.Find("toggle_IsAni").GetComponent<Toggle>();
  103. tgl_isShowGun = contorlPanel.transform.Find("toggle_IsShowGun").GetComponent<Toggle>();
  104. UIEventListener.Get(toggle_IsAni.gameObject).onClick = OnTestClick;
  105. UIEventListener.Get(tgl_isShowGun.gameObject).onClick = OnTestClick;
  106. }
  107. private void ChangeBulletBounciness(float value)
  108. {
  109. text_BulletBounciness.text = "子弹弹力:" + value;
  110. GameInstantiateData.Instance.bullet_Bounciness = value;
  111. }
  112. /// <summary>
  113. /// 控制面本测试按钮功能
  114. /// </summary>
  115. /// <param name="go"></param>
  116. private void OnTestClick(GameObject go)
  117. {
  118. if (go.name.Contains("btn_Contorl"))
  119. {
  120. contorlPanel.SetActive(!contorlPanel.activeSelf);
  121. }
  122. else if (go.name.CompareTo("Tgl_useGravity") == 0)
  123. {
  124. GameInstantiateData.Instance.bullet_useGravity = useGravity.isOn;
  125. }
  126. else if (go.name.Contains("toggle_IsAni"))
  127. {
  128. bool value = toggle_IsAni.isOn;
  129. LauncherCtrl.instance.ShowAni(value);
  130. }
  131. else if (go.name.Contains("toggle_IsShowGun"))
  132. {
  133. bool value = tgl_isShowGun.isOn;
  134. LauncherCtrl.instance.ShowGunModel(value);
  135. }
  136. }
  137. /// <summary>
  138. /// 子弹质量修改
  139. /// </summary>
  140. /// <param name="value"></param>
  141. private void OnEndEditMass(string value)
  142. {
  143. GameInstantiateData.Instance.bullet_Mass = float.Parse(value);
  144. }
  145. /// <summary>
  146. /// 子弹 发射崇力 修改
  147. /// </summary>
  148. /// <param name="value"></param>
  149. private void OnEndEditForce(string value)
  150. {
  151. GameInstantiateData.Instance.bullet_Force = int.Parse(value);
  152. }
  153. /// <summary>
  154. /// 按钮点击
  155. /// </summary>
  156. /// <param name="go"></param>
  157. private void OnClick(GameObject go)
  158. {
  159. if (go.name.Contains("btn_Left"))
  160. {
  161. GameMgr.instance.RotateCastle(1);
  162. }
  163. else if (go.name.Contains("btn_Right"))
  164. {
  165. GameMgr.instance.RotateCastle(-1);
  166. }
  167. else if (go.name.Contains("btn_AddBullet"))
  168. {
  169. GameMgr.instance.AddBulletCount();
  170. }
  171. else if (go.name.Contains("btn_Return"))
  172. {
  173. PinBallUIManager.instance.DestroyAllUI();
  174. PinBallUIManager.instance.ShowUI(new object[] { "LoadingView", "Start" });
  175. }
  176. else
  177. {
  178. Debug.LogError(go.name + "未找到注册方法");
  179. }
  180. }
  181. private void SliderBalloonFlySpeed(float value)
  182. {
  183. GameInstantiateData.Instance.int_balloonFlySpeed = (int)value;
  184. text_BalloonFlySpeed.text = "气球飞行速度" + value;
  185. }
  186. private void SliderCameraDis(float value)
  187. {
  188. //print(value);
  189. int v = (int)value;
  190. text_CameraDis.text = "摄像机距离城堡位置:" + v;
  191. if (GameInstantiateData.Instance.int_CameraToCastleDis == v)
  192. {
  193. return;
  194. }
  195. // int dis = (int)Vector3.Distance(LauncherCtrl.instance.launcherCamera.transform.position, GameMgr.instance.transform.position);
  196. Vector3 pos = Vector3.MoveTowards(LauncherCtrl.instance.launcherCamera.transform.position,
  197. GameMgr.instance.transform.position, GameInstantiateData.Instance.int_CameraToCastleDis - value);
  198. LauncherCtrl.instance.launcherCamera.transform.position = pos;
  199. GameInstantiateData.Instance.int_CameraToCastleDis = v;
  200. }
  201. protected override void ShowUIOpt(object[] args)
  202. {
  203. //传值- 开始倒计时,游戏倒计时时间,子弹数量,目标数量
  204. isShowTime = (bool)args[0];
  205. int_ShowTime = (int)args[1];
  206. int_bulletCount = (int)args[2];
  207. int_tangetNum = int_tangetCount = (int)args[3];
  208. SetTextDownTime();
  209. SetTextBulletCount();
  210. SetTextTargetCount();
  211. GameInstantiateData.Instance.int_CameraToCastleDis =
  212. (int)Vector3.Distance(LauncherCtrl.instance.launcherCamera.transform.position, GameMgr.instance.transform.position);
  213. // text_CameraDis.text = "摄像机距离城堡位置:" + int_CameraDisDis;
  214. slider_CameraDis.value = GameInstantiateData.Instance.int_CameraToCastleDis;
  215. slider_BalloonFlySpeed.value = GameInstantiateData.Instance.int_balloonFlySpeed;
  216. }
  217. protected override void Broadcast(object[] args)
  218. {
  219. //args[0] 是否倒计时 args[1] 类型
  220. isShowTime = (bool)args[0];
  221. if (isShowTime)
  222. {
  223. // 类型,1——目标数量,2——子弹数量 3——力量计时
  224. int type = (int)args[1];
  225. if (type == 1)
  226. {
  227. int_tangetNum = (int)args[2];
  228. SetTextTargetCount();
  229. }
  230. else if(type == 2)
  231. {
  232. int_bulletCount = (int)args[2];
  233. SetTextBulletCount();
  234. }
  235. else if (type == 3)
  236. {
  237. }
  238. }
  239. else
  240. {
  241. }
  242. }
  243. protected override void HideUIOpt()
  244. {
  245. }
  246. /// <summary>
  247. /// 进入按钮
  248. /// </summary>
  249. /// <param name="go"></param>
  250. private void OnPointerClick(GameObject go)
  251. {
  252. if (go.name.Contains("btn_CancelShoot"))
  253. {
  254. btn_CancelShoot.color = Color.red;
  255. }
  256. }
  257. /// <summary>
  258. /// 退出按钮
  259. /// </summary>
  260. /// <param name="go"></param>
  261. private void OnExit(GameObject go)
  262. {
  263. if (go.name.Contains("btn_CancelShoot"))
  264. {
  265. btn_CancelShoot.color = Color.white;
  266. }
  267. }
  268. /// <summary>
  269. /// 设置倒计时
  270. /// </summary>
  271. private void SetTextDownTime()
  272. {
  273. int m = int_ShowTime / 60;
  274. string sm = m >= 10 ? (m).ToString() : "0" + m;
  275. int s = int_ShowTime % 60;
  276. string ss = s >= 10 ? s.ToString() : "0" + s;
  277. string time = sm + ":" + ss;
  278. text_downTime.text = time;
  279. }
  280. /// <summary>
  281. /// 设置文本,子弹数量
  282. /// </summary>
  283. private void SetTextBulletCount()
  284. {
  285. text_ArrowCount.text = int_bulletCount.ToString();
  286. if (int_bulletCount <= 0 && int_ShowTime >= 10)
  287. {
  288. Invoke("GameOver", 1f);
  289. }
  290. }
  291. /// <summary>
  292. /// 设置文本,目标数量
  293. /// </summary>
  294. private void SetTextTargetCount()
  295. {
  296. text_TargetCount.text = int_tangetNum + "/" + int_tangetCount;
  297. }
  298. private void GameOver()
  299. {
  300. GameMgr.instance.GameOver();
  301. }
  302. private void Update()
  303. {
  304. if (isShowTime)
  305. {
  306. timeing += Time.deltaTime;
  307. if (timeing >= 1f)
  308. {
  309. timeing = 0;
  310. int_ShowTime -= 1;
  311. if (int_ShowTime < 0)
  312. {
  313. isShowTime = false;
  314. Debug.Log("时间结束");
  315. GameOver();
  316. }
  317. else
  318. {
  319. SetTextDownTime();
  320. }
  321. }
  322. }
  323. //if (isShowAni)
  324. //{
  325. // Vector2 uguiPos = Vector2.zero;
  326. // if (isAniGun)
  327. // {
  328. // //十字准心在枪口
  329. // // img_Anim.transform.localPosition
  330. // Vector3 viewportPos = LauncherCtrl.instance.launcherCamera.WorldToViewportPoint(LauncherCtrl.instance.gunPoint.transform.position);
  331. // //获得 (枪口在摄像机的屏幕位置 - 初始中点位置) * 屏幕大小1280 * 摄像机的摄像角度180 / 100
  332. // uguiPos.x = (viewportPos.x - 0.5f) * 1280 * 180 / 100; // canvasRtm.sizeDelta.x;
  333. // uguiPos.y = (viewportPos.y - 0.3f) * 720 * 180 / 100;// canvasRtm.sizeDelta.y;
  334. // img_Anim.transform.localPosition = uguiPos;
  335. // //uguiPos.x = (viewportPos.x) * canvasRtm.sizeDelta.x;
  336. // //uguiPos.y = (viewportPos.y) * canvasRtm.sizeDelta.y;
  337. // // img_Anim.transform.localPosition = uguiPos;
  338. // // print(viewportPos);
  339. // }
  340. // else
  341. // {
  342. // //十字准心在目标上
  343. // float maxDistance = 100;
  344. // int layerMask = 1 << 8; //TargetLayerMask
  345. // RaycastHit raycastHit;
  346. // Ray ray = new Ray(LauncherCtrl.instance.gunPoint.transform.position, LauncherCtrl.instance.transform.TransformDirection(Vector3.forward));
  347. // Physics.Raycast(ray.origin, ray.direction, out raycastHit, maxDistance, layerMask);
  348. // if (raycastHit.collider != null)
  349. // {
  350. // Vector3 viewportPos = LauncherCtrl.instance.launcherCamera.WorldToViewportPoint(raycastHit.point);
  351. // uguiPos.x = (viewportPos.x - 0.5f) * 1280;// * 180 / 100; // canvasRtm.sizeDelta.x;
  352. // uguiPos.y = (viewportPos.y - 0.5f) * 720;// * 180 / 100;// canvasRtm.sizeDelta.y;
  353. // img_Anim.transform.localPosition = uguiPos;
  354. // }
  355. // else
  356. // {
  357. // //img_Anim.gameObject.SetActive(false);
  358. // img_Anim.transform.localPosition = vec_AinPos;
  359. // }
  360. // }
  361. //}
  362. }
  363. }