BoxLevel.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. public class BoxLevel : MonoBehaviour
  6. {
  7. [SerializeField] Transform boxLevelArrowWeightSelects;
  8. [SerializeField] Transform boxLevelShootLevelSelects;
  9. [SerializeField] Transform boxLevelCrossHairSelects;
  10. [SerializeField] Transform boxLevelBowCameraFixed;
  11. [SerializeField] Transform boxLevelTrainMode;
  12. [SerializeField] Transform boxLevelBowAndArrow;
  13. readonly static float[] ArrowWeights = { 20f, 27f, 30.5f };
  14. readonly static int[] ShootLevels = { 0, 1, 2 };
  15. readonly string[] ShootLevelStrs = { "Easy", "Normal", "Hard" };
  16. readonly static int[] buttons = { 0, 1 };
  17. readonly string[] buttonStrs = { "Yes", "No" };
  18. [SerializeField] Slider calibrationSlider;
  19. [SerializeField] Text calibrationTimeText;
  20. [SerializeField] InputField calibrationInput;
  21. void OnEnable()
  22. {
  23. float arrowWeight = UserSettings.ins.actualArrowWeight;
  24. if (System.Array.IndexOf(ArrowWeights, arrowWeight) < 0) arrowWeight = ArrowWeights[0];
  25. RenderArrowWeight(arrowWeight);
  26. int shootLevel = UserSettings.ins.shootLevel;
  27. if (System.Array.IndexOf(ShootLevels, shootLevel) < 0) shootLevel = ShootLevels[0];
  28. RenderShootLevel(shootLevel);
  29. //准心
  30. bool openCrossHair = UserSettings.ins.openCrossHair;
  31. RenderButtos(openCrossHair ? 0 : 1, boxLevelCrossHairSelects);
  32. //红外版本
  33. if (CommonConfig.bInfraredApp)
  34. {
  35. //固定背景隐藏
  36. boxLevelBowCameraFixed.parent.gameObject.SetActive(false);
  37. }
  38. else {
  39. //固定背景
  40. bool bowCameraFixed = UserSettings.ins.bowCameraFixed;
  41. RenderButtos(bowCameraFixed ? 0 : 1, boxLevelBowCameraFixed);
  42. }
  43. //训练模式
  44. bool trainMode = UserSettings.ins.trainMode;
  45. RenderButtos(trainMode ? 0 : 1, boxLevelTrainMode);
  46. //场景里面的弓箭手臂显示
  47. bool openBowAndArrow = UserSettings.ins.openBowAndArrow;
  48. RenderButtos(openBowAndArrow ? 0 : 1, boxLevelBowAndArrow);
  49. //视角归位视角设置
  50. calibrationSlider.maxValue = 20;
  51. calibrationSlider.minValue = 3;
  52. InForCalibrationConvert();
  53. }
  54. public void OnClick_SelectArrowWeight(Transform target)
  55. {
  56. float oldValue = UserSettings.ins.actualArrowWeight;
  57. int index = target.GetSiblingIndex();
  58. float newValue = ArrowWeights[index];
  59. RenderArrowWeight(newValue);
  60. if (oldValue != newValue)
  61. {
  62. AudioMgr.ins.PlayBtn();
  63. UserSettings.ins.actualArrowWeight = newValue;
  64. UserSettings.ins.Save();
  65. }
  66. }
  67. public void OnClick_SelectShootLevel(Transform target)
  68. {
  69. int oldValue = UserSettings.ins.shootLevel;
  70. int index = target.GetSiblingIndex();
  71. int newValue = ShootLevels[index];
  72. RenderShootLevel(newValue);
  73. if (oldValue != newValue)
  74. {
  75. AudioMgr.ins.PlayBtn();
  76. UserSettings.ins.shootLevel = newValue;
  77. UserSettings.ins.Save();
  78. }
  79. }
  80. public void OnClick_CrossHairs(Transform target)
  81. {
  82. int oldValue = UserSettings.ins.openCrossHair?0:1;
  83. int index = target.GetSiblingIndex();
  84. int newValue = buttons[index];
  85. RenderButtos(newValue, boxLevelCrossHairSelects);
  86. if (oldValue != newValue)
  87. {
  88. AudioMgr.ins.PlayBtn();
  89. UserSettings.ins.openCrossHair = newValue == 0?true:false;
  90. UserSettings.ins.Save();
  91. }
  92. }
  93. public void OnClick_BowCameraFixed(Transform target)
  94. {
  95. int oldValue = UserSettings.ins.bowCameraFixed ? 0 : 1;
  96. int index = target.GetSiblingIndex();
  97. int newValue = buttons[index];
  98. RenderButtos(newValue, boxLevelBowCameraFixed);
  99. if (oldValue != newValue)
  100. {
  101. AudioMgr.ins.PlayBtn();
  102. UserSettings.ins.bowCameraFixed = newValue == 0 ? true : false;
  103. UserSettings.ins.Save();
  104. }
  105. }
  106. public void OnClick_TrainMode(Transform target)
  107. {
  108. int oldValue = UserSettings.ins.trainMode ? 0 : 1;
  109. int index = target.GetSiblingIndex();
  110. int newValue = buttons[index];
  111. RenderButtos(newValue, boxLevelTrainMode);
  112. if (oldValue != newValue)
  113. {
  114. AudioMgr.ins.PlayBtn();
  115. UserSettings.ins.trainMode = newValue == 0 ? true : false;
  116. UserSettings.ins.Save();
  117. }
  118. }
  119. //弓箭手臂
  120. public void OnClick_BowAndArrow(Transform target)
  121. {
  122. int oldValue = UserSettings.ins.openBowAndArrow ? 0 : 1;
  123. int index = target.GetSiblingIndex();
  124. int newValue = buttons[index];
  125. RenderButtos(newValue, boxLevelBowAndArrow);
  126. if (oldValue != newValue)
  127. {
  128. AudioMgr.ins.PlayBtn();
  129. UserSettings.ins.openBowAndArrow = newValue == 0 ? true : false;
  130. UserSettings.ins.Save();
  131. //如果打开图标并且存在 hideInfraredBowAndArrow key时候,设置为0
  132. if (UserSettings.ins.openBowAndArrow
  133. && PlayerPrefs.HasKey("hideInfraredBowAndArrow")
  134. && PlayerPrefs.GetInt("hideInfraredBowAndArrow") == 2 //armbow 设置 hideInfraredBowAndArrow = 2 状态下 操作面板才会 解开 红外的openBowAndArrow
  135. )
  136. {
  137. PlayerPrefs.SetInt("hideInfraredBowAndArrow", 0);
  138. }
  139. }
  140. }
  141. void RenderArrowWeight(float value)
  142. {
  143. for (int i = 0; i < ArrowWeights.Length; i++)
  144. {
  145. var itemValue = ArrowWeights[i];
  146. var item = boxLevelArrowWeightSelects.GetChild(i);
  147. var text = item.GetComponentInChildren<Text>();
  148. if (itemValue == value)
  149. {
  150. item.GetComponent<Image>().color = Color.black;
  151. text.color = Color.white;
  152. }
  153. else
  154. {
  155. item.GetComponent<Image>().color = new Color(1, 1, 1, 0);
  156. text.color = Color.black;
  157. }
  158. text.text = itemValue + "Grams";
  159. }
  160. }
  161. void RenderShootLevel(int value)
  162. {
  163. for (int i = 0; i < ShootLevels.Length; i++)
  164. {
  165. var itemValue = ShootLevels[i];
  166. var item = boxLevelShootLevelSelects.GetChild(i);
  167. var text = item.GetComponentInChildren<Text>();
  168. if (itemValue == value)
  169. {
  170. item.GetComponent<Image>().color = Color.black;
  171. text.color = Color.white;
  172. }
  173. else
  174. {
  175. item.GetComponent<Image>().color = new Color(1, 1, 1, 0);
  176. text.color = Color.black;
  177. }
  178. text.text = ShootLevelStrs[i];
  179. }
  180. }
  181. void RenderButtos(int value,Transform target)
  182. {
  183. for (int i = 0; i < buttons.Length; i++)
  184. {
  185. var itemValue = buttons[i];
  186. var item = target.GetChild(i);
  187. var text = item.GetComponentInChildren<Text>();
  188. if (itemValue == value)
  189. {
  190. item.GetComponent<Image>().color = Color.black;
  191. text.color = Color.white;
  192. }
  193. else
  194. {
  195. item.GetComponent<Image>().color = new Color(1, 1, 1, 0);
  196. text.color = Color.black;
  197. }
  198. text.text = buttonStrs[i];
  199. }
  200. }
  201. void InForCalibrationConvert() {
  202. UnityEngine.Events.UnityAction<string> onEndEdit_inputSize = (string str) => {
  203. calibrationInput.SetTextWithoutNotify("");
  204. float v = (float)System.Math.Round(double.Parse(str), 2);
  205. if (v < 3 || v > 20)
  206. {
  207. PopupMgr.ins.ShowTip(TextAutoLanguage2.GetTextByCNKey("输入值不在常规范围内"));
  208. return;
  209. }
  210. SetCalibrationTime(v);
  211. //save
  212. UserSettings.ins.calibrationTime = v;
  213. UserSettings.ins.Save();
  214. };
  215. calibrationInput.onEndEdit.AddListener(onEndEdit_inputSize);
  216. SetCalibrationTime(UserSettings.ins.calibrationTime);
  217. }
  218. void SetCalibrationTime(float v)
  219. {
  220. string vStr = v.ToString("#0");
  221. calibrationTimeText.text = vStr + "s";
  222. }
  223. }