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("UI/Prefab/GameRoom/LoadingItem"); MapUDPService.MessageListener = ListenerHandler; videoLoading = FindObjectOfType(); playerLoading = FindObjectOfType(); videoManager = FindObjectOfType(); } private bool DataSourceChanged { get; set; } private void ListenerHandler(List 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(); 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(); roomDetail.Init(item.UserId, item.Name, item.WxHeadImage,item.Country,item.RoomId, item.Process); } } //判断是否进入骑行场景 var startTime = GameRoom.StartTime; var singleUi = FindObjectOfType(); 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.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?.DOFade(1, 1); } }