using Assets.Scenes.Ride.Scripts; using Assets.Scenes.Ride.Scripts.Model; using Assets.Scripts; using Assets.Scripts.Apis.Models; using Assets.Scripts.UI.Control; using Assets.Scripts.UI.Prefab.MapList; using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class GameRoomListController : PFUIPanel { [SerializeField] GameObject map; private RawImage Avatar; private GameObject CreateRoomBtn; private GameObject MapList; private Transform sorts; private Transform sortDir; private Transform topContainer; private Transform content; private GameObject scroll; private Transform distanceOptions; private Transform searchInput; private string sort = "", sortDire = ""; private bool isEnableAR { get; set; } private int pageSize = 10; private string ftname = ""; private string distance = ""; private bool is3d = false; public Dictionary caches = new Dictionary(); private bool startMouse; List hands = new List(); private int selectedRouteId; private MapRoute Map; private int pageIndex = 0; private bool isEnd = false; private GameObject step1Btn; private GameObject step2Btn; private GameObject next; private GameObject previous; private GameObject create; private GameObject cancel; private GameObject right; private GameObject right2; private GameObject btn30; private GameObject btn40; private GameObject btn50; private GameObject btn60; private GameObject btn2; private GameObject btn3; private GameObject btn4; private GameObject btn5; private GameObject btn6; private Transform enterRoomModal; private Transform cycingRoomModal; private Transform resultRoomModal; private GameObject RoomRankItem; private string RoomName; private string Roompwd; private int hours; private int mins; private int CloseTime; private int Members; private GameRoomModel GameRoom; [SerializeField] RectTransform _rectTransform; [SerializeField] InputField _searchInputField; [SerializeField] GameObject _searchBtn; [SerializeField] GameObject _noDataFound; [SerializeField] GameObject _downLoadTask; private GameObject RoomCell { get; set; } //Dummy data List private List _list = new List(); private string seachName = ""; private bool ListChanged = false; private bool CreateRoomSuccessed = false; PFUIPageHelper pageHelper; protected override void Awake() { base.Awake(); RoomRankItem = Resources.Load("UI/Prefab/GameRoom/RoomRankItem"); RoomCell = Resources.Load("UI/Prefab/GameRoom/Room"); //分页 pageHelper = FindObjectOfType(); pageHelper.PageIndex = 0; pageHelper.PageSize = 6; pageHelper.Register((e) => { Query(); }); _searchInputField.onValueChanged.AddListener((e) => { seachName = e; }); _searchInputField.onEndEdit.AddListener((e) => { seachName = e; Query(); }); UIManager.AddEvent(_searchBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, SearchBtn_Click); } private void SearchBtn_Click(BaseEventData data) { pageHelper.PageIndex = 0; Query(); } private void Query() { MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName); } private void Refreash() { Utils.DestroyChildren(_rectTransform); pageHelper.Total = Total; pageHelper.Build(); if (list == null) { _noDataFound.SetActive(true); return; } _noDataFound.SetActive(false); int index = 0; foreach (var item in list) { index++; var g = Instantiate(RoomCell, _rectTransform); g.GetComponent().ConfigureCell(item, index); } } List list; private int Total { get; set; } private bool CreateClicked { get; set; } private void ListenerHandler(List message) { try { if (message.Count > 1) return; //查询列表 var roomList = message.Where(c => c.RoomList != null).FirstOrDefault(); if (roomList != null) { list = roomList.RoomList; Total = roomList.GameRoomTotal; ListChanged = true; } else { list = null; Total = 0; ListChanged = true; } //查询自己当前创建的房间信息并进入 var info = message.Where(c => c.RoomList != null && c.RoomList.Where(o => o.UserId == App.CurrentUser.Id && o.Status == 0).Any()).FirstOrDefault(); if (info != null) { GameRoom = info.RoomList[0]; App.gameRoomDetail = GameRoom; CreateRoomSuccessed = true; } } catch (Exception e) { } } protected override void Start() { base.Start(); Avatar = transform.Find("Avatar").GetComponent(); CreateRoomBtn = transform.Find("SwitchMode/GoList").gameObject; Utils.DisplayImage(Avatar, App.CurrentUser.WxHeadImg); UIManager.AddEvent(CreateRoomBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, CreateGameRoom); MapList = transform.Find("MapList").gameObject; enterRoomModal = transform.Find("EnterRoomModal"); cycingRoomModal = transform.Find("GameRoomInProgress"); resultRoomModal = transform.Find("GameRoomDone"); } public override void Show() { base.Show(); //LOOM中取数据渲染下载当前下载进度 var downLoadList = transform.Find("DownLoadList").gameObject; var downloadPanel = transform.Find("DownloadPanel").gameObject; if (!downLoadList.activeSelf && !downloadPanel.activeSelf) { var content = downLoadList.transform.Find("Viewport/Content"); foreach (var item in Loom.DownLoadTaskList) { var newtask = Instantiate(_downLoadTask, content); newtask.GetComponent().Init(0, item.Key, downloadPanel); downLoadList.SetActive(true); } } App.Model = "GameRoom"; MapUDPService.MessageListener = ListenerHandler; MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName); } private void Update() { //房间已经进行骑行时间 if (cycingRoomModal.gameObject.activeSelf) { var s = UIManager.Now.GetDateTime() - modelGameRoom.StartTime.Value.ToLocalTime(); CyclingTimer.text = Helper.FormatTicks((int)s.TotalSeconds); } #region 搜索面板的滚轮监听 if (scroll != null) { if (Input.GetAxis("Mouse ScrollWheel") != 0) { if (scroll.GetComponent().verticalNormalizedPosition <= 0 || scroll.GetComponent().verticalNormalizedPosition >= (pageIndex == 0 ? 1.2 : 1)) { startMouse = true; } } else { if (startMouse) { startMouse = false; OnEndDrag(null); } } if (Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Return)) { onEndEdit(); } } #endregion if (ListChanged) { Refreash(); ListChanged = false; } //对战房间创建事件监听 if (CreateRoomSuccessed & CreateClicked) { CreateRoomSuccessed = false; CreateClicked = false; UIManager.ShowGameRoomDetailPanel(); } } private void InitStep1() { sort = "Near"; sortDire = "asc"; var mapList = transform.Find("MapList"); topContainer = transform.Find("MapList/Modal/Right/Top/Container"); content = transform.Find("MapList/Modal/Right/Scroll View/Viewport/Content"); scroll = transform.Find("MapList/Modal/Right/Scroll View").gameObject; if (scroll != null) { UIManager.RemoveEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag); UIManager.AddEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag); } distanceOptions = topContainer.Find("distanceOptions"); if (distanceOptions != null) { distance = ""; distanceOptions.GetComponent().value = 0; var dDropdown = distanceOptions.GetComponent(); dDropdown.options = MapFilterOptions.distances; dDropdown.onValueChanged.RemoveAllListeners(); dDropdown.onValueChanged.AddListener(ChangeDistance); } var tdContainer = topContainer.Find("3dContainer"); var favContainer = topContainer.Find("FavContainer"); //是否是3d if (tdContainer != null) { var g = tdContainer.Find("Gou").gameObject; g.SetActive(false); is3d = false; UIManager.RemoveEvent(tdContainer.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick); UIManager.AddEvent(tdContainer.gameObject, EventTriggerType.PointerClick, (b) => { var gou = tdContainer.Find("Gou").gameObject; bool v = !gou.activeSelf; gou.SetActive(v); is3d = v; Refresh(); }); } //是否收藏 if (favContainer != null) { var g = favContainer.Find("Gou").gameObject; g.SetActive(false); isEnableAR = false; UIManager.RemoveEvent(favContainer.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick); UIManager.AddEvent(favContainer.gameObject, EventTriggerType.PointerClick, (e)=> { var gou = e.selectedObject.transform.Find("Gou").gameObject; bool v = !gou.activeSelf; gou.SetActive(v); isEnableAR = v; Refresh(); }); } //搜索框 searchInput = topContainer.Find("SearchInput"); if (searchInput != null) { searchInput.GetComponent().text = ""; ftname = ""; searchInput.GetComponent().onEndEdit.RemoveAllListeners(); searchInput.GetComponent().onEndEdit.AddListener((s) => { var t = searchInput.GetComponent().text; ftname = t; }); UIManager.RemoveEvent(searchInput.Find("Button").gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick); UIManager.AddEvent(searchInput.Find("Button").gameObject, EventTriggerType.PointerClick, (b) => { onEndEdit(); }); } //难度 var diffOptions = topContainer.Find("DifficultyContainer"); if (diffOptions != null) { hands = new List(); foreach (Transform t in diffOptions) { var button = t.GetComponent