AutoResetView.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. using UnityEngine.SceneManagement;
  7. /*
  8. 按下自动校准键出现倒计时3秒,同时伴有文字提示用户“三秒后即将开始校准,
  9. 请扶稳弓箭。”倒计时3秒后出现一个进度条也是三秒,用户在3秒内自己尽量扶稳弓即可,
  10. 进度条完成后,取一个平均值作为校准值。
  11. */
  12. public class AutoResetView : MonoBehaviour
  13. {
  14. public static AutoResetView ins;
  15. public static Action onInstantiate;
  16. public static void DoIdentity() {
  17. //if (InfraredDemo.running) return;
  18. if (SB_EventSystem.ins && SB_EventSystem.ins.simulateMouseIsAwaked) return;
  19. if (SceneManager.GetActiveScene().name.StartsWith("GameDouble"))
  20. {
  21. if (GameObject.Find("AutoResetViewNewLeft")) return;
  22. GameObject resetView = Instantiate(Resources.Load<GameObject>("AutoResetViewNew"));
  23. resetView.name = "AutoResetViewNewLeft";
  24. AutoResetViewNew autoResetViewNewScript = resetView.GetComponent<AutoResetViewNew>();
  25. //九轴双人也用新的这个
  26. autoResetViewNewScript.setTextKey("new-user-guider_tip_视角归位-瞄准-infraredD");
  27. autoResetViewNewScript.setPosLeft();
  28. autoResetViewNewScript.action_OnDestroy += () =>
  29. {
  30. //使用旧模式重置1p
  31. AimHandler.ins?.DoIdentity();
  32. };
  33. }
  34. else if (SceneManager.GetActiveScene().name == "InfraredGameDouble" || SceneManager.GetActiveScene().name == "WildAttackDouble")
  35. {
  36. if (GameObject.Find("AutoResetViewNewLeft")) return;
  37. GameObject resetView = Instantiate(Resources.Load<GameObject>("AutoResetViewNew"));
  38. resetView.name = "AutoResetViewNewLeft";
  39. AutoResetViewNew autoResetViewNewScript = resetView.GetComponent<AutoResetViewNew>();
  40. autoResetViewNewScript.setTextKey("new-user-guider_tip_视角归位-瞄准-infraredD");
  41. autoResetViewNewScript.setPosLeft();
  42. autoResetViewNewScript.action_OnDestroy += () =>
  43. {
  44. if (SceneManager.GetActiveScene().name == "InfraredGameDouble")
  45. {
  46. InfraredDemo._ins?.SetAdjustPointsOffset(PlayerType.FirstPlayer);
  47. }else
  48. if (SceneManager.GetActiveScene().name == "WildAttackDouble")
  49. {
  50. WildAttack.GameMananger.GetInstance().ResetAim(WildAttack.PlayerTypeEnum.First);
  51. }
  52. };
  53. }
  54. else if (SceneManager.GetActiveScene().name.StartsWith("Game"))
  55. {
  56. Instantiate(Resources.Load<GameObject>("Prefabs/Views/AutoResetView"));
  57. }
  58. else if (SceneManager.GetActiveScene().name.StartsWith("DuckHunter"))
  59. {
  60. Instantiate(Resources.Load<GameObject>("Prefabs/Views/AutoResetView"));
  61. }
  62. //else if (SceneManager.GetActiveScene().name.Equals("WildAttackDouble"))
  63. //{
  64. // //双人场景校准直接校准1p
  65. // WildAttack.GameMananger.GetInstance().ResetAim(WildAttack.PlayerTypeEnum.First);
  66. //}
  67. else if (SceneManager.GetActiveScene().name.StartsWith("WildAttack"))
  68. {
  69. Instantiate(Resources.Load<GameObject>("Prefabs/Views/AutoResetView"));
  70. }
  71. else if (SceneManager.GetActiveScene().name.StartsWith("FruitMaster"))
  72. {
  73. Instantiate(Resources.Load<GameObject>("Prefabs/Views/AutoResetView"));
  74. }
  75. else if (SceneManager.GetActiveScene().name.StartsWith("Hyperspace"))
  76. {
  77. //Hyperspace01 Hyperspace02 Hyperspace03
  78. Instantiate(Resources.Load<GameObject>("Prefabs/Views/AutoResetView"));
  79. }
  80. else
  81. {
  82. AimHandler.ins.DoIdentity();
  83. }
  84. }
  85. /// <summary>
  86. /// 引导页面弹出校准
  87. /// </summary>
  88. public static void onInfraredGuiderAutoResetView() {
  89. CreateResetViewPath("Prefabs/Views/AutoResetView");
  90. }
  91. /// <summary>
  92. /// 带背景的校准
  93. /// </summary>
  94. public static void onInfraredGuiderAutoResetViewOrBg()
  95. {
  96. CreateResetViewPath("Prefabs/Views/AutoResetViewOrBg");
  97. }
  98. static void CreateResetViewPath(string path) {
  99. AutoResetView autoResetView = Instantiate(Resources.Load<GameObject>(path)).GetComponent<AutoResetView>();
  100. autoResetView.bInfraredGuider = true;
  101. autoResetView.infraredGuiderTime = GlobalData.MyDeviceMode == DeviceMode.Gun ? CommonConfig.calibrationTimeGun : CommonConfig.calibrationTimeArchery;
  102. }
  103. /// <summary>
  104. /// 是否是引导
  105. /// </summary>
  106. public bool bInfraredGuider = false;
  107. public float infraredGuiderTime = 10;
  108. void Awake() {
  109. if (ins) {
  110. Destroy(gameObject);
  111. return;
  112. }
  113. ins = this;
  114. }
  115. void Start() {
  116. //进入引导游戏场景时候,设置时间
  117. if (bInfraredGuider)
  118. {
  119. prepareTime = infraredGuiderTime;
  120. }
  121. else {
  122. prepareTime = UserSettings.ins.calibrationTime;
  123. }
  124. Debug.Log("弓箭重置时间:" + prepareTime);
  125. if (SceneManager.GetActiveScene().name == "Game") {
  126. (transform.Find("IconHumanShoot") as RectTransform).anchoredPosition = new Vector2(-193, -85);
  127. }
  128. GetGuideTip().textFormatArgs = new object[]{showedPrepareTime = Mathf.CeilToInt(prepareTime)};
  129. GetGuideTip().ApplyToText();
  130. ChallengeTargetForResetView.Show();
  131. onInstantiate?.Invoke();
  132. }
  133. public Action action_OnDestroy;
  134. void OnDestroy() {
  135. if (ins == this) ins = null;
  136. action_OnDestroy?.Invoke();
  137. }
  138. float prepareTime = 3;
  139. int showedPrepareTime;
  140. bool bEnd = false;
  141. void Update() {
  142. // 使用 unscaledDeltaTime 代替 deltaTime
  143. prepareTime -= Time.unscaledDeltaTime;//Time.deltaTime;
  144. if (prepareTime <= 0) {
  145. //防止多次调用
  146. if (bEnd) return;
  147. bEnd = true;
  148. try {
  149. if (SceneManager.GetActiveScene().name.Equals("WildAttackDouble"))
  150. {
  151. //双人场景校准两个
  152. WildAttack.GameMananger.GetInstance().ResetAim(WildAttack.PlayerTypeEnum.First);
  153. WildAttack.GameMananger.GetInstance().ResetAim(WildAttack.PlayerTypeEnum.Second);
  154. }else if (SceneManager.GetActiveScene().name.StartsWith("WildAttack"))
  155. {
  156. WildAttack.GameMananger.GetInstance().ResetAim();
  157. }
  158. else
  159. {
  160. if (AimHandler.ins.bRuning9Axis())
  161. {
  162. AimHandler.ins.DoIdentity();
  163. }
  164. else
  165. {
  166. //红外设备校准偏离点
  167. InfraredDemo._ins?.OnClick_SetAdjustPointsOffset();
  168. }
  169. }
  170. }
  171. catch (Exception) {}
  172. //先隐藏子物体
  173. foreach (Transform child in transform)
  174. {
  175. child.gameObject.SetActive(false);
  176. }
  177. Destroy(gameObject,2.0f);
  178. } else {
  179. int curTime = Mathf.CeilToInt(prepareTime);
  180. if (showedPrepareTime != curTime) {
  181. showedPrepareTime = curTime;
  182. TextAutoLanguage2 gt = GetGuideTip();
  183. gt.textFormatArgs[0] = Mathf.CeilToInt(prepareTime);
  184. gt.ApplyToText();
  185. }
  186. }
  187. }
  188. TextAutoLanguage2 _guideTip;
  189. TextAutoLanguage2 GetGuideTip() {
  190. if (_guideTip == null) {
  191. if (AimHandler.ins.bRuning9Axis())
  192. {
  193. Transform text = transform.Find("FrameTip/Text");
  194. text.gameObject.SetActive(true);
  195. _guideTip = text.GetComponentInChildren<TextAutoLanguage2>();
  196. }
  197. else {
  198. if (GlobalData.MyDeviceMode == DeviceMode.Gun)
  199. {
  200. Transform textInfrared = transform.Find("FrameTip/Text-Infrared-Gun");
  201. textInfrared.gameObject.SetActive(true);
  202. _guideTip = textInfrared.GetComponentInChildren<TextAutoLanguage2>();
  203. }
  204. else {
  205. Transform textInfrared = transform.Find("FrameTip/Text-Infrared");
  206. textInfrared.gameObject.SetActive(true);
  207. Text text = textInfrared.GetComponentInChildren<Text>();
  208. text.alignment = TextAutoLanguage2.GetLanguage() == LanguageEnum.English? TextAnchor.MiddleCenter: TextAnchor.MiddleLeft;
  209. _guideTip = textInfrared.GetComponentInChildren<TextAutoLanguage2>();
  210. }
  211. }
  212. }
  213. return _guideTip;
  214. }
  215. }