using System; using System.Collections; using System.Collections.Generic; using System.Linq; using FancyScrollView.FocusOn; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using EasingCore; using JC; using FancyScrollView; [Serializable] public class LevelInfo { public string Name; public Sprite Icon; //自动语言转换id public string textId; //添加哪个语言脚本 public int languageType = 0; public int startGameType = -1; } public class HomeView_ChallengeOption : MonoBehaviour { public GameObject entryList; [SerializeField] ScrollView scrollView = default; [SerializeField] Button prevCellButton = default; [SerializeField] Button nextCellButton = default; [SerializeField] ScrollPanel productsPanel; [Tooltip("所有关卡的设置信息")] public List levelInfos; List _tempLevelInfos = new List(); //弓箭游戏列表 List gameTextIds = new List { "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt"}; //切换枪械情况下切换这个游戏列表 //OlynpicArcheryGun 是射击版的OlynpicArchery List gameTextIds_gun = new List { "OlynpicArcheryGun", "FruitExpert", "LevelDuckHunter", "MovingTarget" }; //#if UNITY_ANDROID // List gameTextIds = new List { "OlynpicArchery", "LevelWildAttack", "FruitExpert", "LevelDuckHunter" }; //#else // List gameTextIds = new List{ "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt" }; //#endif void Awake() { //根据条件激活野鸡关卡或野鸭关卡 //if (CommonConfig.AppArea == 0) //{ // entryList.transform.Find("Item1").gameObject.SetActive(GlobalDataTemp.pkMatchType != PKMatchType.None); // entryList.transform.Find("Item3").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None); //} //else //{ // entryList.transform.Find("Item1").gameObject.SetActive(true); // entryList.transform.Find("Item3").gameObject.SetActive(false); //} //entryList.transform.Find("Item4").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None); //transform.Find("BtnFruitMaster").gameObject.SetActive(GlobalDataTemp.pkMatchType == PKMatchType.None); //增加了对两个按钮事件的响应 prevCellButton.onClick.AddListener(() => { scrollView.SelectPrevCell(); }); nextCellButton.onClick.AddListener(() => { scrollView.SelectNextCell(); }); //对选中的当前对象的下标的显示 scrollView.OnSelectionChanged(OnSelectionChanged); } void Start() { //按 gameTextIds 重新排序 //for (int i = 0; i < gameTextIds.Count; i++) //{ // for (int j = 0; j < levelInfos.Count; j++) // { // if (gameTextIds[i] == levelInfos[j].textId) // { // _tempLevelInfos.Add(levelInfos[j]); // break; // } // } //} //var _items = Enumerable.Range(0, 21) // .Select(i => { // int _index = Mathf.FloorToInt(i % _tempLevelInfos.Count); // LevelInfo levelInfo = _tempLevelInfos[_index]; // //Debug.Log("初始化:"+i+",index:"+_index); // return new ItemData(levelInfo.Name, levelInfo.Icon, levelInfo.textId, levelInfo.languageType); // }) // .ToArray(); //scrollView.UpdateData(_items); //scrollView.SelectCell(0); } //通过面板 HomeView_TopBarView.onChangeTypeEvent 调用 //根据选择的模式来切换内容 public void refreshList(DeviceMode deviceMode) { Debug.Log("refreshList:"+ deviceMode); List _gameTextIds = new(); if (deviceMode == DeviceMode.Archery) { _gameTextIds = gameTextIds; } else if (deviceMode == DeviceMode.Gun) { _gameTextIds = gameTextIds_gun; } if (_gameTextIds.Count == 0) return; _tempLevelInfos.Clear(); //按 gameTextIds 重新排序 for (int i = 0; i < _gameTextIds.Count; i++) { for (int j = 0; j < levelInfos.Count; j++) { if (_gameTextIds[i] == levelInfos[j].textId) { _tempLevelInfos.Add(levelInfos[j]); break; } } } Debug.Log("图标生成的数量是:"+ _gameTextIds.Count * 3); var _items = Enumerable.Range(0, _gameTextIds.Count*3) .Select(i => { int _index = Mathf.FloorToInt(i % _tempLevelInfos.Count); LevelInfo levelInfo = _tempLevelInfos[_index]; //Debug.Log("初始化:"+i+",index:"+_index); return new ItemData(levelInfo.Name, levelInfo.Icon, levelInfo.textId, levelInfo.languageType); }) .ToArray(); scrollView.UpdateData(_items); scrollView.SelectCell(0); } void OnDestroy() { } bool _InitProductsPanel = false; void InitProductsPanel() { int page = 1; //增加了对两个按钮事件的响应 prevCellButton.onClick.AddListener(() => { productsPanel.MoveNextToCenter(-page); }); nextCellButton.onClick.AddListener(() => { productsPanel.MoveNextToCenter(page); }); var games = levelInfos.Select(i => new ItemData(i.Name, i.Icon, i.textId, i.languageType)) .ToArray(); if (!_InitProductsPanel) { _InitProductsPanel = true; productsPanel.onReceiveItemViewInfo.AddListener(onReceiveItemViewInfo); productsPanel.onItemChange.AddListener(delegate (RectTransform item, int index) { //Debug.Log("----index:"+ index); }); int gameIndex = 0; foreach (var game in games) { var gameObj = Instantiate(productsPanel.prefabs[0], productsPanel.GetComponent().content); //Game_Cell gameCell = gameObj.GetComponent(); //gameCell.Initialize(gameIndex, (index)=> { // OnSelectionChanged(index); // for (int i = 0; i < productsPanel.itemList.Count; i++) // { // productsPanel.itemList[i].GetComponent().onSelected(index); // } //}); //gameCell.UpdateContent(game); productsPanel.AddItem(gameObj.GetComponent()); gameIndex++; } productsPanel.UpdateItems(); productsPanel.SelectItemByStartIndex(); } } void onReceiveItemViewInfo(RectTransform item, Vector3 positionInView, Vector2 viewSize) { //float distanceRate = Mathf.Abs(positionInView.x * 2) / viewSize.x; //float scaleRate = 1f - 0.2f * distanceRate; //item.Find("Box").localScale = new Vector3(scaleRate, scaleRate, 1); } //游戏选择回调 scroll view control void OnSelectionChanged(int index, bool selected) { //Debug.Log(index + ":" + _tempLevelInfos[Mathf.FloorToInt(index % _tempLevelInfos.Count)].Name); LevelInfo _levelInfo = _tempLevelInfos[Mathf.FloorToInt(index % _tempLevelInfos.Count)]; if (_levelInfo.startGameType != -1 && selected) { JudgmentMode(_levelInfo.startGameType); } //Debug.Log(str); } /* 只有奥运射箭,打野鸡,打野兔,打野狼这四个最初的游戏,才有这三个模式选择;还有三个新的游戏,只有一个本地游戏的模式,那就不用选择,直接进入游戏 */ void JudgmentMode(int _startGameType) { //_startGameType 这里gameType仅仅用于判断模式 switch (_startGameType) { case 1: //奥运射箭 case 3: //打野兔 case 4: //打野鸡 case 5: //打野狼 GameMgr.judgmentGameType = _startGameType; AudioMgr.ins.PlayBtn(); //进入模式选择页面 ViewMgr.Instance.ShowView(); //连接弓箭并且是9轴的情况下 if (_startGameType == 1 && AimHandler.ins.bRuning9Axis()) { ModeSelectView.ins.isShowButton = true; } else { ModeSelectView.ins.isShowButton = false; } //if (GlobalData.MyDeviceMode == DeviceMode.Gun) //{ // ModeSelectView.ins.InitGunButtons(); //} //else { // //连接弓箭 // if (_startGameType == 1) // { // //当连接HOUYI Pro和其他红外设备时候,双弓射箭也需要屏蔽掉 // if (BluetoothAim.ins.isMainConnectToInfraredDevice()) // { // ModeSelectView.ins.isShowButton = false; // } // else { // ModeSelectView.ins.isShowButton = true; // } // } // else // { // ModeSelectView.ins.isShowButton = false; // } // ModeSelectView.ins.InitButtons(); //} break; default: StartGame(_startGameType); break; } } //只有一个本地游戏的模式,没有其他模式 void StartGame(int gameType) { //Debug.Log("gameType:"+ gameType+ ",GlobalDataTemp.pkMatchType:"+ GlobalDataTemp.pkMatchType); AudioMgr.ins.PlayBtn(); GameMgr.gameType = gameType; GlobalData.singlePlayerGameType = gameType; if (gameType == 15) { SceneManager.LoadScene("FruitMaster", LoadSceneMode.Single); } else if (gameType == 14) { SceneManager.LoadScene("WildAttack", LoadSceneMode.Single); } else if (gameType == 13) { SceneManager.LoadScene("DuckHunter", LoadSceneMode.Single); } else if (gameType == 16) { //MovingTarget SceneManager.LoadScene("Hyperspace01", LoadSceneMode.Single); } } public void back() { AudioMgr.ins.PlayBtn(); ViewMgr.Instance.DestroyView(); } public bool OnMenuBack() { ViewMgr.Instance.DestroyView(); return true; } string[] GetFormatArgs(string[] array) { string[] newArray = new string[array.Length - 1]; for (int i = 1; i < array.Length; i++) { newArray[i - 1] = array[i]; } return newArray; } }