HomeView_ChallengeOption.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  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. public List<LevelInfo> levelInfos;
  31. List<LevelInfo> _tempLevelInfos = new List<LevelInfo>();
  32. List<String> gameTextIds = new List<string> { "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt" };
  33. //#if UNITY_ANDROID
  34. // List<String> gameTextIds = new List<string> { "OlynpicArchery", "LevelWildAttack", "FruitExpert", "LevelDuckHunter" };
  35. //#else
  36. // List<String> gameTextIds = new List<string>{ "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt" };
  37. //#endif
  38. void Awake()
  39. {
  40. //根据条件激活野鸡关卡或野鸭关卡
  41. //if (CommonConfig.AppArea == 0)
  42. //{
  43. // entryList.transform.Find("Item1").gameObject.SetActive(GlobalDataTemp.pkMatchType != PKMatchType.None);
  44. // entryList.transform.Find("Item3").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None);
  45. //}
  46. //else
  47. //{
  48. // entryList.transform.Find("Item1").gameObject.SetActive(true);
  49. // entryList.transform.Find("Item3").gameObject.SetActive(false);
  50. //}
  51. //entryList.transform.Find("Item4").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None);
  52. //transform.Find("BtnFruitMaster").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None);
  53. }
  54. void Start()
  55. {
  56. //增加了对两个按钮事件的响应
  57. prevCellButton.onClick.AddListener(() => {
  58. scrollView.SelectPrevCell();
  59. });
  60. nextCellButton.onClick.AddListener(() => {
  61. scrollView.SelectNextCell();
  62. });
  63. //对选中的当前对象的下标的显示
  64. scrollView.OnSelectionChanged(OnSelectionChanged);
  65. //按 gameTextIds 重新排序
  66. for (int i = 0; i < gameTextIds.Count; i++)
  67. {
  68. for (int j = 0; j < levelInfos.Count; j++)
  69. {
  70. if (gameTextIds[i] == levelInfos[j].textId)
  71. {
  72. _tempLevelInfos.Add(levelInfos[j]);
  73. break;
  74. }
  75. }
  76. }
  77. var _items = Enumerable.Range(0, 21)
  78. .Select(i => {
  79. int _index = Mathf.FloorToInt(i % _tempLevelInfos.Count);
  80. LevelInfo levelInfo = _tempLevelInfos[_index];
  81. //Debug.Log("初始化:"+i+",index:"+_index);
  82. return new ItemData(levelInfo.Name, levelInfo.Icon, levelInfo.textId, levelInfo.languageType);
  83. })
  84. .ToArray();
  85. scrollView.UpdateData(_items);
  86. scrollView.SelectCell(0);
  87. }
  88. void OnDestroy()
  89. {
  90. }
  91. bool _InitProductsPanel = false;
  92. void InitProductsPanel()
  93. {
  94. int page = 1;
  95. //增加了对两个按钮事件的响应
  96. prevCellButton.onClick.AddListener(() => {
  97. productsPanel.MoveNextToCenter(-page);
  98. });
  99. nextCellButton.onClick.AddListener(() => {
  100. productsPanel.MoveNextToCenter(page);
  101. });
  102. var games = levelInfos.Select(i => new ItemData(i.Name, i.Icon, i.textId, i.languageType))
  103. .ToArray();
  104. if (!_InitProductsPanel)
  105. {
  106. _InitProductsPanel = true;
  107. productsPanel.onReceiveItemViewInfo.AddListener(onReceiveItemViewInfo);
  108. productsPanel.onItemChange.AddListener(delegate (RectTransform item, int index) {
  109. //Debug.Log("----index:"+ index);
  110. });
  111. int gameIndex = 0;
  112. foreach (var game in games)
  113. {
  114. var gameObj = Instantiate(productsPanel.prefabs[0], productsPanel.GetComponent<ScrollRect>().content);
  115. //Game_Cell gameCell = gameObj.GetComponent<Game_Cell>();
  116. //gameCell.Initialize(gameIndex, (index)=> {
  117. // OnSelectionChanged(index);
  118. // for (int i = 0; i < productsPanel.itemList.Count; i++)
  119. // {
  120. // productsPanel.itemList[i].GetComponent<Game_Cell>().onSelected(index);
  121. // }
  122. //});
  123. //gameCell.UpdateContent(game);
  124. productsPanel.AddItem(gameObj.GetComponent<RectTransform>());
  125. gameIndex++;
  126. }
  127. productsPanel.UpdateItems();
  128. productsPanel.SelectItemByStartIndex();
  129. }
  130. }
  131. void onReceiveItemViewInfo(RectTransform item, Vector3 positionInView, Vector2 viewSize)
  132. {
  133. //float distanceRate = Mathf.Abs(positionInView.x * 2) / viewSize.x;
  134. //float scaleRate = 1f - 0.2f * distanceRate;
  135. //item.Find("Box").localScale = new Vector3(scaleRate, scaleRate, 1);
  136. }
  137. //游戏选择回调 scroll view control
  138. void OnSelectionChanged(int index, bool selected)
  139. {
  140. Debug.Log(index + ":" + _tempLevelInfos[Mathf.FloorToInt(index % _tempLevelInfos.Count)].Name);
  141. LevelInfo _levelInfo = _tempLevelInfos[Mathf.FloorToInt(index % _tempLevelInfos.Count)];
  142. if (_levelInfo.startGameType != -1 && selected)
  143. {
  144. JudgmentMode(_levelInfo.startGameType);
  145. }
  146. //Debug.Log(str);
  147. }
  148. /*
  149. 只有奥运射箭,打野鸡,打野兔,打野狼这四个最初的游戏,才有这三个模式选择;还有三个新的游戏,只有一个本地游戏的模式,那就不用选择,直接进入游戏
  150. */
  151. void JudgmentMode(int _startGameType) {
  152. //_startGameType 这里gameType仅仅用于判断模式
  153. switch (_startGameType)
  154. {
  155. case 1: //奥运射箭
  156. case 3: //打野兔
  157. case 4: //打野鸡
  158. case 5: //打野狼
  159. GameMgr.judgmentGameType = _startGameType;
  160. AudioMgr.ins.PlayBtn();
  161. //进入模式选择页面
  162. ViewMgr.Instance.ShowView<ModeSelectView>();
  163. if (_startGameType == 1)
  164. {
  165. ModeSelectView.ins.isShowButton = true;
  166. }
  167. else {
  168. ModeSelectView.ins.isShowButton = false;
  169. }
  170. ModeSelectView.ins.InitButtons();
  171. break;
  172. default:
  173. StartGame(_startGameType);
  174. break;
  175. }
  176. }
  177. //只有一个本地游戏的模式,没有其他模式
  178. void StartGame(int gameType)
  179. {
  180. //Debug.Log("gameType:"+ gameType+ ",GlobalDataTemp.pkMatchType:"+ GlobalDataTemp.pkMatchType);
  181. AudioMgr.ins.PlayBtn();
  182. GameMgr.gameType = gameType;
  183. GlobalData.singlePlayerGameType = gameType;
  184. if (gameType == 15)
  185. {
  186. SceneManager.LoadScene("FruitMaster", LoadSceneMode.Single);
  187. }
  188. else if (gameType == 14)
  189. {
  190. SceneManager.LoadScene("WildAttack", LoadSceneMode.Single);
  191. }
  192. else if (gameType == 13)
  193. {
  194. SceneManager.LoadScene("DuckHunter", LoadSceneMode.Single);
  195. }
  196. }
  197. public void back()
  198. {
  199. AudioMgr.ins.PlayBtn();
  200. ViewMgr.Instance.DestroyView<ChallengeOptionView>();
  201. }
  202. public bool OnMenuBack()
  203. {
  204. ViewMgr.Instance.DestroyView<ChallengeOptionView>();
  205. return true;
  206. }
  207. string[] GetFormatArgs(string[] array)
  208. {
  209. string[] newArray = new string[array.Length - 1];
  210. for (int i = 1; i < array.Length; i++)
  211. {
  212. newArray[i - 1] = array[i];
  213. }
  214. return newArray;
  215. }
  216. }