HomeView_ChallengeOption.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using FancyScrollView.FocusOn;
  6. using UnityEngine;
  7. using UnityEngine.SceneManagement;
  8. using UnityEngine.UI;
  9. using EasingCore;
  10. using JC;
  11. using FancyScrollView;
  12. [Serializable]
  13. public class LevelInfo
  14. {
  15. public string Name;
  16. public Sprite Icon;
  17. //自动语言转换id
  18. public string textId;
  19. //添加哪个语言脚本
  20. public int languageType = 0;
  21. public int startGameType = -1;
  22. }
  23. public class HomeView_ChallengeOption : MonoBehaviour
  24. {
  25. public GameObject entryList;
  26. [SerializeField] ScrollView scrollView = default;
  27. [SerializeField] Button prevCellButton = default;
  28. [SerializeField] Button nextCellButton = default;
  29. [SerializeField] ScrollPanel productsPanel;
  30. [Tooltip("所有关卡的设置信息")]
  31. public List<LevelInfo> levelInfos;
  32. List<LevelInfo> _tempLevelInfos = new List<LevelInfo>();
  33. //弓箭游戏列表
  34. List<string> gameTextIds = new List<string> { "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt"};
  35. //切换枪械情况下切换这个游戏列表
  36. //OlynpicArcheryGun 是射击版的OlynpicArchery
  37. List<string> gameTextIds_gun = new List<string> { "OlynpicArcheryGun", "FruitExpert", "LevelDuckHunter", "MovingTarget" };
  38. //#if UNITY_ANDROID
  39. // List<String> gameTextIds = new List<string> { "OlynpicArchery", "LevelWildAttack", "FruitExpert", "LevelDuckHunter" };
  40. //#else
  41. // List<String> gameTextIds = new List<string>{ "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt" };
  42. //#endif
  43. void Awake()
  44. {
  45. //根据条件激活野鸡关卡或野鸭关卡
  46. //if (CommonConfig.AppArea == 0)
  47. //{
  48. // entryList.transform.Find("Item1").gameObject.SetActive(GlobalDataTemp.pkMatchType != PKMatchType.None);
  49. // entryList.transform.Find("Item3").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None);
  50. //}
  51. //else
  52. //{
  53. // entryList.transform.Find("Item1").gameObject.SetActive(true);
  54. // entryList.transform.Find("Item3").gameObject.SetActive(false);
  55. //}
  56. //entryList.transform.Find("Item4").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None);
  57. //transform.Find("BtnFruitMaster").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None);
  58. //增加了对两个按钮事件的响应
  59. prevCellButton.onClick.AddListener(() => {
  60. scrollView.SelectPrevCell();
  61. });
  62. nextCellButton.onClick.AddListener(() => {
  63. scrollView.SelectNextCell();
  64. });
  65. //对选中的当前对象的下标的显示
  66. scrollView.OnSelectionChanged(OnSelectionChanged);
  67. }
  68. void Start()
  69. {
  70. //按 gameTextIds 重新排序
  71. //for (int i = 0; i < gameTextIds.Count; i++)
  72. //{
  73. // for (int j = 0; j < levelInfos.Count; j++)
  74. // {
  75. // if (gameTextIds[i] == levelInfos[j].textId)
  76. // {
  77. // _tempLevelInfos.Add(levelInfos[j]);
  78. // break;
  79. // }
  80. // }
  81. //}
  82. //var _items = Enumerable.Range(0, 21)
  83. // .Select(i => {
  84. // int _index = Mathf.FloorToInt(i % _tempLevelInfos.Count);
  85. // LevelInfo levelInfo = _tempLevelInfos[_index];
  86. // //Debug.Log("初始化:"+i+",index:"+_index);
  87. // return new ItemData(levelInfo.Name, levelInfo.Icon, levelInfo.textId, levelInfo.languageType);
  88. // })
  89. // .ToArray();
  90. //scrollView.UpdateData(_items);
  91. //scrollView.SelectCell(0);
  92. }
  93. //通过面板 HomeView_TopBarView.onChangeTypeEvent 调用
  94. //根据选择的模式来切换内容
  95. public void refreshList(DeviceMode deviceMode) {
  96. Debug.Log("refreshList:"+ deviceMode);
  97. List<string> _gameTextIds = new();
  98. if (deviceMode == DeviceMode.Archery)
  99. {
  100. _gameTextIds = gameTextIds;
  101. }
  102. else if (deviceMode == DeviceMode.Gun) {
  103. _gameTextIds = gameTextIds_gun;
  104. }
  105. if (_gameTextIds.Count == 0) return;
  106. _tempLevelInfos.Clear();
  107. //按 gameTextIds 重新排序
  108. for (int i = 0; i < _gameTextIds.Count; i++)
  109. {
  110. for (int j = 0; j < levelInfos.Count; j++)
  111. {
  112. if (_gameTextIds[i] == levelInfos[j].textId)
  113. {
  114. _tempLevelInfos.Add(levelInfos[j]);
  115. break;
  116. }
  117. }
  118. }
  119. Debug.Log("图标生成的数量是:"+ _gameTextIds.Count * 3);
  120. var _items = Enumerable.Range(0, _gameTextIds.Count*3)
  121. .Select(i => {
  122. int _index = Mathf.FloorToInt(i % _tempLevelInfos.Count);
  123. LevelInfo levelInfo = _tempLevelInfos[_index];
  124. //Debug.Log("初始化:"+i+",index:"+_index);
  125. return new ItemData(levelInfo.Name, levelInfo.Icon, levelInfo.textId, levelInfo.languageType);
  126. })
  127. .ToArray();
  128. scrollView.UpdateData(_items);
  129. scrollView.SelectCell(0);
  130. }
  131. void OnDestroy()
  132. {
  133. }
  134. bool _InitProductsPanel = false;
  135. void InitProductsPanel()
  136. {
  137. int page = 1;
  138. //增加了对两个按钮事件的响应
  139. prevCellButton.onClick.AddListener(() => {
  140. productsPanel.MoveNextToCenter(-page);
  141. });
  142. nextCellButton.onClick.AddListener(() => {
  143. productsPanel.MoveNextToCenter(page);
  144. });
  145. var games = levelInfos.Select(i => new ItemData(i.Name, i.Icon, i.textId, i.languageType))
  146. .ToArray();
  147. if (!_InitProductsPanel)
  148. {
  149. _InitProductsPanel = true;
  150. productsPanel.onReceiveItemViewInfo.AddListener(onReceiveItemViewInfo);
  151. productsPanel.onItemChange.AddListener(delegate (RectTransform item, int index) {
  152. //Debug.Log("----index:"+ index);
  153. });
  154. int gameIndex = 0;
  155. foreach (var game in games)
  156. {
  157. var gameObj = Instantiate(productsPanel.prefabs[0], productsPanel.GetComponent<ScrollRect>().content);
  158. //Game_Cell gameCell = gameObj.GetComponent<Game_Cell>();
  159. //gameCell.Initialize(gameIndex, (index)=> {
  160. // OnSelectionChanged(index);
  161. // for (int i = 0; i < productsPanel.itemList.Count; i++)
  162. // {
  163. // productsPanel.itemList[i].GetComponent<Game_Cell>().onSelected(index);
  164. // }
  165. //});
  166. //gameCell.UpdateContent(game);
  167. productsPanel.AddItem(gameObj.GetComponent<RectTransform>());
  168. gameIndex++;
  169. }
  170. productsPanel.UpdateItems();
  171. productsPanel.SelectItemByStartIndex();
  172. }
  173. }
  174. void onReceiveItemViewInfo(RectTransform item, Vector3 positionInView, Vector2 viewSize)
  175. {
  176. //float distanceRate = Mathf.Abs(positionInView.x * 2) / viewSize.x;
  177. //float scaleRate = 1f - 0.2f * distanceRate;
  178. //item.Find("Box").localScale = new Vector3(scaleRate, scaleRate, 1);
  179. }
  180. //游戏选择回调 scroll view control
  181. void OnSelectionChanged(int index, bool selected)
  182. {
  183. //Debug.Log(index + ":" + _tempLevelInfos[Mathf.FloorToInt(index % _tempLevelInfos.Count)].Name);
  184. LevelInfo _levelInfo = _tempLevelInfos[Mathf.FloorToInt(index % _tempLevelInfos.Count)];
  185. if (_levelInfo.startGameType != -1 && selected)
  186. {
  187. JudgmentMode(_levelInfo.startGameType);
  188. }
  189. //Debug.Log(str);
  190. }
  191. /*
  192. 只有奥运射箭,打野鸡,打野兔,打野狼这四个最初的游戏,才有这三个模式选择;还有三个新的游戏,只有一个本地游戏的模式,那就不用选择,直接进入游戏
  193. */
  194. void JudgmentMode(int _startGameType) {
  195. //_startGameType 这里gameType仅仅用于判断模式
  196. switch (_startGameType)
  197. {
  198. case 1: //奥运射箭
  199. case 3: //打野兔
  200. case 4: //打野鸡
  201. case 5: //打野狼
  202. GameMgr.judgmentGameType = _startGameType;
  203. AudioMgr.ins.PlayBtn();
  204. //进入模式选择页面
  205. ViewMgr.Instance.ShowView<ModeSelectView>();
  206. //连接弓箭并且是9轴的情况下 && AimHandler.ins.bRuning9Axis()
  207. if (_startGameType == 1)
  208. {
  209. ModeSelectView.ins.isShowButton = true;
  210. }
  211. else
  212. {
  213. ModeSelectView.ins.isShowButton = false;
  214. }
  215. //if (GlobalData.MyDeviceMode == DeviceMode.Gun)
  216. //{
  217. // ModeSelectView.ins.InitGunButtons();
  218. //}
  219. //else {
  220. // //连接弓箭
  221. // if (_startGameType == 1)
  222. // {
  223. // //当连接HOUYI Pro和其他红外设备时候,双弓射箭也需要屏蔽掉
  224. // if (BluetoothAim.ins.isMainConnectToInfraredDevice())
  225. // {
  226. // ModeSelectView.ins.isShowButton = false;
  227. // }
  228. // else {
  229. // ModeSelectView.ins.isShowButton = true;
  230. // }
  231. // }
  232. // else
  233. // {
  234. // ModeSelectView.ins.isShowButton = false;
  235. // }
  236. // ModeSelectView.ins.InitButtons();
  237. //}
  238. break;
  239. default:
  240. StartGame(_startGameType);
  241. break;
  242. }
  243. }
  244. //只有一个本地游戏的模式,没有其他模式
  245. void StartGame(int gameType)
  246. {
  247. //Debug.Log("gameType:"+ gameType+ ",GlobalDataTemp.pkMatchType:"+ GlobalDataTemp.pkMatchType);
  248. AudioMgr.ins.PlayBtn();
  249. GameMgr.gameType = gameType;
  250. GlobalData.singlePlayerGameType = gameType;
  251. if (gameType == 15)
  252. {
  253. SceneManager.LoadScene("FruitMaster", LoadSceneMode.Single);
  254. }
  255. else if (gameType == 14)
  256. {
  257. SceneManager.LoadScene("WildAttack", LoadSceneMode.Single);
  258. }
  259. else if (gameType == 13)
  260. {
  261. SceneManager.LoadScene("DuckHunter", LoadSceneMode.Single);
  262. }
  263. else if (gameType == 16) {
  264. //MovingTarget
  265. SceneManager.LoadScene("Hyperspace01", LoadSceneMode.Single);
  266. }
  267. }
  268. public void back()
  269. {
  270. AudioMgr.ins.PlayBtn();
  271. ViewMgr.Instance.DestroyView<ChallengeOptionView>();
  272. }
  273. public bool OnMenuBack()
  274. {
  275. ViewMgr.Instance.DestroyView<ChallengeOptionView>();
  276. return true;
  277. }
  278. string[] GetFormatArgs(string[] array)
  279. {
  280. string[] newArray = new string[array.Length - 1];
  281. for (int i = 1; i < array.Length; i++)
  282. {
  283. newArray[i - 1] = array[i];
  284. }
  285. return newArray;
  286. }
  287. }