914 lines
35 KiB
C#
914 lines
35 KiB
C#
|
|
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<string, Texture> caches = new Dictionary<string, Texture>();
|
|
private bool startMouse;
|
|
List<string> hands = new List<string>();
|
|
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 btnMore;
|
|
|
|
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<GameRoomModel> _list = new List<GameRoomModel>();
|
|
|
|
private string seachName = "";
|
|
private bool ListChanged = false;
|
|
private bool CreateRoomSuccessed = false;
|
|
PFUIPageHelper pageHelper;
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
RoomRankItem = Resources.Load<GameObject>("UI/Prefab/GameRoom/RoomRankItem");
|
|
RoomCell = Resources.Load<GameObject>("UI/Prefab/GameRoom/Room");
|
|
//分页
|
|
pageHelper = FindObjectOfType<PFUIPageHelper>();
|
|
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<GameRoomCell>().ConfigureCell(item, index);
|
|
}
|
|
|
|
}
|
|
List<GameRoomModel> list;
|
|
private int Total { get; set; }
|
|
private bool CreateClicked { get; set; }
|
|
private void ListenerHandler(List<ReceiveMsgModel> 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<RawImage>();
|
|
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();
|
|
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<ScrollRect>().verticalNormalizedPosition <= 0 ||
|
|
scroll.GetComponent<ScrollRect>().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();
|
|
}
|
|
|
|
//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<GameRoomDownloadTask>().Init(0, item.Key, downloadPanel);
|
|
downLoadList.SetActive(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
var close = transform.Find("MapList/Modal/Close").gameObject;
|
|
if (close != null)
|
|
{
|
|
UIManager.RemoveEvent(close, UnityEngine.EventSystems.EventTriggerType.PointerClick);
|
|
UIManager.AddEvent(close, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e)=> {
|
|
mapList.gameObject.SetActive(false);
|
|
});
|
|
}
|
|
distanceOptions = topContainer.Find("distanceOptions");
|
|
if (distanceOptions != null)
|
|
{
|
|
distance = "";
|
|
distanceOptions.GetComponent<Dropdown>().value = 0;
|
|
var dDropdown = distanceOptions.GetComponent<Dropdown>();
|
|
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();
|
|
});
|
|
}
|
|
//是否AR
|
|
if (favContainer != null)
|
|
{
|
|
isEnableAR = true;//默认勾选ar
|
|
var g = favContainer.Find("Gou").gameObject;
|
|
g.SetActive(isEnableAR);
|
|
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<InputField>().text = "";
|
|
ftname = "";
|
|
searchInput.GetComponent<InputField>().onEndEdit.RemoveAllListeners();
|
|
searchInput.GetComponent<InputField>().onEndEdit.AddListener((s) =>
|
|
{
|
|
var t = searchInput.GetComponent<InputField>().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<string>();
|
|
foreach (Transform t in diffOptions)
|
|
{
|
|
var button = t.GetComponent<Button>();
|
|
var image = t.GetComponent<Image>();
|
|
var text = t.Find("Text").GetComponent<Text>();
|
|
|
|
ColorUtility.TryParseHtmlString("#23232D", out Color cc);
|
|
image.color = cc;
|
|
text.color = new Color(1, 1, 1, 1);
|
|
UIManager.RemoveEvent(button.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick);
|
|
UIManager.AddEvent(button.gameObject, EventTriggerType.PointerClick, (b) =>
|
|
{
|
|
ColorUtility.TryParseHtmlString("#23232D", out Color c1);
|
|
if (image.color.r == c1.r && image.color.g == c1.g && image.color.b == c1.b)
|
|
{
|
|
ColorUtility.TryParseHtmlString("#F93086", out Color c);
|
|
image.color = c;
|
|
text.color = new Color(1, 1, 1, 1);
|
|
hands.Add(MapFilterOptions.diffDict[text.text]);
|
|
}
|
|
else
|
|
{
|
|
ColorUtility.TryParseHtmlString("#6E6E7D", out Color c);
|
|
image.color = c1;
|
|
text.color = new Color(1, 1, 1, 1);
|
|
hands.Remove(MapFilterOptions.diffDict[text.text]);
|
|
}
|
|
scroll.GetComponent<ScrollRect>().verticalNormalizedPosition = 1;
|
|
Refresh();
|
|
});
|
|
}
|
|
}
|
|
//排序条件
|
|
var sorts = topContainer.Find("FilterOptions");
|
|
if (sorts != null)
|
|
{
|
|
var drop = sorts.GetComponent<Dropdown>();
|
|
drop.options = MapFilterOptions.sorts;
|
|
drop.value = 0;
|
|
drop.onValueChanged.RemoveAllListeners();
|
|
drop.onValueChanged.AddListener((int index) =>
|
|
{
|
|
var text = drop.options[index].text;
|
|
|
|
sort = MapFilterOptions.sortsDict[text];
|
|
if (sort == "Trend")
|
|
{
|
|
sort = "Hot";
|
|
}
|
|
var image = sortDir.Find("Image").GetComponent<Image>();
|
|
if (sort == "Near")
|
|
{
|
|
image.sprite = Resources.Load<Sprite>("Images/UP");
|
|
sortDire = "asc";
|
|
}
|
|
else
|
|
{
|
|
image.sprite = Resources.Load<Sprite>("Images/DOWN");
|
|
sortDire = "desc";
|
|
}
|
|
|
|
Refresh();
|
|
});
|
|
}
|
|
//排序
|
|
sortDir = topContainer.Find("Dir");
|
|
if (sortDir)
|
|
{
|
|
var image = sortDir.Find("Image").GetComponent<Image>();
|
|
UIManager.RemoveEvent(sortDir.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick);
|
|
UIManager.AddEvent(sortDir.gameObject, EventTriggerType.PointerClick, (b) =>
|
|
{
|
|
if (image.sprite.name == "DOWN")
|
|
{
|
|
image.sprite = Resources.Load<Sprite>("Images/UP");
|
|
sortDire = "asc";
|
|
}
|
|
else
|
|
{
|
|
image.sprite = Resources.Load<Sprite>("Images/DOWN");
|
|
sortDire = "desc";
|
|
}
|
|
Refresh();
|
|
});
|
|
}
|
|
|
|
Refresh();
|
|
|
|
step1Btn = transform.Find("MapList/Modal/Left/Step1Btn").gameObject;
|
|
step2Btn = transform.Find("MapList/Modal/Left/Step2Btn").gameObject;
|
|
|
|
next = transform.Find("MapList/Modal/Left/Next").gameObject;
|
|
next.GetComponent<Button>().interactable = false;
|
|
next.GetComponent<Button>().enabled = false;
|
|
|
|
previous = transform.Find("MapList/Modal/Left/Previous").gameObject;
|
|
|
|
create = transform.Find("MapList/Modal/Left/Create").gameObject;
|
|
create.GetComponent<Button>().interactable = false;
|
|
create.GetComponent<Button>().enabled = false;
|
|
cancel = transform.Find("MapList/Modal/Left/Cancel").gameObject;
|
|
|
|
right = transform.Find("MapList/Modal/Right").gameObject;
|
|
right2 = transform.Find("MapList/Modal/Right2").gameObject;
|
|
UIManager.RemoveEvent(cancel, UnityEngine.EventSystems.EventTriggerType.PointerClick);
|
|
UIManager.AddEvent(cancel, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
MapList.SetActive(false);
|
|
});
|
|
UIManager.RemoveEvent(next, UnityEngine.EventSystems.EventTriggerType.PointerClick);
|
|
UIManager.AddEvent(next, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleStepBtn(next.name);
|
|
});
|
|
UIManager.RemoveEvent(previous, UnityEngine.EventSystems.EventTriggerType.PointerClick);
|
|
UIManager.AddEvent(previous, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleStepBtn(previous.name);
|
|
});
|
|
UIManager.RemoveEvent(create, UnityEngine.EventSystems.EventTriggerType.PointerClick);
|
|
UIManager.AddEvent(create, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
MapUDPService.SendCreateGameRoom(RoomName, selectedRouteId, Roompwd, UIManager.Now.GetDateTime(), CloseTime, Members, Map.AverageGrade, (Map.TotalClimb ?? 0), Map.Distance, Map.Enable3D, Map.EnableAR, Map.Name, Map.FileName, Map.Url, Map.AltitudeGraph);
|
|
MapList.SetActive(false);
|
|
CreateClicked = true;
|
|
Query();
|
|
});
|
|
}
|
|
|
|
private void InitStep2()
|
|
{
|
|
//关门时间
|
|
btn30 = right2.transform.Find("btn30").gameObject;
|
|
btn40 = right2.transform.Find("btn40").gameObject;
|
|
btn50 = right2.transform.Find("btn50").gameObject;
|
|
btn60 = right2.transform.Find("btn60").gameObject;
|
|
btnMore = right2.transform.Find("btnMore").gameObject;
|
|
//房间人数
|
|
btn2 = right2.transform.Find("btn2").gameObject;
|
|
btn3 = right2.transform.Find("btn3").gameObject;
|
|
btn4 = right2.transform.Find("btn4").gameObject;
|
|
btn5 = right2.transform.Find("btn5").gameObject;
|
|
btn6 = right2.transform.Find("btn6").gameObject;
|
|
//房间名和密码
|
|
var hourInputField = right2.transform.Find("HourInputField").GetComponent<InputField>();
|
|
var minInputField = right2.transform.Find("MinInputField").GetComponent<InputField>();
|
|
var roomNameInputField = right2.transform.Find("RoomNameInputField").GetComponent<InputField>();
|
|
var passwordInputField = right2.transform.Find("PasswordInputField").GetComponent<InputField>();
|
|
btnMore.SetActive(true);
|
|
hourInputField.gameObject.SetActive(false);
|
|
minInputField.gameObject.SetActive(false);
|
|
hourInputField.text = "0";
|
|
minInputField.text = "0";
|
|
RoomName = App.CurrentUser.Nickname + App.GetLocalString("'s Room");
|
|
Roompwd = "";
|
|
roomNameInputField.text = RoomName;
|
|
passwordInputField.text = "";
|
|
hourInputField.GetComponent<Outline>().enabled = false;
|
|
HandleFormInput();
|
|
HandleMembersBtnClick(6, btn6.name);//默认6人
|
|
HandleCloseTimeBtnClick(30, btn30.name);//默认关门时间30min
|
|
roomNameInputField.onValueChanged.RemoveAllListeners();
|
|
//房间名
|
|
roomNameInputField.onValueChanged.AddListener((e) => {
|
|
RoomName = e;
|
|
HandleFormInput();
|
|
});
|
|
//房间密码
|
|
passwordInputField.onValueChanged.RemoveAllListeners();
|
|
passwordInputField.onValueChanged.AddListener((e) => {
|
|
Roompwd = e;
|
|
HandleFormInput();
|
|
});
|
|
|
|
UIManager.AddEvent(minInputField.gameObject, EventTriggerType.Select, (e) => {
|
|
hourInputField.GetComponent<Outline>().enabled = true;
|
|
HandleFormInput();
|
|
});
|
|
UIManager.AddEvent(btn30, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleCloseTimeBtnClick(30, btn30.name);
|
|
});
|
|
UIManager.AddEvent(btn40, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleCloseTimeBtnClick(40, btn40.name);
|
|
});
|
|
UIManager.AddEvent(btn50, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleCloseTimeBtnClick(50, btn50.name);
|
|
});
|
|
UIManager.AddEvent(btn60, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleCloseTimeBtnClick(60, btn60.name);
|
|
});
|
|
UIManager.AddEvent(btnMore, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
btnMore.SetActive(false);
|
|
hourInputField.gameObject.SetActive(true);
|
|
minInputField.gameObject.SetActive(true);
|
|
});
|
|
//小时
|
|
hourInputField.onValueChanged.RemoveAllListeners();
|
|
hourInputField.onValueChanged.AddListener((e) => {
|
|
hours = Convert.ToInt32(e);
|
|
CloseTime = hours * 60 + mins;
|
|
HandleCloseTimeBtnClick(CloseTime, hourInputField.name);
|
|
});
|
|
//分钟
|
|
minInputField.onValueChanged.RemoveAllListeners();
|
|
minInputField.onValueChanged.AddListener((e) => {
|
|
mins = Convert.ToInt32(e);
|
|
CloseTime = hours * 60 + mins;
|
|
HandleCloseTimeBtnClick(CloseTime, minInputField.name);
|
|
});
|
|
|
|
//房间人数
|
|
|
|
UIManager.AddEvent(btn2, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleMembersBtnClick(2, btn2.name);
|
|
});
|
|
UIManager.AddEvent(btn3, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleMembersBtnClick(3, btn3.name);
|
|
});
|
|
UIManager.AddEvent(btn4, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleMembersBtnClick(4, btn4.name);
|
|
});
|
|
UIManager.AddEvent(btn5, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleMembersBtnClick(5, btn5.name);
|
|
});
|
|
UIManager.AddEvent(btn6, EventTriggerType.PointerClick, (e) =>
|
|
{
|
|
HandleMembersBtnClick(6, btn6.name);
|
|
});
|
|
}
|
|
private void HandleStepBtn(string btnName)
|
|
{
|
|
next.SetActive(btnName == previous.name);
|
|
previous.SetActive(btnName != previous.name);
|
|
cancel.SetActive(btnName == previous.name);
|
|
create.SetActive(btnName != previous.name);
|
|
right2.SetActive(btnName != previous.name);
|
|
right.SetActive(btnName == previous.name);
|
|
step1Btn.transform.Find("Title").GetComponent<Text>().color = btnName == previous.name ? Color.white : PFConstants.grey;
|
|
step2Btn.transform.Find("Title").GetComponent<Text>().color = btnName != previous.name ? Color.white : PFConstants.grey;
|
|
previous.transform.Find("Text").GetComponent<Text>().color = btnName == previous.name ? PFConstants.grey : Color.white;
|
|
step1Btn.transform.Find("Bg").gameObject.SetActive(btnName == previous.name);
|
|
step2Btn.transform.Find("Bg").gameObject.SetActive(btnName != previous.name);
|
|
}
|
|
private void HandleFormInput()
|
|
{
|
|
if (Members >= 2 && !string.IsNullOrEmpty(RoomName) && CloseTime > 0)
|
|
{
|
|
create.GetComponent<Image>().color = PFConstants.Pink;
|
|
create.transform.Find("Text").GetComponent<Text>().color = Color.white;
|
|
create.GetComponent<Button>().interactable = true;
|
|
create.GetComponent<Button>().enabled = true;
|
|
}
|
|
else
|
|
{
|
|
ColorUtility.TryParseHtmlString("#5C5C6E", out Color grey);
|
|
ColorUtility.TryParseHtmlString("#23232D", out Color dark);
|
|
create.GetComponent<Image>().color = dark;
|
|
create.transform.Find("Text").GetComponent<Text>().color = grey;
|
|
create.GetComponent<Button>().interactable = false;
|
|
create.GetComponent<Button>().enabled = false;
|
|
}
|
|
}
|
|
private void HandleCloseTimeBtnClick(int closeTime, string btnName)
|
|
{
|
|
ColorUtility.TryParseHtmlString("#3D3E4D", out Color grey);
|
|
ColorUtility.TryParseHtmlString("#F93086", out Color pink);
|
|
CloseTime = closeTime;
|
|
btn30.GetComponent<Image>().color = btn30.name == btnName ? pink : grey;
|
|
btn40.GetComponent<Image>().color = btn40.name == btnName ? pink : grey;
|
|
btn50.GetComponent<Image>().color = btn50.name == btnName ? pink : grey;
|
|
btn60.GetComponent<Image>().color = btn60.name == btnName ? pink : grey;
|
|
HandleFormInput();
|
|
}
|
|
private void HandleMembersBtnClick(int members, string btnName)
|
|
{
|
|
ColorUtility.TryParseHtmlString("#3D3E4D", out Color grey);
|
|
ColorUtility.TryParseHtmlString("#F93086", out Color pink);
|
|
Members = members;
|
|
btn2.GetComponent<Image>().color = btn2.name == btnName ? pink : grey;
|
|
btn3.GetComponent<Image>().color = btn3.name == btnName ? pink : grey;
|
|
btn4.GetComponent<Image>().color = btn4.name == btnName ? pink : grey;
|
|
btn5.GetComponent<Image>().color = btn5.name == btnName ? pink : grey;
|
|
btn6.GetComponent<Image>().color = btn6.name == btnName ? pink : grey;
|
|
HandleFormInput();
|
|
}
|
|
private void ChangeDistance(int index)
|
|
{
|
|
var text = distanceOptions.GetComponent<Dropdown>().options[index].text;
|
|
distance = MapFilterOptions.distanceDict[text];
|
|
scroll.GetComponent<ScrollRect>().verticalNormalizedPosition = 1;
|
|
Refresh();
|
|
}
|
|
private void OnEndDrag(BaseEventData arg0)
|
|
{
|
|
var scrollrect = scroll.GetComponent<ScrollRect>();
|
|
if (scrollrect.verticalNormalizedPosition < 0)
|
|
{
|
|
pageIndex++;
|
|
GetList();
|
|
}
|
|
if (scrollrect.verticalNormalizedPosition >= (pageIndex == 0 ? 1.2 : 1))
|
|
{
|
|
Refresh();
|
|
}
|
|
}
|
|
public void ShowPwdConfirm()
|
|
{
|
|
enterRoomModal.gameObject.SetActive(true);
|
|
}
|
|
//如果本地没有视频文件则弹窗下载否则直接进入房间
|
|
public void ShowDownLoadConfirm()
|
|
{
|
|
var fileName = GameRoom.FileName;
|
|
var path = PFConstants.VideoFolder;
|
|
var filepath = path + "/" + fileName;
|
|
var download = transform.Find("DownloadPanel").gameObject;
|
|
if (GameRoom.EnableAR && !File.Exists(filepath))
|
|
{
|
|
//查询fileUrl
|
|
GameRoom.FileUrl = ConfigHelper.GameRoomApi.GetMapVideoURL(GameRoom.MapRouteId).data;
|
|
download.SetActive(true);
|
|
download.GetComponent<GameRoomDownLoad>().Init(RoomId, GameRoom.FileName, GameRoom.FileUrl, this);
|
|
}
|
|
else
|
|
{
|
|
GetInRoom();
|
|
}
|
|
}
|
|
private GameRoomModel modelGameRoom { get; set; }
|
|
//private GameRoomModel modelGameRoom { get; set; }
|
|
private Text CyclingTimer { get; set; }
|
|
public void ShowCycingPanel(GameRoomModel gameRoomModel)
|
|
{
|
|
ShowStatusModal(cycingRoomModal, gameRoomModel);
|
|
modelGameRoom = gameRoomModel; //倒计时
|
|
CyclingTimer = cycingRoomModal.Find("Modal/Timer").GetComponent<Text>();
|
|
}
|
|
public void ShowDonePanel(int roomId)
|
|
{
|
|
var result = ConfigHelper.GameRoomApi.GetDetail(roomId);
|
|
if (result.result)
|
|
{
|
|
ShowStatusModal(resultRoomModal, result.data);
|
|
resultRoomModal.Find("Modal/EndTime").GetComponent<Text>().text = result.data.EndTime.HasValue?result.data.EndTime.Value.ToLocalTime().ToString(): "--:--:--";
|
|
//排行榜
|
|
var list = result.data.RoomRankingList;
|
|
var content = resultRoomModal.Find("Modal/Scroll View/Viewport/Content");
|
|
Utils.DestroyChildren(content);
|
|
foreach (var item in list)
|
|
{
|
|
var t = Instantiate(RoomRankItem, content);
|
|
t.transform.Find("Bg").gameObject.SetActive(App.CurrentUser.Id == item.UserId);
|
|
t.transform.Find("Rank").GetComponent<Text>().text = item.Rank.ToString().PadLeft(2,'0');
|
|
Utils.DisplayImage(t.transform.Find("Head").GetComponent<RawImage>(), item.WxHeadImg);
|
|
t.transform.Find("Country").GetComponent<RawImage>().texture = UIManager.Instance.loginRegOptions.GetCountryImageByName(item.Country);
|
|
t.transform.Find("Name").GetComponent<Text>().text = item.NickName;
|
|
t.transform.Find("Timer").GetComponent<Text>().text = item.TotalTime;
|
|
}
|
|
}
|
|
}
|
|
private void ShowStatusModal(Transform tr,GameRoomModel data)
|
|
{
|
|
tr.Find("Modal/Id").GetComponent<Text>().text = data.RoomId.ToString().PadLeft(7, '0');
|
|
tr.Find("Modal/RoomName").GetComponent<Text>().text = data.Name;
|
|
tr.Find("Modal/RouteName").GetComponent<Text>().text = data.MapRouteName;
|
|
var graph = tr.Find("Modal/AltitudeGraph").GetComponent<RawImage>();
|
|
var bestHead = tr.Find("Modal/BestTab/Head").GetComponent<RawImage>();
|
|
var bestName = tr.Find("Modal/BestTab/NickName").GetComponent<Text>();
|
|
var bestTimer = tr.Find("Modal/BestTab/Timer").GetComponent<Text>();
|
|
//查询某线路最佳
|
|
var result = ConfigHelper.mapApi.GetMapBestInfo(data.MapRouteId);
|
|
if (result.result && !string.IsNullOrEmpty(result.data.BestNickName))
|
|
{
|
|
bestName.text = result.data.BestNickName;
|
|
bestTimer.text = result.data.BestTotalTime;
|
|
Utils.DisplayImage(bestHead, result.data.BestWxHeadImg);
|
|
}
|
|
Utils.DisplayImage(graph, data.AltitudeGraph);
|
|
tr.Find("Modal/Props/DistanceText").GetComponent<Text>().text = data.Distance.ToString("f1") + "KM";
|
|
tr.Find("Modal/Props/EleText").GetComponent<Text>().text = data.TotalClimb.ToString("f0") + "M";
|
|
tr.Find("Modal/Props/SlopeText").GetComponent<Text>().text = data.AverageGrade.ToString("f1") + "%";
|
|
tr.Find("Modal/StartTime").GetComponent<Text>().text = data.StartTime.Value.ToLocalTime().ToString();
|
|
|
|
var close = tr.Find("Modal/Close").gameObject;
|
|
var quit = tr.Find("Modal/Quit").gameObject;
|
|
UIManager.AddEvent(close, EventTriggerType.PointerClick, (e) => { tr.gameObject.SetActive(false); });
|
|
UIManager.AddEvent(quit, EventTriggerType.PointerClick, (e) => { tr.gameObject.SetActive(false); });
|
|
tr.gameObject.SetActive(true);
|
|
}
|
|
private int RoomId;
|
|
|
|
public void GetInRoom()
|
|
{
|
|
//1.房间人数已经满了
|
|
var max = GameRoom.MaxMembers;
|
|
var count = GameRoom.RoomPlayerList.Count;
|
|
if (count + 1 > max)
|
|
{
|
|
Utils.showToast(gameObject, App.GetLocalString("exceeded the maximum number!"));
|
|
return;
|
|
}
|
|
//2.房间状态不对
|
|
if (GameRoom.Status > 0)
|
|
{
|
|
Utils.showToast(gameObject, App.GetLocalString("Game has already been processing!"));
|
|
return;
|
|
}
|
|
App.gameRoomDetail = GameRoom;
|
|
//发送TCP信息
|
|
MapUDPService.SendJoinGameRoom(App.gameRoomDetail.RoomId,App.CurrentUser.Id,UIManager.Now.GetDateTime().ToUniversalTime());
|
|
UIManager.ShowGameRoomDetailPanel();
|
|
}
|
|
public void SelectRoom(GameRoomModel room)
|
|
{
|
|
GameRoom = room;
|
|
RoomId = GameRoom.RoomId;
|
|
}
|
|
|
|
public int GetRoomId()
|
|
{
|
|
return RoomId;
|
|
}
|
|
public GameRoomModel GetCurrentRoom()
|
|
{
|
|
return GameRoom;
|
|
}
|
|
public void Select(MapRoute map)
|
|
{
|
|
Map = map;
|
|
selectedRouteId = map.Id;
|
|
next.GetComponent<Image>().color = PFConstants.Pink;
|
|
next.transform.Find("Text").GetComponent<Text>().color = Color.white;
|
|
next.GetComponent<Button>().interactable = true;
|
|
next.GetComponent<Button>().enabled = true;
|
|
//Right2绑定值
|
|
var rawImage = right2.transform.Find("RawImage").GetComponent<RawImage>();
|
|
var MapHBImg = right2.transform.Find("MapHBImg").GetComponent<RawImage>();
|
|
var Country = right2.transform.Find("TabContainer/Country").GetComponent<RawImage>();
|
|
var routeName = right2.transform.Find("Name").GetComponent<Text>();
|
|
right2.transform.Find("Id").GetComponent<Text>().text = map.Id.ToString().PadLeft(7,'0');
|
|
Utils.DisplayImageTempDict(rawImage, map.CoverImage, this.caches);
|
|
Utils.DisplayImageTempDict(MapHBImg.GetComponent<RawImage>(), map.AltitudeGraph, this.caches);
|
|
|
|
right2.transform.Find("Name").GetComponent<Text>().text = map.Name;
|
|
var props = right2.transform.Find("Props");
|
|
props.Find("DistanceText").GetComponent<Text>().text = $"{map.Distance.ToString(map.Distance > 1000 ? "#0" : "#0.00")}KM";
|
|
props.Find("EleText").GetComponent<Text>().text = $"{(map.TotalClimb ?? 0.0).ToString(map.TotalClimb > 1000 ? "#0" : "#0.00")}M";
|
|
props.Find("SlopeText").GetComponent<Text>().text = $"{map.AverageGrade.ToString("#0.00")}%";
|
|
props.Find("rideText").GetComponent<Text>().text = map.TheHeat.ToString();
|
|
var tabContainer = right2.transform.Find("TabContainer");
|
|
var diff = tabContainer.Find("Diff");
|
|
diff.Find("Text").GetComponent<Text>().text = map.Hard;
|
|
tabContainer.Find("3d").gameObject.SetActive(map.Enable3D);
|
|
tabContainer.Find("Country").GetComponent<RawImage>().texture = UIManager.Instance.loginRegOptions.GetCountryImage(map.CountryCode);
|
|
|
|
}
|
|
public void Refresh()
|
|
{
|
|
content.transform.DestroyChildren();
|
|
pageIndex = 0;
|
|
isEnd = false;
|
|
GetList();
|
|
}
|
|
|
|
private void onEndEdit()
|
|
{
|
|
var t = searchInput.GetComponent<InputField>().text;
|
|
ftname = t;
|
|
Refresh();
|
|
}
|
|
|
|
private void DisplayMaps(List<MapRoute> list)
|
|
{
|
|
if (map != null)
|
|
{
|
|
foreach (var item in list)
|
|
{
|
|
var obj = Instantiate(map);
|
|
obj.GetComponent<GameRoomMapItem>().Initial(item, caches);
|
|
//obj.SendMessage("Initial", );
|
|
obj.transform.SetParent(content.transform);
|
|
obj.transform.localScale = new Vector3(1, 1, 1);
|
|
}
|
|
}
|
|
}
|
|
private async void GetList()
|
|
{
|
|
if (isEnd) return;
|
|
var res = await ConfigHelper.mapApi.GetList(pageIndex, pageSize, ftname, distance, string.Join(",", hands), is3d, sort, sortDire, isEnableAR:isEnableAR);
|
|
if (res.result)
|
|
{
|
|
if (res.data.Count == 0)
|
|
{
|
|
if (pageIndex != 0)
|
|
{
|
|
isEnd = true;
|
|
scroll.transform.Find("Error").gameObject.SetActive(false);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("当前没查到内容");
|
|
scroll.transform.Find("Error").gameObject.SetActive(true);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isEnd = false;
|
|
DisplayMaps(res.data);
|
|
scroll.transform.Find("Error").gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
}
|
|
//创建房间
|
|
private void CreateGameRoom(BaseEventData data)
|
|
{
|
|
InitStep1();
|
|
InitStep2();
|
|
|
|
next.GetComponent<Image>().color = PFConstants.Dark;
|
|
next.transform.Find("Text").GetComponent<Text>().color = PFConstants.LightGrey;
|
|
next.GetComponent<Button>().interactable = false;
|
|
next.GetComponent<Button>().enabled = false;
|
|
HandleStepBtn(previous.name);
|
|
HandleCloseTimeBtnClick(30, btn30.name);//默认关门时间30min
|
|
|
|
MapList.SetActive(true);
|
|
}
|
|
protected override void OnDisable()
|
|
{
|
|
base.OnDisable();
|
|
MapUDPService.MessageListener = null;
|
|
App.Model = "";
|
|
}
|
|
}
|
|
|