对战初步完成

This commit is contained in:
lishuo committed 2022-05-10 19:24:07 +08:00
1 parent b0c0890ca3
commit 509c309252
55 files changed
+7079 -6748

No files matched your search

@@ -9,6 +9,7 @@ using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using Assets.Scripts;
using Assets.Scenes.Ride.Scripts;
public class GameRoomCell : MonoBehaviour, ICell, IBeginDragHandler, IDragHandler, IEndDragHandler,IScrollHandler
{
@@ -39,18 +40,21 @@ public class GameRoomCell : MonoBehaviour, ICell, IBeginDragHandler, IDragHandle
public RawImage AltitudeGraphImg;
public RawImage Owner;
public RawImage Head1;
public RawImage Head2;
public RawImage Head3;
public RawImage Head4;
public RawImage Head5;
public GameObject IconOwnerLight;
public RawImage HeadPrefab;
public Transform Content;
public GameObject JoinBtn;
public GameObject CycingBtn;
public GameObject ResultBtn;
public GameObject Lock;
public GameObject LockL;
public GameObject D2;
public GameObject D3;
public GameObject AR;
public GameObject D2L;
public GameObject D3L;
public GameObject ARL;
private ScrollRect Scroll;
private bool IsLock;
@@ -70,11 +74,42 @@ public class GameRoomCell : MonoBehaviour, ICell, IBeginDragHandler, IDragHandle
{
LockL.SetActive(IsLock);
Lock.SetActive(false);
D2.SetActive(false);
D2L.SetActive(Enable2d);
D3.SetActive(false);
D3L.SetActive(Enable3d);
AR.SetActive(false);
ARL.SetActive(EnableAR);
var list = GetComponentsInChildren<GameRoomHead>();
foreach (var item in list)
{
item.ShowLight();
}
});
UIManager.AddEvent(gameObject, EventTriggerType.PointerExit, (e) =>
{
LockL.SetActive(false);
Lock.SetActive(IsLock);
D2.SetActive(Enable2d);
D2L.SetActive(false);
D3.SetActive(Enable3d);
D3L.SetActive(false);
AR.SetActive(EnableAR);
ARL.SetActive(false);
var list = GetComponentsInChildren<GameRoomHead>();
foreach (var item in list)
{
item.ShowShadow();
}
});
UIManager.AddEvent(JoinBtn, EventTriggerType.PointerClick, (e) =>
{
@@ -88,6 +123,16 @@ public class GameRoomCell : MonoBehaviour, ICell, IBeginDragHandler, IDragHandle
manager.ShowDownLoadConfirm();
}
});
//对战正在进行
UIManager.AddEvent(CycingBtn, EventTriggerType.PointerClick, (e) =>
{
manager.ShowCycingPanel(gameRoom);
});
//对战已经结束
UIManager.AddEvent(ResultBtn, EventTriggerType.PointerClick, (e) =>
{
manager.ShowDonePanel(gameRoom.RoomId);
});
}
private float timer = 1f;
private void Update()
@@ -98,7 +143,9 @@ public class GameRoomCell : MonoBehaviour, ICell, IBeginDragHandler, IDragHandle
timer += 1f;
}
}
private bool Enable2d { get; set; }
private bool Enable3d { get; set; }
private bool EnableAR { get; set; }
//This is called from the SetCell method in DataSource
public void ConfigureCell(GameRoomModel cell, int cellIndex)
{
@@ -119,15 +166,39 @@ public class GameRoomCell : MonoBehaviour, ICell, IBeginDragHandler, IDragHandle
RouteNameTxt.text = cell.MapRouteName;
RouteNameLightTxt.text = cell.MapRouteName;
IdTxt.text = cell.Id.ToString().PadLeft(7,'0');
IdTxt.text = cell.RoomId.ToString().PadLeft(7,'0');
IsLock = cell.IsLock;
Id = cell.Id;
Id = cell.RoomId;
//房间状态
JoinBtn.SetActive(cell.Status == 0);
CycingBtn.SetActive(cell.Status == 1);
ResultBtn.SetActive(cell.Status == 2);
Enable2d = !cell.Enable3D && !cell.EnableAR;
Enable3d = cell.Enable3D && !cell.EnableAR;
EnableAR = cell.EnableAR;
D2.SetActive(Enable2d);
D3.SetActive(Enable3d);
AR.SetActive(EnableAR);
Lock.SetActive(IsLock);
LockL.SetActive(false);
Utils.DisplayImage(AltitudeGraphImg, cell.AltitudeGraph);
Utils.DisplayImage(Owner, cell.WxHeadImg);
var playerList = cell.RoomPlayerList;
if (playerList != null)
{
MembersTxt.text = $"{playerList.Count}/{cell.MaxMembers}";
var s = playerList.Select(c => c.UserId);
var user = ConfigHelper.mapApi.GetOnlineUserInfo(s);
foreach (var item in playerList)
{
var obj = Instantiate(HeadPrefab, Content);
obj.GetComponent<GameRoomHead>().Set(item.WxHeadImage,item.IsOwner);
}
}
}
public void UpdateItem(string name, string gender, string id)
{
@@ -0,0 +1,43 @@
using Assets.Scripts;
using UnityEngine;
using UnityEngine.UI;
public class GameRoomHead : MonoBehaviour
{
public Image IconOwnerLightImg;
public Image IconOwnerImg;
public RawImage Head;
private bool IsOwner { get; set; }
private float timer = 1f;
private void Update()
{
timer -= Time.deltaTime;
while (timer < 0)
{
timer += 1f;
}
}
public void Set(string headUrl,bool isOwner)
{
Utils.DisplayImage(Head, headUrl);
IsOwner = isOwner;
IconOwnerImg.gameObject.SetActive(isOwner);
}
public void ShowLight()
{
IconOwnerImg.gameObject.SetActive(false);
IconOwnerLightImg.gameObject.SetActive(IsOwner);
}
public void ShowShadow()
{
IconOwnerImg.gameObject.SetActive(IsOwner);
IconOwnerLightImg.gameObject.SetActive(false);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c7fd898b102fbad479f0d0037b505976
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,6 +1,7 @@
using Assets.Scenes.Ride.Scripts;
using Assets.Scripts;
using Assets.Scripts.Apis.Models;
using Assets.Scripts.UI.Control;
using PolyAndCode.UI;
using System;
using System.Collections.Generic;
@@ -11,11 +12,8 @@ using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
class GameRoomList : MonoBehaviour, IRecyclableScrollRectDataSource
class GameRoomList : MonoBehaviour
{
[SerializeField]
RecyclableScrollRect _recyclableScrollRect;
[SerializeField]
RectTransform _rectTransform;
@@ -29,18 +27,33 @@ class GameRoomList : MonoBehaviour, IRecyclableScrollRectDataSource
private int _dataLength;
private bool _isInit;
private GameObject RoomCell { get; set; }
//Dummy data List
private List<GameRoomModel> _list = new List<GameRoomModel>();
private string seachName = "";
PFUIPageHelper pageHelper;
//Recyclable scroll rect's data source must be assigned in Awake.
private void Awake()
{
_recyclableScrollRect.DataSource = this;
RoomCell = Resources.Load<GameObject>("UI/Prefab/GameRoom/Room");
//分页
pageHelper = FindObjectOfType<PFUIPageHelper>();
pageHelper.PageIndex = 0;
pageHelper.PageSize = 6;
pageHelper.Register((e) =>
{
_ = GetDataAsync();
});
_ = GetDataAsync();
_searchInputField.onValueChanged.AddListener((e) => {
if (!string.IsNullOrEmpty(e))
_searchInputField.onValueChanged.AddListener((e) => { seachName = e; });
_searchInputField.onEndEdit.AddListener((e) => {
if (!string.IsNullOrEmpty(name))
{
_ = GetDataAsync(Convert.ToInt32(e));
_ = GetDataAsync();
}
else
{
@@ -53,14 +66,23 @@ class GameRoomList : MonoBehaviour, IRecyclableScrollRectDataSource
{
_ = GetDataAsync();
}
private async Task GetDataAsync(int? id =null)
private async Task GetDataAsync()
{
if (_list != null) _list.Clear();
var result = await ConfigHelper.GameRoomApi.GetList(0, 1000, id);
var result = await ConfigHelper.GameRoomApi.GetList(pageHelper.PageIndex, pageHelper.PageSize, seachName);
if (result.result)
{
_list = result.data;
_recyclableScrollRect.ReloadData();
Utils.DestroyChildren(_rectTransform);
_list = result.data.List;
int index = 0;
foreach (var item in _list)
{
index++;
var g = Instantiate(RoomCell, _rectTransform);
g.GetComponent<GameRoomCell>().ConfigureCell(item, index);
}
pageHelper.Total = result.data.Total;
pageHelper.Build();
}
}
float timer = 1f;
@@ -72,28 +94,5 @@ class GameRoomList : MonoBehaviour, IRecyclableScrollRectDataSource
timer += 1f;
}
}
#region DATA-SOURCE
/// <summary>
/// Data source method. return the list length.
/// </summary>
public int GetItemCount()
{
return _list.Count;
}
/// <summary>
/// Data source method. Called for a cell every time it is recycled.
/// Implement this method to do the necessary cell configuration.
/// </summary>
public void SetCell(ICell cell, int index)
{
//Casting to the implemented Cell
var item = cell as GameRoomCell;
item.ConfigureCell(_list[index], index);
}
#endregion
}
@@ -134,7 +134,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
var fileName = map.FileName;
var path = PFConstants.VideoFolder;
var filepath = path + "/" + fileName;
if ((map.EnableAR && !File.Exists(filepath) )|| !map.EnableAR)
//if ((map.EnableAR && !File.Exists(filepath) )|| !map.EnableAR)
{
var list = FindObjectsOfType<GameRoomMapItem>();
foreach (var item in list)
@@ -28,20 +28,26 @@ class GameRoomPassword : MonoBehaviour
passwordInput.text = "";
}
private async void ConfirmClick(BaseEventData baseEventData)
private void ConfirmClick(BaseEventData baseEventData)
{
if (string.IsNullOrEmpty(Password))
{
Utils.showToast(gameObject, App.GetLocalString("room password can not be empty"));
return;
}
var RoomId = manager.GetRoomId();
var result = await ConfigHelper.GameRoomApi.ConfirmRoomPwd(RoomId, Password);
if (!result.result)
var room = manager.GetCurrentRoom();
if (room != null && !room.Password.Equals(Password))
{
Utils.showToast(gameObject, result.errMsg);
Utils.showToast(gameObject, App.GetLocalString("Wrong password"));
return;
}
//var RoomId = manager.GetRoomId();
//var result = await ConfigHelper.GameRoomApi.ConfirmRoomPwd(RoomId, Password);
//if (!result.result)
//{
// Utils.showToast(gameObject, result.errMsg);
// return;
//}
Refresh();
gameObject.SetActive(false);
manager.ShowDownLoadConfirm();
@@ -27,12 +27,14 @@ class GameRoomPlayerPanel : MonoBehaviour
public int UserId { get; set; }
public bool NotUse { get; private set; }
private void Start()
{
var manager = FindObjectOfType<GameRoomDetailController>();
var inviteBtn = inviteModal.transform.Find("InviteBtn").gameObject;
UIManager.AddEvent(inviteBtn,EventTriggerType.PointerClick,(e)=> {
Utils.CopyToClipboard($"GameRoom/{manager.GameRoom.Id}");
Utils.CopyToClipboard($"GameRoom/{manager.GameRoom.RoomId}");
Utils.showToast(transform.parent.gameObject, App.GetLocalString("copy to clipboard successfully!"));
});
UIManager.AddEvent(gameObject, EventTriggerType.PointerClick, (e) =>
@@ -45,11 +47,11 @@ class GameRoomPlayerPanel : MonoBehaviour
});
UIManager.AddEvent(kickBtn, EventTriggerType.PointerClick, (e) =>
{
MapUDPService.SendGameRoomKick(App.gameRoomDetail.Id, UserId, App.CurrentUser.Id);
MapUDPService.SendGameRoomKick(App.gameRoomDetail.RoomId, UserId, App.CurrentUser.Id);
});
}
public void Init(int userId, string userName,string headUrl,double weight, float ftp,bool isOwner,int Status)
public void Init(int userId, string userName,string headUrl,double weight, float ftp,bool isOwner,int Status,int sex)
{
UserId = userId;
inviteModal.SetActive(false);
@@ -65,7 +67,7 @@ class GameRoomPlayerPanel : MonoBehaviour
ready.SetActive(!isOwner && Status == 1);
}
public void UpdatePlayer(int userId, string userName, string headUrl, double weight, float ftp, bool isOwner, int Status)
public void UpdatePlayer(int userId, string userName, string headUrl, double weight, float ftp, bool isOwner, int Status,int sex)
{
UserId = userId;
inviteModal.SetActive(false);
@@ -91,22 +93,20 @@ class GameRoomPlayerPanel : MonoBehaviour
{
ready.SetActive(false);
}
public void ForceQuit()
{
//TODO:踢人
NotInUse();
}
public void ShowQuitModal()
{
kickModal.SetActive(true);
}
public void ShowInviteModal()
{
NotUse = false;
UserId = 0;
notInUseModal.SetActive(false);
inviteModal.SetActive(true);
}
public void NotInUse()
{
NotUse = true;
UserId = 0;
notInUseModal.SetActive(true);
}
@@ -115,5 +115,10 @@ class GameRoomPlayerPanel : MonoBehaviour
{
me.SetActive(true);
}
private void OnDisable()
{
ShowInviteModal();
}
}
@@ -0,0 +1,51 @@
using Assets.Scripts.Apis.Models;
using System;
using UnityEngine;
using UnityEngine.UI;
public class GameRoomCountDownController : PFUIPanel
{
public Text count;
private int Seconds { get; set; }
public GameRoomModel GameRoom { get; set; }
private Action Callback { get; set; }
protected override void Awake()
{
base.Awake();
}
public override void Show()
{
base.Show();
}
public void Init(int seconds,Action action)
{
Seconds = seconds;
Callback = action;
}
float timer = 0f;
private void Update()
{
timer -= Time.deltaTime;
while (timer < 0)
{
if (Seconds == 0)
{
Callback?.Invoke();
}
if (Seconds < 0)
{
gameObject.SetActive(false);
}
count.text = Seconds.ToString();
Seconds--;
timer += 1f;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b84f9a966f56dc54d8e49acc631ae62f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -8,6 +8,7 @@ using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using Assets.Scenes.Ride.Scripts.Model;
public class GameRoomDetailController : PFUIPanel
{
@@ -31,27 +32,35 @@ public class GameRoomDetailController : PFUIPanel
public GameObject quitBtn;
public GameObject cancelBtn;
public GameObject d2;
public GameObject d3;
public GameObject ar;
public GameRoomModel GameRoom { get; set; }
public DateTime? StartTime { get; set; }
public int Status { get; set; }
protected override void Start()
{
base.Start();
UIManager.AddBackHandler((e) =>
{
MapUDPService.SendGameRoomKick(GameRoom.RoomId,App.CurrentUser.Id,App.CurrentUser.Id);
App.gameRoomDetail = null;
});
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();
var list = GameRoom.RoomPlayerList;
var notReady = list.Where(c => c.Status == 0 && c.IsOwner == false).Any();
if (notReady)
{
Utils.showToast(gameObject,App.GetLocalString("have to wait for all ready!"));
Utils.showToast(gameObject, App.GetLocalString("have to wait for all ready!"));
}
else
{
MapUDPService.SendGameRoomStartTime(App.gameRoomDetail.Id, App.CurrentUser.Id);
}
MapUDPService.SendGameRoomStartTime(App.gameRoomDetail.RoomId, App.CurrentUser.Id);
}
});
//准备
UIManager.AddEvent(readyBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
@@ -59,7 +68,7 @@ public class GameRoomDetailController : PFUIPanel
Status = 1;
readyBtn.SetActive(false);
cancelBtn.SetActive(true);
MapUDPService.SendGameRoomReadyStatus(App.gameRoomDetail.Id, App.CurrentUser.Id, Status);
MapUDPService.SendGameRoomReadyStatus(App.gameRoomDetail.RoomId, App.CurrentUser.Id, Status);
});
//取消准备
UIManager.AddEvent(cancelBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
@@ -67,133 +76,180 @@ public class GameRoomDetailController : PFUIPanel
Status = 0;
readyBtn.SetActive(true);
cancelBtn.SetActive(false);
MapUDPService.SendGameRoomReadyStatus(App.gameRoomDetail.Id, App.CurrentUser.Id, Status);
MapUDPService.SendGameRoomReadyStatus(App.gameRoomDetail.RoomId, App.CurrentUser.Id, Status);
});
//退出
UIManager.AddEvent(quitBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e) =>
{
App.gameRoomDetail = null;
MapUDPService.SendGameRoomKick(GameRoom.RoomId, App.CurrentUser.Id, App.CurrentUser.Id);
UIManager.ShowGameRoomListPanel();
});
}
public override void Show()
{
base.Show();
GameRoom = App.gameRoomDetail;
Init();
}
private bool DataSourceChanged { get; set; }
private void ListenerHandler(List<ReceiveMsgModel> message)
{
try
{
var detail = message.FirstOrDefault();
if (detail != null)
{
if (detail.RoomList != null)
{
GameRoom = detail.RoomList.Where(c => c.RoomId == GameRoom.RoomId).FirstOrDefault();
DataSourceChanged = true;
}
}
}
catch (Exception e)
{
}
}
float timer = 0f;
private void Update()
{
TcpHandler();
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');
App.Model = "GameRoom";
MapUDPService.MessageListener = ListenerHandler;
GameRoom = App.gameRoomDetail;
var enable2d = !GameRoom.Enable3D && !GameRoom.EnableAR;
var enable3d = GameRoom.Enable3D && !GameRoom.EnableAR;
d2.SetActive(enable2d);
d3.SetActive(enable3d);
ar.SetActive(GameRoom.EnableAR);
DataSourceChanged = true;
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, 0, 1, GameRoom.RoomId.ToString());
readyBtn.SetActive(true);
cancelBtn.SetActive(false);
startBtn.SetActive(false);
idText.text = GameRoom.RoomId.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))
//查询某线路最佳
var result = ConfigHelper.mapApi.GetMapBestInfo(GameRoom.MapRouteId);
if (result.result && !string.IsNullOrEmpty(result.data.BestNickName))
{
bestTab.SetActive(true);
bestTabName.text = GameRoom.BestNickName;
bestTabTimer.text = GameRoom.BestTotalTime;
Utils.DisplayHead(bestTabHead, GameRoom.BestWxHeadImg);
bestTabName.text = result.data.BestNickName;
bestTabTimer.text = result.data.BestTotalTime;
Utils.DisplayHead(bestTabHead, result.data.BestWxHeadImg);
}
Utils.DisplayHead(altitudeGraph, GameRoom.AltitudeGraph);
var playerList = FindObjectsOfType<GameRoomPlayerPanel>();
foreach (var item in playerList)
{
if (GameRoom.MaxMembers - item.sort < 0)
{
item.NotInUse();
}
else
{
item.ShowInviteModal();
}
}
}
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)
if (DataSourceChanged)
{
//是否是房主
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 playerList = FindObjectsOfType<GameRoomPlayerPanel>();
var list = GameRoom.RoomPlayerList;
//自己
var mine = list.Where(c => c.UserId == App.CurrentUser.Id).FirstOrDefault();
if (mine != 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);
}
//是否是房主
var owner = mine.IsOwner;
readyBtn.SetActive(!owner);
startBtn.SetActive(owner);
}
else
//新增/更新
foreach (var item in list)
{
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();
var userName =item.Name;
var headurl = item.WxHeadImage;
var ftp = item.FTP;
var weight = item.Weight;
var sex = item.Sex;
var current = playerList.Where(c => c.UserId == item.UserId).FirstOrDefault();
if (current == null)
{
item.ShowInviteModal();
var s = playerList.Where(c => c.UserId == 0 && c.NotUse == false).OrderBy(c => c.sort).FirstOrDefault();
if (s != null)
{
s.Init(item.UserId, userName, headurl, weight, ftp, item.IsOwner, item.Status,sex);
}
}
var myself = list.Where(c => c.RoomDetail.UserId == App.CurrentUser.Id).FirstOrDefault();
if (myself == null)
else
{
Utils.showToast(gameObject, App.GetLocalString("you've been kicked out of the room"));
UIManager.ShowGameRoomListPanel();
current.UpdatePlayer(item.UserId, userName, headurl, weight, ftp, item.IsOwner, item.Status,sex);
}
}
}
//收到服务器开始命令进入 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)
//删除
foreach (var item in playerList)
{
SceneManager.LoadScene("VideoPlay");
if (item.UserId != 0)
{
var current = list.Where(c => c.UserId == item.UserId).FirstOrDefault();
if (current == null)
{
item.ShowInviteModal();
}
var myself = list.Where(c => c.UserId == App.CurrentUser.Id).FirstOrDefault();
//被移除房间 or 掉线 or
if (myself == null)
{
//Utils.showToast(gameObject, App.GetLocalString("you've been kicked out of the room"));
UIManager.ShowGameRoomListPanel();
}
}
}
else
//收到服务器开始命令进入 loading页面
if (GameRoom.Status == 1)
{
SceneManager.LoadScene("Ride");
//路线
App.RouteIdParam = GameRoom.MapRouteId;
if (GameRoom.EnableAR)
{
SceneManager.LoadScene("VideoPlay");
}
else
{
SceneManager.LoadScene("Ride");
}
}
DataSourceChanged = false;
}
}
protected override void OnDisable()
{
//App.gameRoomDetail = null;
}
protected override void OnDestroy()
{
//App.gameRoomDetail = null;
}
}
@@ -1,9 +1,13 @@
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;
@@ -63,6 +67,10 @@ public class GameRoomListController : PFUIPanel
private GameObject btn6;
private Transform enterRoomModal;
private Transform cycingRoomModal;
private Transform resultRoomModal;
private GameObject RoomRankItem;
private string RoomName;
private string Roompwd;
@@ -72,9 +80,93 @@ public class GameRoomListController : PFUIPanel
private int Members;
private GameRoomModel GameRoom;
[SerializeField]
RectTransform _rectTransform;
[SerializeField]
InputField _searchInputField;
[SerializeField]
GameObject _searchBtn;
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) =>
{
});
_searchInputField.onValueChanged.AddListener((e) => { seachName = e; });
_searchInputField.onEndEdit.AddListener((e) => {
seachName = e;
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
});
UIManager.AddEvent(_searchBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, Search);
}
private void Search(BaseEventData data)
{
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
}
private void Refreash()
{
Utils.DestroyChildren(_rectTransform);
if (list == null)
return;
int index = 0;
foreach (var item in list)
{
index++;
var g = Instantiate(RoomCell, _rectTransform);
g.GetComponent<GameRoomCell>().ConfigureCell(item, index);
}
pageHelper.Total = 10;
pageHelper.Build();
}
List<GameRoomModel> list;
private void ListenerHandler(List<ReceiveMsgModel> message)
{
try
{
//查询列表
var roomList = message.Where(c => c.RoomList != null).FirstOrDefault();
if (roomList != null)
{
list = roomList.RoomList;
ListChanged = true;
}
//查询自己当前创建的房间信息并进入
var info = message.Where(c => c.RoomList.Where(o => o.UserId == App.CurrentUser.Id).Any()).FirstOrDefault();
if (info != null)
{
GameRoom = info.RoomList[0];
App.gameRoomDetail = GameRoom;
CreateRoomSuccessed = true;
}
}
catch (Exception e)
{
}
}
protected override void Start()
{
@@ -86,30 +178,41 @@ public class GameRoomListController : PFUIPanel
MapList = transform.Find("MapList").gameObject;
enterRoomModal = transform.Find("EnterRoomModal");
cycingRoomModal = transform.Find("GameRoomInProgress");
resultRoomModal = transform.Find("GameRoomDone");
InitStep1();
}
public override void Show()
{
base.Show();
App.Model = "GameRoom";
MapUDPService.MessageListener = ListenerHandler;
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
}
float timer = 1f;
private void Update()
{
if (Input.GetAxis("Mouse ScrollWheel") != 0)
timer -= Time.deltaTime;
if (cycingRoomModal.gameObject.activeSelf)
{
if (scroll.GetComponent<ScrollRect>().verticalNormalizedPosition <= 0 ||
scroll.GetComponent<ScrollRect>().verticalNormalizedPosition >= (pageIndex == 0 ? 1.2 : 1))
{
startMouse = true;
}
var s = UIManager.Now.GetDateTime() - modelGameRoom.StartTime.Value.ToLocalTime();
CyclingTimer.text = Helper.FormatTicks((int)s.TotalSeconds);
}
else
while (timer < 0)
{
if (startMouse)
if (ListChanged)
{
startMouse = false;
OnEndDrag(null);
Refreash();
ListChanged = false;
}
}
if (Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Return))
{
onEndEdit();
if (CreateRoomSuccessed & CreateClicked)
{
CreateRoomSuccessed = false;
CreateClicked = false;
UIManager.ShowGameRoomDetailPanel();
}
timer += 1f;
}
}
private void InitStep1()
@@ -128,6 +231,8 @@ public class GameRoomListController : PFUIPanel
distanceOptions = topContainer.Find("distanceOptions");
if (distanceOptions != null)
{
distance = "";
distanceOptions.GetComponent<Dropdown>().value = 0;
var dDropdown = distanceOptions.GetComponent<Dropdown>();
dDropdown.options = MapFilterOptions.distances;
dDropdown.onValueChanged.AddListener(ChangeDistance);
@@ -138,6 +243,9 @@ public class GameRoomListController : PFUIPanel
//是否是3d
if (tdContainer != null)
{
var g = tdContainer.Find("Gou").gameObject;
g.SetActive(false);
is3d = false;
UIManager.AddEvent(tdContainer.gameObject, EventTriggerType.PointerClick, (b) =>
{
var gou = tdContainer.Find("Gou").gameObject;
@@ -150,6 +258,9 @@ public class GameRoomListController : PFUIPanel
//是否收藏
if (favContainer != null)
{
var g = favContainer.Find("Gou").gameObject;
g.SetActive(false);
isFav = false;
UIManager.AddEvent(favContainer.gameObject, EventTriggerType.PointerClick, (b) =>
{
var gou = favContainer.Find("Gou").gameObject;
@@ -163,6 +274,8 @@ public class GameRoomListController : PFUIPanel
searchInput = topContainer.Find("SearchInput");
if (searchInput != null)
{
searchInput.GetComponent<InputField>().text = "";
ftname = "";
searchInput.GetComponent<InputField>().onEndEdit.AddListener((s) =>
{
var t = searchInput.GetComponent<InputField>().text;
@@ -178,11 +291,16 @@ public class GameRoomListController : PFUIPanel
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.AddEvent(button.gameObject, EventTriggerType.PointerClick, (b) =>
{
ColorUtility.TryParseHtmlString("#23232D", out Color c1);
@@ -291,19 +409,19 @@ public class GameRoomListController : PFUIPanel
HandleStepBtn(previous.name);
});
UIManager.AddEvent(create, EventTriggerType.PointerClick, async (e) =>
UIManager.AddEvent(create, EventTriggerType.PointerClick, (e) =>
{
var result = await ConfigHelper.GameRoomApi.Add(RoomName,selectedRouteId,Roompwd,UIManager.Now.GetDateTime(),CloseTime,Members);
if (result.result)
{
MapList.SetActive(false);
}
else
{
UIManager.ShowAlert("error", result.errMsg);
}
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;
});
}
private bool CreateClicked { get; set; }
private void ResetMapList()
{
}
private void InitStep2()
{
//关门时间
@@ -322,6 +440,16 @@ public class GameRoomListController : PFUIPanel
var minInputField = right2.transform.Find("MinInputField").GetComponent<InputField>();
var roomNameInputField = right2.transform.Find("RoomNameInputField").GetComponent<InputField>();
var passwordInputField = right2.transform.Find("PasswordInputField").GetComponent<InputField>();
hourInputField.text = "0";
minInputField.text = "0";
roomNameInputField.text = "";
passwordInputField.text = "";
RoomName = "";
Roompwd = "";
hourInputField.GetComponent<Outline>().enabled = false;
HandleFormInput();
HandleCloseTimeBtnClick(0, "");
HandleMembersBtnClick(0, "");
//房间名
roomNameInputField.onValueChanged.AddListener((e) => {
RoomName = e;
@@ -336,11 +464,10 @@ public class GameRoomListController : PFUIPanel
hourInputField.GetComponent<Outline>().enabled = true;
HandleFormInput();
});
UIManager.AddEvent(btn30,EventTriggerType.PointerClick, (e) =>
{
HandleCloseTimeBtnClick(30, btn30.name);
});
UIManager.AddEvent(btn30, EventTriggerType.PointerClick, (e) =>
{
HandleCloseTimeBtnClick(30, btn30.name);
});
UIManager.AddEvent(btn40, EventTriggerType.PointerClick, (e) =>
{
HandleCloseTimeBtnClick(40, btn40.name);
@@ -420,7 +547,7 @@ public class GameRoomListController : PFUIPanel
create.GetComponent<Button>().enabled = false;
}
}
private void HandleCloseTimeBtnClick(int closeTime,string btnName)
private void HandleCloseTimeBtnClick(int closeTime, string btnName)
{
ColorUtility.TryParseHtmlString("#3D3E4D", out Color grey);
ColorUtility.TryParseHtmlString("#F93086", out Color pink);
@@ -431,7 +558,7 @@ public class GameRoomListController : PFUIPanel
btn60.GetComponent<Image>().color = btn60.name == btnName ? pink : grey;
HandleFormInput();
}
private void HandleMembersBtnClick(int members,string btnName)
private void HandleMembersBtnClick(int members, string btnName)
{
ColorUtility.TryParseHtmlString("#3D3E4D", out Color grey);
ColorUtility.TryParseHtmlString("#F93086", out Color pink);
@@ -474,49 +601,114 @@ public class GameRoomListController : PFUIPanel
var path = PFConstants.VideoFolder;
var filepath = path + "/" + fileName;
var download = transform.Find("DownloadPanel").gameObject;
if (!File.Exists(filepath))
if (GameRoom.EnableAR && !File.Exists(filepath))
{
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)
{
if (File.Exists(filepath))
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)
{
GetInRoom();
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>();
bestName.text = data.BestNickName;
bestTimer.text = data.BestTotalTime;
Utils.DisplayImage(graph, data.AltitudeGraph);
Utils.DisplayImage(bestHead, data.BestWxHeadImg);
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 timegap = data.StartTime.Value.ToLocalTime() - UIManager.Now.GetDateTime();
//if (timegap.Ticks > 0)
//{
// tr.Find("Modal/StartTime").GetComponent<Text>().text = Helper.FormatTicks((int)timegap.Ticks);
//}
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()
{
var result = ConfigHelper.GameRoomApi.GetDetail(RoomId);
if (result.result)
//1.房间人数已经满了
var max = GameRoom.MaxMembers;
var count = GameRoom.RoomPlayerList.Count;
if (count + 1 > max)
{
App.gameRoomDetail = result.data;
//TODO:一些状态的校验
//1.房间人数已经满了
//2.房间状态不对
//发送TCP信息
MapUDPService.SendJoinGameRoom(App.gameRoomDetail.Id,App.CurrentUser.Id,UIManager.Now.GetDateTime().ToUniversalTime());
UIManager.ShowGameRoomDetailPanel();
Utils.showToast(gameObject, App.GetLocalString("exceeded the maximum number!"));
return;
}
else
//2.房间状态不对
if (GameRoom.Status > 0)
{
Utils.showToast(gameObject, result.errMsg);
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.Id;
RoomId = GameRoom.RoomId;
}
public int GetRoomId()
{
return RoomId;
}
public GameRoomModel GetCurrentRoom()
{
return GameRoom;
}
public void Select(MapRoute map)
{
Map = map;
@@ -607,8 +799,22 @@ public class GameRoomListController : PFUIPanel
//创建房间
private void CreateGameRoom(BaseEventData data)
{
MapList.SetActive(true);
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(0, "");
MapList.SetActive(true);
}
protected override void OnDisable()
{
base.OnDisable();
MapUDPService.MessageListener = null;
}
}
@@ -1,16 +1,19 @@
using Assets.Scenes.Ride.Scripts;
using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scripts;
using Assets.Scripts.Apis.Models;
using Assets.Scripts.Scenes.VideoRide;
using DG.Tweening;
using PolyAndCode.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameRoomLoadingController : PFUIPanel
@@ -33,45 +36,89 @@ public class GameRoomLoadingController : PFUIPanel
GameRoom = App.gameRoomDetail;
roomName.text = GameRoom.Name;
routeName.text = GameRoom.MapRouteName;
idtext.text = GameRoom.Id.ToString().PadLeft(7, '0');
idtext.text = GameRoom.RoomId.ToString().PadLeft(7, '0');
distanceText.text = GameRoom.Distance.ToString("f1") + "KM";
gradeText.text = GameRoom.AverageGrade.ToString("f1") + "%";
totalClimbText.text = GameRoom.TotalClimb.ToString("f0")+"M";
totalClimbText.text = GameRoom.TotalClimb.ToString("f0") + "M";
DrawMapRouteAsync(GameRoom.MapRouteId);
prefab = Resources.Load<GameObject>("UI/Prefab/GameRoom/LoadingItem");
MapUDPService.MessageListener = ListenerHandler;
videoLoading = FindObjectOfType<VideoLoading>();
playerLoading = FindObjectOfType<LoadingController>();
videoManager = FindObjectOfType<VideoGameManager>();
videoManager?.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.GameRoom);
}
private bool DataSourceChanged { get; set; }
private void ListenerHandler(List<ReceiveMsgModel> message)
{
try
{
//查询列表
var roomList = message.Where(c => c.RoomList != null).FirstOrDefault();
if (roomList != null)
{
var room = App.gameRoomDetail;
GameRoom = roomList.RoomList.Where(c=>c.RoomId == GameRoom.RoomId).FirstOrDefault();
DataSourceChanged = true;
}
}
catch (Exception e)
{
}
}
float timer = 1f;
VideoLoading videoLoading { get; set; }
LoadingController playerLoading { get; set; }
VideoGameManager videoManager { get; set; }
private void Update()
{
timer -= Time.deltaTime;
while (timer < 0)
{
//获取当前进度
var currentScene = SceneManager.GetActiveScene();
double process = 100d;
if (!currentScene.name.Equals("VideoPlay"))
{
process = playerLoading.GetProcess();
}
//发送当前进度
MapUDPService.SendGameRoomLoadingProcess(GameRoom.Id, App.CurrentUser.Id, 56);
MapUDPService.SendGameRoomLoadingProcess(GameRoom.RoomId, App.CurrentUser.Id, process);
timer += 1f;
}
if (DataSourceChanged)
{
DataSourceChanged = false;
//新增
var list = MapUDPService.GetGameRoomList(GameRoom.Id);
var list = GameRoom.RoomPlayerList;
var items = FindObjectsOfType<GameRoomLoadingItem>();
foreach (var item in list)
{
var roomDetail = items.Where(c => c.UserId == item.RoomDetail.UserId).FirstOrDefault();
var roomDetail = items.Where(c => c.UserId == item.UserId).FirstOrDefault();
if (roomDetail == null)
{
var detail = Instantiate(prefab, content);
roomDetail = detail.GetComponent<GameRoomLoadingItem>();
roomDetail.Init(item.Id,item.Name,item.Room.Id,0);
roomDetail.Init(item.UserId, item.WxHeadImage, item.RoomId, item.Process);
}
}
//判断是否进入骑行场景
var startTime = MapUDPService.GetRoomStartTime(GameRoom.Id);
var startTime = GameRoom.StartTime;
var singleUi = FindObjectOfType<SingleUIManager>();
if (startTime.HasValue)
{
var v = FindObjectOfType<VideoLoading>();
v.StartRide(null);
//TODO:倒计时
var dateTime = UIManager.Now.GetDateTime();
var gap = startTime.Value.ToLocalTime() - dateTime;
var interval = (int)Math.Floor(gap.TotalSeconds);
playerLoading?.StartRide(interval);
singleUi?.StartRide(interval);
videoLoading?.StartRide(interval);
transform.parent.gameObject.SetActive(false);
}
timer += 1f;
}
}