powerfun-unity/Assets/Scripts/UI/Prefab/Panel/GameRoomDetailController.cs

200 lines
6.7 KiB
C#

using Assets.Scenes.Ride.Scripts;
using Assets.Scripts;
using Assets.Scripts.Apis.Models;
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameRoomDetailController : PFUIPanel
{
public RawImage Avatar;
public Text idText;
public Text roomName;
public Text routeName;
public Text distanceText;
public Text eleText;
public Text slopeText;
public Text rideText;
public RawImage altitudeGraph;
public GameObject bestTab;
public Text bestTabName;
public Text bestTabTimer;
public RawImage bestTabHead;
public GameObject readyBtn;
public GameObject startBtn;
public GameObject quitBtn;
public GameObject cancelBtn;
public GameRoomModel GameRoom { get; set; }
public DateTime? StartTime { get; set; }
public int Status { get; set; }
protected override void Start()
{
base.Start();
transform.Find("MainNav").GetComponent<MainNav>().ShowBack();
Utils.DisplayHead(Avatar, App.CurrentUser.WxHeadImg);
UIManager.AddEvent(startBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
{
//判断房间内的人是否都准备
var list = MapUDPService.GetGameRoomList(GameRoom.Id);
var notReady = list.Where(c => c.RoomDetail.Status == 0 && c.RoomDetail.IsOwner == false).Any();
if (notReady)
{
Utils.showToast(gameObject,App.GetLocalString("have to wait for all ready!"));
}
else
{
MapUDPService.SendGameRoomStartTime(App.gameRoomDetail.Id, App.CurrentUser.Id);
}
});
//准备
UIManager.AddEvent(readyBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
{
Status = 1;
readyBtn.SetActive(false);
cancelBtn.SetActive(true);
MapUDPService.SendGameRoomReadyStatus(App.gameRoomDetail.Id, App.CurrentUser.Id, Status);
});
//取消准备
UIManager.AddEvent(cancelBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
{
Status = 0;
readyBtn.SetActive(true);
cancelBtn.SetActive(false);
MapUDPService.SendGameRoomReadyStatus(App.gameRoomDetail.Id, App.CurrentUser.Id, Status);
});
}
public override void Show()
{
base.Show();
GameRoom = App.gameRoomDetail;
Init();
}
float timer = 0f;
private void Update()
{
timer -= Time.deltaTime;
while (timer < 0)
{
TcpHandler();
timer += 1f;
}
}
private void Init()
{
UIManager.AddEvent(startBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
{
//TODO:
});
UIManager.AddEvent(quitBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
{
//TODO:
});
UIManager.AddEvent(cancelBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
{
//TODO:
});
idText.text = GameRoom.Id.ToString().PadLeft(7, '0');
roomName.text = GameRoom.Name;
routeName.text = GameRoom.MapRouteName;
distanceText.text = $"{Math.Round(GameRoom.Distance, 1)}KM";
eleText.text = $"{Math.Round(GameRoom.TotalClimb, 0)}M";
slopeText.text = $"{Math.Round(GameRoom.AverageGrade, 1)}%";
if (!string.IsNullOrEmpty(GameRoom.BestNickName))
{
bestTab.SetActive(true);
bestTabName.text = GameRoom.BestNickName;
bestTabTimer.text = GameRoom.BestTotalTime;
Utils.DisplayHead(bestTabHead, GameRoom.BestWxHeadImg);
}
Utils.DisplayHead(altitudeGraph, GameRoom.AltitudeGraph);
}
private void TcpHandler()
{
MapUDPService.Send(0, App.CurrentUser.Id, new double[] { 0d, 0d }, competitionId: 0, roomId: GameRoom.Id);
var list = MapUDPService.GetGameRoomList(GameRoom.Id);
var playerList = FindObjectsOfType<GameRoomPlayerPanel>();
//自己
var mine = list.Where(c => c.RoomDetail.UserId == App.CurrentUser.Id).FirstOrDefault();
if (mine != null)
{
//是否是房主
var owner = mine.RoomDetail.IsOwner;
readyBtn.SetActive(!owner);
startBtn.SetActive(owner);
//是否准备
//readyBtn.SetActive(!owner && mine.RoomDetail.Status == 0);
//cancelBtn.SetActive(!owner && mine.RoomDetail.Status == 1);
}
//新增/更新
foreach (var item in list)
{
var current = playerList.Where(c => c.UserId == item.Id).FirstOrDefault();
if (current == null)
{
var s = playerList.Where(c => c.UserId == 0).OrderBy(c => c.sort).FirstOrDefault();
if (s != null)
{
s.Init(item.Id, item.Name, item.HeadImage, item.Weight, item.FTP, item.RoomDetail.IsOwner, item.RoomDetail.Status);
}
}
else
{
current.UpdatePlayer(item.Id, item.Name, item.HeadImage, item.Weight, item.FTP, item.RoomDetail.IsOwner, item.RoomDetail.Status);
}
}
//删除
foreach (var item in playerList)
{
if (item.UserId != 0)
{
var current = list.Where(c => c.Id == item.UserId).FirstOrDefault();
if (current == null)
{
item.ShowInviteModal();
}
var myself = list.Where(c => c.RoomDetail.UserId == App.CurrentUser.Id).FirstOrDefault();
if (myself == null)
{
Utils.showToast(gameObject, App.GetLocalString("you've been kicked out of the room"));
UIManager.ShowGameRoomListPanel();
}
}
}
//收到服务器开始命令进入 loading页面
var roomStart = list.Where(c => c.Room != null && c.Room.Status == 1).FirstOrDefault();
if (roomStart != null)
{
//UIManager.ShowGameRoomLoadingPanel();
//路线
App.RouteIdParam = GameRoom.MapRouteId;
if (GameRoom.EnableAR)
{
SceneManager.LoadScene("VideoPlay");
}
else
{
SceneManager.LoadScene("Ride");
}
}
}
protected override void OnDisable()
{
//App.gameRoomDetail = null;
}
protected override void OnDestroy()
{
//App.gameRoomDetail = null;
}
}