156 lines
5.2 KiB
C#
156 lines
5.2 KiB
C#
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
|
|
{
|
|
public Text roomName;
|
|
public Text routeName;
|
|
public Text idtext;
|
|
public Text distanceText;
|
|
public Text gradeText;
|
|
public Text totalClimbText;
|
|
public RawImage mapRouteImage;
|
|
public Transform content;
|
|
private GameObject prefab;
|
|
|
|
public GameRoomModel GameRoom { get; set; }
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
GameRoom = App.gameRoomDetail;
|
|
roomName.text = GameRoom.Name;
|
|
routeName.text = GameRoom.MapRouteName;
|
|
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";
|
|
DrawMapRouteAsync(GameRoom.MapRouteId);
|
|
prefab = Resources.Load<GameObject>("UI/Prefab/GameRoom/LoadingItem");
|
|
MapUDPService.MessageListener = ListenerHandler;
|
|
|
|
videoLoading = FindObjectOfType<VideoLoading>();
|
|
playerLoading = FindObjectOfType<LoadingController>();
|
|
videoManager = FindObjectOfType<VideoGameManager>();
|
|
}
|
|
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.RoomId, App.CurrentUser.Id, process);
|
|
|
|
timer += 1f;
|
|
}
|
|
if (DataSourceChanged)
|
|
{
|
|
DataSourceChanged = false;
|
|
|
|
//新增
|
|
var list = GameRoom.RoomPlayerList;
|
|
var items = FindObjectsOfType<GameRoomLoadingItem>();
|
|
foreach (var item in list)
|
|
{
|
|
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.UserId, item.Name, item.WxHeadImage,item.Country,item.RoomId, item.Process);
|
|
}
|
|
}
|
|
//判断是否进入骑行场景
|
|
var startTime = GameRoom.StartTime;
|
|
var singleUi = FindObjectOfType<SingleUIManager>();
|
|
if (startTime.HasValue)
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
private async void DrawMapRouteAsync(int routeId, int type = 0)
|
|
{
|
|
var result = await ConfigHelper.mapApi.GetMapLoadingCoverageUrl(routeId, type);
|
|
if (!result.result)
|
|
return;
|
|
var url = result.data;
|
|
if (App.TextureCache.ContainsKey(url))
|
|
{
|
|
mapRouteImage.texture = App.TextureCache[url];
|
|
var canvasGroup = mapRouteImage.GetComponent<CanvasGroup>();
|
|
canvasGroup.DOFade(1, 1);
|
|
}
|
|
else
|
|
{
|
|
Utils.DisplayImageAysnc(StartCoroutine, mapRouteImage, url, DowloadCallBack);
|
|
}
|
|
}
|
|
private void DowloadCallBack(string url, RawImage rawImage)
|
|
{
|
|
if (!App.TextureCache.ContainsKey(url))
|
|
{
|
|
App.TextureCache.Add(url, rawImage?.texture);
|
|
}
|
|
else
|
|
{
|
|
App.TextureCache[url] = rawImage?.texture;
|
|
}
|
|
var canvasGroup = rawImage.GetComponent<CanvasGroup>();
|
|
canvasGroup?.DOFade(1, 1);
|
|
}
|
|
}
|
|
|