using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Sfs2X.Entities.Data; using UnityEngine; using UnityEngine.UI; public class PlazaRoomMge : Regist { #region Config public static int CurrentRoomPage = 0; public static int CurrentRoomCount = 1; public static int DownloadVolume = 20; public static bool FilterEnabled; public static bool DownloadLock; public static Transform Grid; public static CounterAction DownloadCallback; public static List PlazaRoomItems = new List(); public static Dictionary RoomDatas = new Dictionary(); #endregion public override void RegistValueC() { DatabaseManager.OnReceiveRoomData += OnReceiveRoomData; Download(DownloadVolume); VirtualScrollRect virtualScrollRect = ManaReso.Get("Z_ScrollRect"); virtualScrollRect.OnVerticalLessEqual0 = NextPage; virtualScrollRect.OnVerticalGreaterEqual1 = PreviousPage; CostFml = ManaData.GetPlazaRoomConfig()[1].Value; OnSliderValueChange(0); } public override void RegistReference() { Grid = ManaReso.Get("Z_Grid"); DurationLab = ManaReso.Get("AAa_ValueLab"); DurationSlider = ManaReso.Get("AAa_Slider"); MaxPlayerLab = ManaReso.Get("AAb_ValueLab"); MaxPlayerSlider = ManaReso.Get("AAb_Slider"); DurationSlider.onValueChanged.AddListener(OnSliderValueChange); MaxPlayerSlider.onValueChanged.AddListener(OnSliderValueChange); } public static void OnReceiveRoomData(ISFSArray sfsArray) { Debug.Log(sfsArray.Size()); CurrentRoomCount = sfsArray.Size(); RoomDatas = new Dictionary(); for (int i = 0; i < sfsArray.Count; i++) { RoomData roomData = new RoomData(sfsArray.GetSFSObject(i)); RoomDatas.Add(i, roomData); } UpdateRoomItem(); if (DownloadCallback != null) { DownloadCallback.Invoke(); } } public static void NextPage() { if (RoomDatas.Count <= CurrentRoomPage*PageAmt) { if (!DownloadLock) { Debug.LogWarning("Download Page"); ManaLan.Add(ManaReso.Get("Z_Tip"), new LanStr("UI", "Loading")); ManaReso.Get("Z_Tip").TweenForCG(); DownloadLock = true; DownloadNext ( () => { ManaLan.Add(ManaReso.Get("Z_Tip"), new LanStr("UI", "LoadSucceed")); DelayCall.Call(0.5f, () => { ManaReso.Get("Z_Tip").TweenBacCG(); }); } ); } } else { Debug.LogWarning("Next Page"); List roomDatas = GetRoomDatas(++CurrentRoomPage); for (int i = 0; i < roomDatas.Count; i++) { CreateNextRoomItem(roomDatas[i]); } } } public static void PreviousPage() { if (CurrentRoomPage < 1) { return; } Debug.LogWarning("Prev Page"); List roomDatas = GetRoomDatas(--CurrentRoomPage); for (int i = 0; i < roomDatas.Count; i++) { CreatePreviousRoomItem(roomDatas[i]); } } private static int MaxRoomItem = 10; private static void CreateNextRoomItem(RoomData roomData) { if (PlazaRoomItems.Count >= MaxRoomItem) { Transform firstChild = Grid.GetChild(0); firstChild.GetComponent().Init(roomData); firstChild.SetAsLastSibling(); } else { PlazaRoomItems.Add(roomData.CreateItem().Init(roomData)); } } private static void CreatePreviousRoomItem(RoomData roomData) { if (PlazaRoomItems.Count >= MaxRoomItem) { Transform lastChild = Grid.GetChild(Grid.childCount - 1); lastChild.GetComponent().Init(roomData); lastChild.SetAsFirstSibling(); } else { return; } } private static void UpdateRoomItem() { Debug.LogWarning("Update Page"); if (CurrentRoomPage == 0) { return; } int lastPage = (RoomDatas.Count/PageAmt) + 1; if (CurrentRoomPage > lastPage) { CurrentRoomPage = lastPage; } if (CurrentRoomPage == 1) { for (int i = PageAmt; i < Grid.childCount; i++) { ManaReso.Save(Grid.GetChild(i--)); } for (int i = 0; i < PageAmt; i++) { if (RoomDatas.Count > i) { if (Grid.childCount > i + 1) { Grid.GetChild(i).GetComponent().Init(RoomDatas[i]); } else { RoomDatas[i].CreateItem().Init(RoomDatas[i]); } } else { if (Grid.childCount > i + 1) { ManaReso.Save(Grid.GetChild(i--)); } } } } else { int startIndex = (CurrentRoomPage - 1)*5; for (int i = startIndex; i < startIndex + 10; i++) { if (RoomDatas.Count > i) { if (Grid.childCount > i + 1) { Grid.GetChild(i).GetComponent().Init(RoomDatas[i]); } else { RoomDatas[i].CreateItem().Init(RoomDatas[i]); } } else { if (Grid.childCount > i + 1) { ManaReso.Save(Grid.GetChild(i--)); } } } } } private static void Download(int limit) { GardenSmartFoxManager.GardenSmartFox.ExecuteAfterCheckConection ( () => { DatabaseManager.GetRoomList(limit); } ); } private static void DownloadNext(Action action) { int limit = (CurrentRoomCount/DownloadVolume + 1)*DownloadVolume; DownloadCallback = new CounterAction(action); Download(limit); } private static int PageAmt = 5; private static List GetRoomDatas(int page) { List roomDatas = new List(); if (RoomDatas.Count >= page*PageAmt) { for (int i = 0; i < PageAmt; i++) { roomDatas.Add(RoomDatas[(page - 1)*PageAmt + i]); } } else { for (int i = 0; i < (PageAmt - page*PageAmt - RoomDatas.Count); i++) { roomDatas.Add(RoomDatas[(page - 1)*PageAmt + i]); } } return roomDatas; } public static void OpenPanel() { ManaReso.Get("Z_BK").TweenForCG(); } public static void ClosePanel() { ManaReso.Get("Z_BK").TweenBacCG(); } public static void EnableFilter() { FilterEnabled = true; ManaReso.SetActive("Z_InfoImg51", true); } public static void DisableFilter() { FilterEnabled = false; ManaReso.SetActive("Z_InfoImg51", false); } public static int Duration; public static int MaxPlayer; public static string CostFml; private static Text DurationLab; private static Text MaxPlayerLab; private static Slider DurationSlider; private static Slider MaxPlayerSlider; public static void CreateRoom() { string rawName = ManaReso.Get("AA_InputField").text; if (string.IsNullOrEmpty(rawName)) { Bubble.Show(null, Language.GetStr("UI", "AA_AllWhiteSpace")); return; } if (StringFilter.ContainSensitiveWord(rawName)) { Bubble.Show(null, Language.GetStr("Common", "ContainSensitiveWord")); return; } //if (ManaCenter.Pay()) //{ //} } public static void OnSliderValueChange(float value) { //if (!DurationSlider.gameObject.activeInHierarchy || !MaxPlayerSlider.gameObject.activeInHierarchy) //{ // return; //} Duration = (int) DurationSlider.value; MaxPlayer = (int) MaxPlayerSlider.value; DurationLab.text = Duration + Language.GetStr("UI", "AAa_Value"); MaxPlayerLab.text = MaxPlayer + Language.GetStr("UI", "AAb_Value"); int cost = (int) Auxiliary.FmlParse(CostFml, "h", Duration.ToString(), "p", MaxPlayer.ToString()); ManaReso.SetText("AA_Desc", Language.GetStr("UI", "AA_Cost") + "<(钻石)>" + cost); if (cost > ManaCenter.Diamond) { ManaReso.SetText("AA_BtnLab", Language.GetStr("UI", "AA_NoEnoughDiamond")); ManaReso.Get