tcp逻辑调整,历史逻辑增加赛事相关派生类
This commit is contained in:
1 parent
ec45246aa4
commit
d6a7cd798f
41 files changed
+5420
-3128
No files matched your search
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@@ -32,6 +33,7 @@ namespace Assets.Scripts.Scenes
|
||||
|
||||
private void OnApplicationQuit()
|
||||
{
|
||||
MapUDPService.Dispose();
|
||||
App.MainDeviceAdapter.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,279 @@
|
||||
using UnityEngine;
|
||||
using Mapbox.Unity.Map;
|
||||
using DG.Tweening;
|
||||
using UnityEngine.UI;
|
||||
using Assets.Scripts.Apis;
|
||||
using System;
|
||||
using Assets.Scripts;
|
||||
using Assets.Scripts.Apis.Models;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.SceneManagement;
|
||||
using System.Collections;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class AbstratctLoadingController : MonoBehaviour
|
||||
{
|
||||
#region GameObject
|
||||
protected Text mapName;
|
||||
protected AbstractMap _map;
|
||||
protected Text level;
|
||||
protected Text distance;
|
||||
protected Text elevaction;
|
||||
protected Text slope;
|
||||
protected Text rideNum;
|
||||
protected Text uploadByUserName;
|
||||
protected Text processText;
|
||||
protected Text mapDescText;
|
||||
protected RawImage head;
|
||||
protected RawImage country;
|
||||
protected RawImage mapCountry;
|
||||
protected RawImage mapRouteImage;
|
||||
protected RawImage altitudeGraph;
|
||||
protected Button rideNow;
|
||||
protected Button cancel;
|
||||
protected MapApi mapApi;
|
||||
protected GameObject panel;
|
||||
protected CanvasGroup canvasGroup;
|
||||
protected Transform mapRanking;
|
||||
protected Slider slider;
|
||||
#endregion
|
||||
protected GameObject loadingPanel;
|
||||
#region 属性
|
||||
protected float process = 0;//0-100 %
|
||||
#endregion
|
||||
protected CyclingController cyclingController;
|
||||
protected virtual void Start()
|
||||
{
|
||||
App.TextureCache.Clear();
|
||||
loadingPanel = transform.Find("Panel/LoadingPanel").gameObject;
|
||||
loadingPanel.showLoadingExtension();
|
||||
}
|
||||
public void InjectController(CyclingController controller)
|
||||
{
|
||||
cyclingController = controller;
|
||||
PFUIPanel mainPanel = transform.Find("Panel").GetComponent<PFUIPanel>();
|
||||
PFUIPanel modelPanel = transform.Find("ModalPanel").GetComponent<PFUIPanel>();
|
||||
cyclingController.SetUIManager(mainPanel, modelPanel);
|
||||
}
|
||||
//提供给主控制器初始化用
|
||||
public void Init(MapRoute route)
|
||||
{
|
||||
InitGameObject();
|
||||
InitGameObjectData(route);
|
||||
}
|
||||
//展示当前路书图片
|
||||
public void SetMapRouteImage(string url)
|
||||
{
|
||||
Utils.DisplayImage(mapRouteImage, url);
|
||||
}
|
||||
public void DrawMapRoute(MapDataModel mapData)
|
||||
{
|
||||
var url = Helper.GetMapboxApiUrl(mapData.List);
|
||||
if (App.TextureCache.ContainsKey(url))
|
||||
{
|
||||
mapRouteImage.texture = App.TextureCache[url];
|
||||
var canvasGroup = mapRouteImage.GetComponent<CanvasGroup>();
|
||||
canvasGroup.DOFade(1, 1);
|
||||
this.AddProcess(10);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.DisplayImageAysnc(StartCoroutine, mapRouteImage, url, dowloadCallBack);
|
||||
this.AddProcess(10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void dowloadCallBack(string url)
|
||||
{
|
||||
if (!App.TextureCache.ContainsKey(url))
|
||||
{
|
||||
App.TextureCache.Add(url, mapRouteImage.texture);
|
||||
}
|
||||
else
|
||||
{
|
||||
App.TextureCache[url] = mapRouteImage.texture;
|
||||
}
|
||||
var canvasGroup = mapRouteImage.GetComponent<CanvasGroup>();
|
||||
canvasGroup.DOFade(1, 1);
|
||||
|
||||
}
|
||||
//设定当前loading进度
|
||||
public void AddProcess(float v)
|
||||
{
|
||||
process += v;
|
||||
slider.value = process;
|
||||
slider.onValueChanged.AddListener((f) =>
|
||||
{
|
||||
processText.text = $"{(f ).ToString("#0")}%";
|
||||
});
|
||||
|
||||
if (process == 100)
|
||||
{
|
||||
rideNow.interactable = true;
|
||||
rideNow.enabled = true;
|
||||
}
|
||||
}
|
||||
//创建排行榜
|
||||
public void CreateRankingList(List<MapRouteRanking> list)
|
||||
{
|
||||
var prefab = Resources.Load<GameObject>("UI/Prefab/Ride/RankingItem");
|
||||
var parent = transform.Find("Panel/MapRanking");
|
||||
var title = transform.Find("Panel/RankingTitle").gameObject;
|
||||
if (list.Count == 0)
|
||||
{
|
||||
title.SetActive(false);
|
||||
}
|
||||
foreach (var item in list)
|
||||
{
|
||||
GameObject newObj = (GameObject)Instantiate(prefab, parent);
|
||||
var selectPlayerItemScript = newObj.GetComponent<RankingItemScript>();
|
||||
selectPlayerItemScript.SetRanking(item.RowNumber.ToString());
|
||||
selectPlayerItemScript.SetName(item.NickName);
|
||||
selectPlayerItemScript.SetTimer(item.IsDNF?"DNF":item.TotalTime);
|
||||
selectPlayerItemScript.SetHead(item.WxHeadImg);
|
||||
var texture = cyclingController.GetCountryImageByCode(item.CountryCode);
|
||||
selectPlayerItemScript.SetCountry(texture);
|
||||
}
|
||||
}
|
||||
protected virtual void InitGameObject()
|
||||
{
|
||||
panel = transform.Find("Panel").gameObject;
|
||||
mapName = transform.Find("Panel/MapName").GetComponent<Text>();
|
||||
distance = transform.Find("Panel/Distance").GetComponent<Text>();
|
||||
level = transform.Find("Panel/level/Text").GetComponent<Text>();
|
||||
elevaction = transform.Find("Panel/Elevaction").GetComponent<Text>();
|
||||
slope = transform.Find("Panel/Slope").GetComponent<Text>();
|
||||
rideNum = transform.Find("Panel/RideNum").GetComponent<Text>();
|
||||
uploadByUserName = transform.Find("Panel/UploadByUserName").GetComponent<Text>();
|
||||
country = transform.Find("Panel/UploadByCountry").GetComponent<RawImage>();
|
||||
mapCountry = transform.Find("Panel/Country").GetComponent<RawImage>();
|
||||
|
||||
head = transform.Find("Panel/UploadByHead").GetComponent<RawImage>();
|
||||
mapRouteImage = transform.Find("Panel/MapRouteImage").GetComponent<RawImage>();
|
||||
altitudeGraph = transform.Find("Panel/AltitudeGraph").GetComponent<RawImage>();
|
||||
mapRanking = transform.Find("Panel/MapRanking");
|
||||
slider = transform.Find("Panel/Process").GetComponent<Slider>();
|
||||
processText = transform.Find("Panel/ProcessText").GetComponent<Text>();
|
||||
mapDescText = transform.Find("Panel/MapDesc").GetComponent<Text>();
|
||||
rideNow = transform.Find("Panel/RideNow").GetComponent<Button>();
|
||||
cancel = transform.Find("Panel/Cancel").GetComponent<Button>();
|
||||
var root = transform.parent;
|
||||
_map = root.Find("Map").GetComponent<AbstractMap>();
|
||||
canvasGroup = transform.GetComponent<CanvasGroup>();
|
||||
rideNow.enabled = false;
|
||||
rideNow.interactable = false;
|
||||
UIManager.AddEvent(rideNow.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, StartRide);
|
||||
UIManager.AddEvent(cancel.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Cancel);
|
||||
|
||||
}
|
||||
protected void StartRide(BaseEventData baseEvent)
|
||||
{
|
||||
var checkAnt = cyclingController.CheckAnt();
|
||||
#if UNITY_EDITOR
|
||||
checkAnt = true;
|
||||
#endif
|
||||
if (!checkAnt)
|
||||
{
|
||||
var alert = (GameObject)Instantiate(Resources.Load("UI/Prefab/Ride/Alert"), panel.transform);
|
||||
alert.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
cyclingController.ReSetUIManager();
|
||||
cyclingController.GoContinueRide();
|
||||
//启用ridenow
|
||||
canvasGroup.blocksRaycasts = false;
|
||||
depressFlag = true;
|
||||
}
|
||||
}
|
||||
protected void Cancel(BaseEventData baseEvent)
|
||||
{
|
||||
SceneManager.LoadScene("MainScene");
|
||||
}
|
||||
protected void InitGameObjectData(MapRoute route)
|
||||
{
|
||||
if (route != null)
|
||||
{
|
||||
#region 绑定路书基本信息
|
||||
mapName.text = route.Name;
|
||||
level.text = route.Hard;
|
||||
elevaction.text = Math.Round(route.TotalClimb.GetValueOrDefault(0), 2).ToString() + "M";
|
||||
slope.text = Math.Round(route.AverageGrade, 2).ToString() + "%";
|
||||
rideNum.text = route.TheHeat.ToString();
|
||||
distance.text = route.Distance.ToString("f1") + "KM";
|
||||
mapDescText.text = route.Dec;
|
||||
var userList = ConfigHelper.mapApi.GetOnlineUserInfo(new int[] { route.UserId }).data;
|
||||
if (userList.Count > 0)
|
||||
{
|
||||
uploadByUserName.text = userList[0].Name;
|
||||
var countryUrl = App.Host + $"User/GetCountryImg?userid={userList[0].Id}";
|
||||
Utils.DisplayImage(head, userList[0].HeadImage);//头像
|
||||
|
||||
country.texture = cyclingController.GetCountryImageByCode(route.CountryCode);//上传者国家
|
||||
mapCountry.texture = cyclingController.GetCountryImageByName(userList[0].Country);//路书国家
|
||||
|
||||
Utils.DisplayImage(altitudeGraph, route.AltitudeGraph);//海拔图
|
||||
}
|
||||
#endregion
|
||||
StartCoroutine(HiddenLoading());
|
||||
#region 地图注册 排行榜等接口
|
||||
_map.OnInitialized += _map_OnInitialized;
|
||||
_map.OnEditorPreviewEnabled += OnEditorPreviewEnabled;
|
||||
_map.OnEditorPreviewDisabled += OnEditorPreviewDisabled;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
protected IEnumerator HiddenLoading()
|
||||
{
|
||||
yield return new WaitForSeconds(1f);
|
||||
loadingPanel.SetActive(false);
|
||||
}
|
||||
protected void _map_OnInitialized()
|
||||
{
|
||||
var visualizer = _map.MapVisualizer;
|
||||
visualizer.OnMapVisualizerStateChanged += (s) =>
|
||||
{
|
||||
if (s == ModuleState.Finished)
|
||||
{
|
||||
AddProcess(40);
|
||||
}
|
||||
};
|
||||
}
|
||||
protected void OnEditorPreviewEnabled()
|
||||
{
|
||||
//transform.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
protected void OnEditorPreviewDisabled()
|
||||
{
|
||||
//transform.gameObject.SetActive(true);
|
||||
}
|
||||
public float targetAlpha = 0f;
|
||||
public float alphaSpeed = 2.0f;
|
||||
private bool depressFlag = false;
|
||||
void Update()
|
||||
{
|
||||
if (canvasGroup == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetAlpha != canvasGroup.alpha && depressFlag)
|
||||
{
|
||||
canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, targetAlpha, alphaSpeed * Time.deltaTime);
|
||||
if (Mathf.Abs(targetAlpha - canvasGroup.alpha) <= 0.01f)
|
||||
{
|
||||
canvasGroup.alpha = targetAlpha;
|
||||
}
|
||||
if (canvasGroup.alpha == 0)
|
||||
{
|
||||
transform.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 527fbcb6f7ca8dc4dba397371a62ae80
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -233,7 +233,6 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
|
||||
private Transform player;
|
||||
private MapRoute routeInstance;
|
||||
public AbstractPlayer currentPlayer { get; set; }//当前选中用户
|
||||
|
||||
private float time = 1f;
|
||||
private float? localY;
|
||||
@@ -244,7 +243,6 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
public void Init()
|
||||
{
|
||||
playerController = FindObjectOfType<PlayerController>();
|
||||
currentPlayer = playerController;//默认当前用户为当前选中用户
|
||||
mainController = FindObjectOfType<CyclingController>();
|
||||
player = transform.parent.Find("Player");
|
||||
var route = mainController.GetRoute();
|
||||
@@ -310,11 +308,11 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
if (target != null)
|
||||
{
|
||||
target.transform.position = playerController.currentPos; //player.transform.position;// new Vector3((float)Math.Round(player.transform.position.x,1), 0, (float)Math.Round(player.transform.position.z,1));
|
||||
target.transform.position = mainController.currentPlayer.currentPos; //player.transform.position;// new Vector3((float)Math.Round(player.transform.position.x,1), 0, (float)Math.Round(player.transform.position.z,1));
|
||||
if (!mainController.Is3dView)
|
||||
{
|
||||
Vector3 v = Vector3.zero;
|
||||
v.y += playerController.currentRotation.eulerAngles.y + 160f; //target.transform.rotation = playerController.transform.rotation;//new Quaternion(playerController.transform.rotation.x, playerController.transform.rotation.y +1f, playerController.transform.rotation.z, playerController.transform.rotation.w);
|
||||
v.y += mainController.currentPlayer.currentRotation.eulerAngles.y + 160f; //target.transform.rotation = playerController.transform.rotation;//new Quaternion(playerController.transform.rotation.x, playerController.transform.rotation.y +1f, playerController.transform.rotation.z, playerController.transform.rotation.w);
|
||||
target.transform.eulerAngles = v; //.Set(0, playerController.currentRotation.eulerAngles.y + 160f, 0);// = new Vector3(0, playerController.transform.eulerAngles.y + 160f, 0);
|
||||
//mainController.player.transform.localScale.Set(0.1f, 0.1f, 0.1f);
|
||||
player.transform.localScale = m;
|
||||
@@ -328,7 +326,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
}
|
||||
//控制照片移动
|
||||
((RectTransform)arrow.transform).position = Camera.main.WorldToScreenPoint(target.transform.position);
|
||||
if (playerController.Speed > 0 && mainController.isStart)
|
||||
if (mainController.currentPlayer.Speed > 0 && mainController.isStart)
|
||||
{
|
||||
arrow.transform.Find("bg").gameObject.SetActive(true);
|
||||
}
|
||||
@@ -342,31 +340,35 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
public void BindDataSource()
|
||||
{
|
||||
//获取当前选中玩家绑定当前UI
|
||||
if (playerController != null)
|
||||
var currentPlayer = mainController.currentPlayer;
|
||||
if (currentPlayer != null)
|
||||
{
|
||||
speedTxt.text = $"{Math.Round(playerController.Speed, 1)}";
|
||||
powerTxt.text = $"{playerController.Power}";
|
||||
timerTxt.text = Helper.FormatTicks(playerController.TotalTicks);
|
||||
ditance.text = Math.Round(playerController.TotalDistance, 1).ToString("f1");
|
||||
heartRate.text = $"{Math.Round(playerController.HeartRate, 0)}";
|
||||
candance.text = $"{Math.Round(playerController.Cadance, 0)}";
|
||||
preSlopeText.text = $"{Math.Round(playerController.PreSlope, 1)}%";
|
||||
currentSlopeToatalDistanceText.text = $"Total:{Math.Round(playerController.CurrentDistance, 0)}M";
|
||||
speedTxt.text = $"{Math.Round(currentPlayer.Speed, 1)}";
|
||||
powerTxt.text = $"{currentPlayer.Power}";
|
||||
timerTxt.text = Helper.FormatTicks(currentPlayer.TotalTicks);
|
||||
ditance.text = Math.Round(currentPlayer.TotalDistance, 1).ToString("f1");
|
||||
heartRate.text = $"{Math.Round(currentPlayer.HeartRate, 0)}";
|
||||
candance.text = $"{Math.Round(currentPlayer.Cadance, 0)}";
|
||||
preSlopeText.text = $"{Math.Round(currentPlayer.PreSlope, 1)}%";
|
||||
currentSlopeToatalDistanceText.text = $"Total:{Math.Round(currentPlayer.CurrentDistance, 0)}M";
|
||||
//坡度相关数据
|
||||
nextSlopeText.text = Math.Round(playerController.NextSlope, 1).ToString() + "%";
|
||||
nextSlopeText.text = Math.Round(currentPlayer.NextSlope, 1).ToString() + "%";
|
||||
//nextSlopeDistanceText.GetComponent<NumberDotween>().AnimateNum((float)playerController.NextSlopeDistance, 0, "-{0}M");
|
||||
nextSlopeDistanceText.text = $"{Math.Round(playerController.NextSlopeTotalDistance, 0)}M";
|
||||
currentSlopeText.text = Math.Round(playerController.CurrentSlope, 1).ToString() + "%";
|
||||
currentSlopeDistanceText.GetComponent<NumberDotween>().AnimateNum((float)playerController.CurrentSlopeDistance, Math.Round(playerController.CurrentDistance, 0), playerController.CurrentIndex, 0, "{0}M", currentSlopeProcess);
|
||||
currentSlopeDistanceText.GetComponent<NumberDotween>().AnimateNumText((float)playerController.CurrentDistance - (float)playerController.CurrentSlopeDistance, Math.Round(playerController.CurrentDistance, 0), playerController.CurrentIndex, 0, "{0}M", currentSlopeProcess);
|
||||
totalClimb.text = Math.Round(playerController.TotalClimb, 0).ToString();
|
||||
nextSlopeDistanceText.text = $"{Math.Round(currentPlayer.NextSlopeTotalDistance, 0)}M";
|
||||
currentSlopeText.text = Math.Round(currentPlayer.CurrentSlope, 1).ToString() + "%";
|
||||
if (currentSlopePanel.activeSelf)
|
||||
{
|
||||
currentSlopeDistanceText.GetComponent<NumberDotween>().AnimateNum((float)currentPlayer.CurrentSlopeDistance, Math.Round(currentPlayer.CurrentDistance, 0), currentPlayer.CurrentIndex, 0, "{0}M", currentSlopeProcess);
|
||||
currentSlopeDistanceText.GetComponent<NumberDotween>().AnimateNumText((float)currentPlayer.CurrentDistance - (float)currentPlayer.CurrentSlopeDistance, Math.Round(currentPlayer.CurrentDistance, 0), currentPlayer.CurrentIndex, 0, "{0}M", currentSlopeProcess);
|
||||
}
|
||||
totalClimb.text = Math.Round(currentPlayer.TotalClimb, 0).ToString();
|
||||
//小地图进度
|
||||
var process = (float)(playerController.TotalDistance / routeInstance.Distance);
|
||||
var process = (float)(currentPlayer.TotalDistance / routeInstance.Distance);
|
||||
miniMapProcess.fillAmount = process;
|
||||
miniMapProcessText.text = $"{process*100:f0}%";
|
||||
//动态改变坡度图片
|
||||
ChangeSlopeImage(nextSlopeImage, playerController.NextSlope);
|
||||
ChangeSlopeImage(currentSlopeImage, playerController.CurrentSlope);
|
||||
ChangeSlopeImage(nextSlopeImage, currentPlayer.NextSlope);
|
||||
ChangeSlopeImage(currentSlopeImage, currentPlayer.CurrentSlope);
|
||||
}
|
||||
}
|
||||
//改变坡度图片
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class CompetitionRankingFactory : BaseListFactory
|
||||
{
|
||||
private List<CompetitionRankingSortModel> rankingList {get;set;}
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
cyclingController = FindObjectOfType<CyclingController>();
|
||||
playerController = FindObjectOfType<PlayerController>();
|
||||
nearByItem = Resources.Load<GameObject>("UI/Prefab/Ride/NearbyItem");
|
||||
nearByMajorItem = Resources.Load<GameObject>("UI/Prefab/Ride/NearbyMajorItem");
|
||||
}
|
||||
protected override void CreateList()
|
||||
{
|
||||
//获取实时排名
|
||||
CompetitionModel s = cyclingController.cyclingController as CompetitionModel;
|
||||
var ss = s?.competitionRankingModel;
|
||||
rankingList = ss?.Sorts;
|
||||
|
||||
if (rankingList == null) return;
|
||||
totalPages = rankingList.Count();
|
||||
for (int i = 0; i < rankingList.Count(); i++)
|
||||
{
|
||||
Create(rankingList[i]);
|
||||
}
|
||||
}
|
||||
private void Create(CompetitionRankingSortModel item)
|
||||
{
|
||||
//创建
|
||||
GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem;
|
||||
GameObject newObj = (GameObject)Instantiate(prefabItem, transform);
|
||||
var nearByItemscript = newObj.GetComponent<NearByItemScript>();
|
||||
nearByItemscript.setUserId(item.UserId);
|
||||
nearByItemscript.setName(item.Name);
|
||||
nearByItemscript.setRatio(item.KGWeight+"W/KG");
|
||||
nearByItemscript.setSpeed(item.Speed.ToString() + "KM/H");
|
||||
//nearByItemscript.setHead(item.Headimage);
|
||||
//nearByItemscript.setCountry(cyclingController.GetCountryImageByName(item.));
|
||||
nearByItemscript.setDistance(item.Near.ToString() + "KM");
|
||||
bufferSize++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bccf1279e24ed4840896f68bc2bac5d1
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class CompetitionLoadingController : AbstratctLoadingController
|
||||
{
|
||||
protected override void Start()
|
||||
{
|
||||
base.Start();
|
||||
//显示报名按钮 观战按钮
|
||||
|
||||
}
|
||||
|
||||
protected override void InitGameObject()
|
||||
{
|
||||
base.InitGameObject();
|
||||
//比赛相关数据绑定
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bfe4d27e49e6bea4a88d5982e6e6aa19
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,64 @@
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class CompetitionRankingFactory : BaseListFactory
|
||||
{
|
||||
private bool isInit = false;
|
||||
private List<CompetitionRankingSortModel> rankingList {get;set;}
|
||||
private AbstractPlayer currentPlayer { get; set; }
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
cyclingController = FindObjectOfType<CyclingController>();
|
||||
playerController = FindObjectOfType<PlayerController>();
|
||||
currentPlayer = cyclingController.currentPlayer;
|
||||
nearByItem = Resources.Load<GameObject>("UI/Prefab/Match/CompetitionRankingItem");
|
||||
nearByMajorItem = Resources.Load<GameObject>("UI/Prefab/Match/CompetitionRankingMajorItem");
|
||||
|
||||
}
|
||||
protected override void CreateList()
|
||||
{
|
||||
//获取实时排名
|
||||
CompetitionModel s = cyclingController.cyclingController as CompetitionModel;
|
||||
var ss = s?.competitionRankingModel;
|
||||
rankingList = ss?.Sorts;
|
||||
|
||||
if (rankingList == null) return;
|
||||
totalPages = rankingList.Count();
|
||||
//TODO 计算当前用户排名
|
||||
if (!isInit)
|
||||
{
|
||||
//当前用户排名
|
||||
var currentIndex = rankingList.Where(c => c.UserId == currentPlayer.UserId).FirstOrDefault()?.Index??0;
|
||||
//当前用户在第几页
|
||||
pageIndex = currentIndex / pageSize;
|
||||
}
|
||||
|
||||
var pagedList = rankingList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
|
||||
for (int i = 0; i < pagedList.Count(); i++)
|
||||
{
|
||||
Create(pagedList[i]);
|
||||
}
|
||||
}
|
||||
private void Create(CompetitionRankingSortModel item)
|
||||
{
|
||||
//创建
|
||||
GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem;
|
||||
GameObject newObj = (GameObject)Instantiate(prefabItem, transform);
|
||||
var competitionRankingItem = newObj.GetComponent<CompetitionRankingItem>();
|
||||
competitionRankingItem.setUserId(item.UserId);
|
||||
competitionRankingItem.setName(item.Name);
|
||||
competitionRankingItem.setRatio(item.KGWeight+"W/KG");
|
||||
competitionRankingItem.setSpeed(item.Speed.ToString() + "KM/H");
|
||||
//competitionRankingItem.setHead(item.Headimage);
|
||||
//competitionRankingItem.setCountry(cyclingController.GetCountryImageByName(item.));
|
||||
competitionRankingItem.setDistance(item.Near.ToString() + "KM");
|
||||
bufferSize++;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a572f54bd2296f41a2b47567f33fd64
|
||||
guid: ab8fe28fa979675468c81d99ce5ad389
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
@@ -0,0 +1,91 @@
|
||||
using Assets.Scripts;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class CompetitionRankingItem : MonoBehaviour
|
||||
{
|
||||
private RawImage Head;
|
||||
private RawImage Country;
|
||||
private Text Name;
|
||||
private Text Speed;
|
||||
private Text Distance;
|
||||
private Text Ratio;//功体比
|
||||
|
||||
private int _userId = 0;
|
||||
public int UserId { get { return _userId; } }
|
||||
private string _headUrl=string.Empty;
|
||||
private string _countryUrl = string.Empty;
|
||||
private string _name = string.Empty;
|
||||
private string _speed = string.Empty;
|
||||
private string _distance = string.Empty;
|
||||
private string _ratio = string.Empty;
|
||||
private Texture countryTexture;
|
||||
CyclingController cyclingController;
|
||||
private void Awake()
|
||||
{
|
||||
cyclingController = FindObjectOfType<CyclingController>();
|
||||
Head = transform.Find("Head").GetComponent<RawImage>();
|
||||
Country = transform.Find("Country").GetComponent<RawImage>();
|
||||
Name = transform.Find("Name").GetComponent<Text>();
|
||||
Speed = transform.Find("Speed").GetComponent<Text>();
|
||||
Distance = transform.Find("Distance").GetComponent<Text>();
|
||||
Ratio = transform.Find("Ratio").GetComponent<Text>();
|
||||
countryTexture = Resources.Load<Sprite>("Images/flag_China_Person").texture;
|
||||
UIManager.AddEvent(this.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Watch);
|
||||
}
|
||||
//切换到当前用户视角
|
||||
public void Watch(BaseEventData baseEventData)
|
||||
{
|
||||
cyclingController.ChangeCurrentPlayer(_userId);
|
||||
}
|
||||
public void setRatio(string ratio)
|
||||
{
|
||||
if (!_ratio.Equals(ratio))
|
||||
{
|
||||
Ratio.text = ratio;
|
||||
}
|
||||
}
|
||||
|
||||
public void setHead(string url)
|
||||
{
|
||||
if (!_headUrl.Equals(url))
|
||||
{
|
||||
Utils.DisplayImage(Head, url, true);
|
||||
var rect = ((RectTransform)Head.transform).rect;
|
||||
Material material = Instantiate(Resources.Load<Material>("UI/Material/RoundedCornersTextureMaterial"));
|
||||
material.SetVector(Shader.PropertyToID("_WidthHeightRadius"), new Vector4(rect.width, rect.height, rect.height, 0));
|
||||
Head.material = material;
|
||||
}
|
||||
}
|
||||
|
||||
public void setCountry(Texture texture)
|
||||
{
|
||||
Country.texture = texture;
|
||||
}
|
||||
public void setName(string name)
|
||||
{
|
||||
if (!_name.Equals(name))
|
||||
Name.text = name;
|
||||
}
|
||||
|
||||
public void setSpeed(string speed)
|
||||
{
|
||||
if (!_speed.Equals(speed))
|
||||
Speed.text = speed;
|
||||
}
|
||||
|
||||
public void setDistance(string distance)
|
||||
{
|
||||
if (!_distance.Equals(distance))
|
||||
Distance.text = distance;
|
||||
}
|
||||
|
||||
public void setUserId(int userId)
|
||||
{
|
||||
_userId = userId;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 897973ae3dd02d545b786cae2278c710
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+7
-2
@@ -1,5 +1,6 @@
|
||||
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
||||
using Assets.Scripts;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.SceneManagement;
|
||||
@@ -8,6 +9,8 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
public class CompetitionResultFactory: MonoBehaviour
|
||||
{
|
||||
int pageIndex = 1;
|
||||
int pageSize = 8;
|
||||
CyclingController cyclingController;
|
||||
private void Awake()
|
||||
{
|
||||
@@ -35,7 +38,9 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
if (list == null) return;
|
||||
var parent = transform.Find("ScrollView/Viewport/Content");
|
||||
Utils.DestroyChildren(parent);
|
||||
foreach (var item in list)
|
||||
|
||||
var pagedList = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
|
||||
foreach (var item in pagedList)
|
||||
{
|
||||
var finalRankingItem = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/FinalRankingItem"), parent);
|
||||
var finalRankingItemScript = finalRankingItem.GetComponent<FinalRankingItemScript>();
|
||||
@@ -53,7 +58,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
this.gameObject.SetActive(false);
|
||||
this.Destroy();
|
||||
SceneManager.LoadScene("MainScene");
|
||||
//SceneManager.LoadScene("MainScene");
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c7fed0d77ca8dce4a85ed6f9a848355d
|
||||
guid: 53789e6465db91d43adaa58df5c0e72d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
+28
-18
@@ -25,9 +25,11 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
countDownPanel = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/CountDownPanel"), transform.Find("Panel"));
|
||||
title = countDownPanel.transform.Find("Title").GetComponent<Text>();
|
||||
timer = countDownPanel.transform.Find("Timer").GetComponent<Text>();
|
||||
reviewPanel.SetActive(false);
|
||||
countDownPanel.SetActive(false);
|
||||
ShowCurrentRanking();
|
||||
|
||||
miniMap.SetActive(false); //隐藏小地图
|
||||
viewButton.gameObject.SetActive(false);//隐藏切换视角
|
||||
}
|
||||
protected override void Update()
|
||||
{
|
||||
@@ -50,23 +52,26 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
|
||||
private void CountDown()
|
||||
{
|
||||
count = competitionModel?.StartCountdown()??0;
|
||||
canStart = competitionModel?.CanStart()??false;
|
||||
//比赛开始前倒计时
|
||||
if (count >= 0)
|
||||
{
|
||||
//显示倒计时面板信息
|
||||
showCountDown(count, "Get ready!");
|
||||
}
|
||||
//比赛开始
|
||||
if (count<=0 && canStart)
|
||||
{
|
||||
mainController.SetStart();
|
||||
countDownPanel.SetActive(false);
|
||||
}
|
||||
//比赛进行中
|
||||
if (competitionModel != null)
|
||||
{
|
||||
count = competitionModel.StartCountdown();
|
||||
canStart = competitionModel.CanStart();
|
||||
//比赛开始前倒计时
|
||||
if (count >= 0 && !canStart && !competitionModel.recorderData.Saved)
|
||||
{
|
||||
//显示倒计时面板信息
|
||||
showCountDown(count, "Get ready!");
|
||||
//隐藏坡度
|
||||
currentSlopePanel.SetActive(false);
|
||||
nextSlopePanel.SetActive(false);
|
||||
}
|
||||
//比赛开始
|
||||
if (count <= 0 && canStart)
|
||||
{
|
||||
mainController.SetStart();
|
||||
countDownPanel.SetActive(false);
|
||||
}
|
||||
//显示结果
|
||||
if (competitionModel.mapCompetition?.HasRecord ?? false)
|
||||
{
|
||||
@@ -77,13 +82,18 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
if (s.Value.Item2)
|
||||
{
|
||||
//显示倒计时面板信息
|
||||
showCountDown(s.Value.Item1, "remaining");
|
||||
if (s.Value.Item1 <= 0)
|
||||
showCountDown(s.Value.Item1, "get the winner,end tance remains");
|
||||
if (s.Value.Item1 <= 0 && !mainController.cyclingController.recorderData.Saved)
|
||||
{
|
||||
//自动保存,游戏设置结束
|
||||
//自动保存,游戏设置结束
|
||||
base.SaveRide(null);
|
||||
}
|
||||
}
|
||||
else if (s.Value.Item1 > 0)
|
||||
{
|
||||
//显示倒计时面板信息
|
||||
showCountDown(s.Value.Item1, "remaining");
|
||||
}
|
||||
//显示当前比赛进行多长时间了
|
||||
timerTxt.text = competitionModel.ShowTime;
|
||||
}
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2ef2d2135dbfedc418fd2a7a18a0a254
|
||||
guid: 56d863ea131204b4682725335a6af540
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
File renamed without changes.
File renamed without changes.
@@ -52,7 +52,7 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
public bool isPause;
|
||||
#endregion
|
||||
GameObject loadingcanvas;
|
||||
LoadingController loadingController;
|
||||
AbstratctLoadingController loadingController;
|
||||
private async Task Login()
|
||||
{
|
||||
var result = await new UserApi().Login("15261826280", "123456", "");
|
||||
@@ -77,7 +77,7 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
//miniMap = transform.Find("MiniMap").gameObject;//小地图
|
||||
resultPanel = transform.Find("SingleUI/Panel/ResultPanel").gameObject;
|
||||
competitionId = App.CompetionId;
|
||||
//App.CompetionId = 0;//清空比赛参数
|
||||
App.CompetionId = 0;//清空比赛参数
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
@@ -92,6 +92,9 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
UIManager.Instance.ModalsPanel = this.transform.Find("SingleUI/ModalPanel").GetComponent<PFUIPanel>();
|
||||
onlineUserPrefab = Resources.Load<GameObject>("UI/Prefab/Ride/OnlinePlayer");
|
||||
miniMapPlayerPrefab = Resources.Load<GameObject>("UI/Prefab/Ride/MiniMapPlayer");
|
||||
|
||||
|
||||
|
||||
target = transform.Find("Target");
|
||||
miniMap = transform.Find("MiniMap").gameObject;//小地图
|
||||
//进入倒计时
|
||||
@@ -100,7 +103,10 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
trail.Clear();
|
||||
playerController = player.GetComponent<PlayerController>();
|
||||
currentPlayer = playerController;//当前选中用户
|
||||
loadingController = FindObjectOfType<LoadingController>();
|
||||
loadingController = transform.Find("LoadingCanvas").gameObject.AddComponent<LoadingController>();
|
||||
|
||||
//loadingController = FindObjectOfType<LoadingController>();
|
||||
//
|
||||
loadingController.InjectController(this);
|
||||
//进入比赛
|
||||
if (competitionId > 0)
|
||||
@@ -202,7 +208,7 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
#region 其他场景传参处理
|
||||
MapCompetitionApi mapCompetitionApi = new MapCompetitionApi();
|
||||
competition = mapCompetitionApi.GetById(competitionId).data;
|
||||
|
||||
|
||||
selectParamModel = new RouteResultParam
|
||||
{
|
||||
CompetitionId = competitionId,
|
||||
@@ -289,7 +295,16 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
InitPlayer();//初始化人物方向等
|
||||
}
|
||||
PlayerController playerController;
|
||||
public AbstractPlayer currentPlayer;
|
||||
public AbstractPlayer currentPlayer { get; set; }
|
||||
public void ChangeCurrentPlayer(int userId)
|
||||
{
|
||||
var coll = FindObjectsOfType<AbstractPlayer>();
|
||||
var selectedPlayer =coll.Where(c => c.UserId == userId).FirstOrDefault();
|
||||
if (selectedPlayer != null)
|
||||
{
|
||||
currentPlayer = selectedPlayer;
|
||||
}
|
||||
}
|
||||
//初始化人物位置角度
|
||||
private void InitPlayer()
|
||||
{
|
||||
@@ -445,7 +460,7 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
public bool Is3dView;
|
||||
public void ChangeMapImageStyle(GameObject arrowGameObj)
|
||||
{
|
||||
var playerController = player.GetComponent<PlayerController>();
|
||||
//var playerController = player.GetComponent<PlayerController>();
|
||||
var trailRenderer = player.GetComponent<TrailRenderer>();
|
||||
trailRenderer.time = 0;
|
||||
StartCoroutine(EnableTrailRenderer(trailRenderer));
|
||||
@@ -455,12 +470,12 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
map.Terrain.ExaggerationFactor = 1.5f;
|
||||
map.Terrain.SetElevationType(ElevationLayerType.TerrainWithElevation);
|
||||
map.ImageLayer.SetLayerSource(ImagerySourceType.Custom);
|
||||
map.SetCenterLatitudeLongitude(playerController.Currentlatlong);
|
||||
map.SetCenterLatitudeLongitude(currentPlayer.Currentlatlong);
|
||||
map.transform.position = mapPos;
|
||||
//map3d.gameObject.SetActive(true);
|
||||
//map.gameObject.SetActive(false);
|
||||
//人物属性变更
|
||||
var pos = map.GeoToWorldPosition(playerController.Currentlatlong);
|
||||
var pos = map.GeoToWorldPosition(currentPlayer.Currentlatlong);
|
||||
playerController.currentPos = pos;
|
||||
target.position = pos;
|
||||
player.transform.localScale = new Vector3(3f, 3f, 3f);
|
||||
@@ -475,12 +490,12 @@ public class CyclingController : DeviceServiceMonoBase
|
||||
map.ImageLayer.SetLayerSource(ImagerySourceType.JuzeTest);
|
||||
map.Terrain.ExaggerationFactor = 0f;
|
||||
map.Terrain.SetElevationType(ElevationLayerType.FlatTerrain);
|
||||
map.SetCenterLatitudeLongitude(playerController.Currentlatlong);
|
||||
map.SetCenterLatitudeLongitude(currentPlayer.Currentlatlong);
|
||||
map.transform.position = Vector3.zero;
|
||||
//map.gameObject.SetActive(true);
|
||||
//map3d.gameObject.SetActive(false);
|
||||
//人物属性变更
|
||||
var pos = map.GeoToWorldPosition(playerController.Currentlatlong);
|
||||
var pos = map.GeoToWorldPosition(currentPlayer.Currentlatlong);
|
||||
player.transform.position = pos;
|
||||
player.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
|
||||
target.position = pos;
|
||||
|
||||
@@ -16,267 +16,9 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
|
||||
//[ExecuteInEditMode]
|
||||
public class LoadingController : MonoBehaviour
|
||||
public class LoadingController : AbstratctLoadingController
|
||||
{
|
||||
#region GameObject
|
||||
Text mapName;
|
||||
AbstractMap _map;
|
||||
Text level;
|
||||
Text distance;
|
||||
Text elevaction;
|
||||
Text slope;
|
||||
Text rideNum;
|
||||
Text uploadByUserName;
|
||||
Text processText;
|
||||
Text mapDescText;
|
||||
RawImage head;
|
||||
RawImage country;
|
||||
RawImage mapCountry;
|
||||
RawImage mapRouteImage;
|
||||
RawImage altitudeGraph;
|
||||
Button rideNow;
|
||||
Button cancel;
|
||||
MapApi mapApi;
|
||||
GameObject panel;
|
||||
CanvasGroup canvasGroup;
|
||||
Transform mapRanking;
|
||||
Slider slider;
|
||||
#endregion
|
||||
GameObject loadingPanel;
|
||||
#region 属性
|
||||
float process = 0;//0-100 %
|
||||
#endregion
|
||||
CyclingController cyclingController;
|
||||
private void Start()
|
||||
{
|
||||
App.TextureCache.Clear();
|
||||
loadingPanel = transform.Find("Panel/LoadingPanel").gameObject;
|
||||
loadingPanel.showLoadingExtension();
|
||||
//InitGameObject();
|
||||
}
|
||||
public void InjectController(CyclingController controller)
|
||||
{
|
||||
cyclingController = controller;
|
||||
PFUIPanel mainPanel = transform.Find("Panel").GetComponent<PFUIPanel>();
|
||||
PFUIPanel modelPanel = transform.Find("ModalPanel").GetComponent<PFUIPanel>();
|
||||
cyclingController.SetUIManager(mainPanel, modelPanel);
|
||||
}
|
||||
//提供给主控制器初始化用
|
||||
public void Init(MapRoute route)
|
||||
{
|
||||
InitGameObject();
|
||||
InitGameObjectData(route);
|
||||
}
|
||||
//展示当前路书图片
|
||||
public void SetMapRouteImage(string url)
|
||||
{
|
||||
Utils.DisplayImage(mapRouteImage, url);
|
||||
}
|
||||
public void DrawMapRoute(MapDataModel mapData)
|
||||
{
|
||||
var url = Helper.GetMapboxApiUrl(mapData.List);
|
||||
if (App.TextureCache.ContainsKey(url))
|
||||
{
|
||||
mapRouteImage.texture = App.TextureCache[url];
|
||||
var canvasGroup = mapRouteImage.GetComponent<CanvasGroup>();
|
||||
canvasGroup.DOFade(1, 1);
|
||||
this.AddProcess(10);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.DisplayImageAysnc(StartCoroutine, mapRouteImage, url, dowloadCallBack);
|
||||
this.AddProcess(10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void dowloadCallBack(string url)
|
||||
{
|
||||
if (!App.TextureCache.ContainsKey(url))
|
||||
{
|
||||
App.TextureCache.Add(url, mapRouteImage.texture);
|
||||
}
|
||||
else
|
||||
{
|
||||
App.TextureCache[url] = mapRouteImage.texture;
|
||||
}
|
||||
var canvasGroup = mapRouteImage.GetComponent<CanvasGroup>();
|
||||
canvasGroup.DOFade(1, 1);
|
||||
|
||||
}
|
||||
//设定当前loading进度
|
||||
public void AddProcess(float v)
|
||||
{
|
||||
process += v;
|
||||
slider.value = process;
|
||||
slider.onValueChanged.AddListener((f) =>
|
||||
{
|
||||
processText.text = $"{(f ).ToString("#0")}%";
|
||||
});
|
||||
|
||||
if (process == 100)
|
||||
{
|
||||
rideNow.interactable = true;
|
||||
rideNow.enabled = true;
|
||||
}
|
||||
}
|
||||
//创建排行榜
|
||||
public void CreateRankingList(List<MapRouteRanking> list)
|
||||
{
|
||||
var prefab = Resources.Load<GameObject>("UI/Prefab/Ride/RankingItem");
|
||||
var parent = transform.Find("Panel/MapRanking");
|
||||
var title = transform.Find("Panel/RankingTitle").gameObject;
|
||||
if (list.Count == 0)
|
||||
{
|
||||
title.SetActive(false);
|
||||
}
|
||||
foreach (var item in list)
|
||||
{
|
||||
GameObject newObj = (GameObject)Instantiate(prefab, parent);
|
||||
var selectPlayerItemScript = newObj.GetComponent<RankingItemScript>();
|
||||
selectPlayerItemScript.SetRanking(item.RowNumber.ToString());
|
||||
selectPlayerItemScript.SetName(item.NickName);
|
||||
selectPlayerItemScript.SetTimer(item.IsDNF?"DNF":item.TotalTime);
|
||||
selectPlayerItemScript.SetHead(item.WxHeadImg);
|
||||
var texture = cyclingController.GetCountryImageByCode(item.CountryCode);
|
||||
selectPlayerItemScript.SetCountry(texture);
|
||||
}
|
||||
}
|
||||
private void InitGameObject()
|
||||
{
|
||||
panel = transform.Find("Panel").gameObject;
|
||||
mapName = transform.Find("Panel/MapName").GetComponent<Text>();
|
||||
distance = transform.Find("Panel/Distance").GetComponent<Text>();
|
||||
level = transform.Find("Panel/level/Text").GetComponent<Text>();
|
||||
elevaction = transform.Find("Panel/Elevaction").GetComponent<Text>();
|
||||
slope = transform.Find("Panel/Slope").GetComponent<Text>();
|
||||
rideNum = transform.Find("Panel/RideNum").GetComponent<Text>();
|
||||
uploadByUserName = transform.Find("Panel/UploadByUserName").GetComponent<Text>();
|
||||
country = transform.Find("Panel/UploadByCountry").GetComponent<RawImage>();
|
||||
mapCountry = transform.Find("Panel/Country").GetComponent<RawImage>();
|
||||
|
||||
head = transform.Find("Panel/UploadByHead").GetComponent<RawImage>();
|
||||
mapRouteImage = transform.Find("Panel/MapRouteImage").GetComponent<RawImage>();
|
||||
altitudeGraph = transform.Find("Panel/AltitudeGraph").GetComponent<RawImage>();
|
||||
mapRanking = transform.Find("Panel/MapRanking");
|
||||
slider = transform.Find("Panel/Process").GetComponent<Slider>();
|
||||
processText = transform.Find("Panel/ProcessText").GetComponent<Text>();
|
||||
mapDescText = transform.Find("Panel/MapDesc").GetComponent<Text>();
|
||||
rideNow = transform.Find("Panel/RideNow").GetComponent<Button>();
|
||||
cancel = transform.Find("Panel/Cancel").GetComponent<Button>();
|
||||
var root = transform.parent;
|
||||
_map = root.Find("Map").GetComponent<AbstractMap>();
|
||||
canvasGroup = transform.GetComponent<CanvasGroup>();
|
||||
rideNow.enabled = false;
|
||||
rideNow.interactable = false;
|
||||
UIManager.AddEvent(rideNow.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, StartRide);
|
||||
UIManager.AddEvent(cancel.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Cancel);
|
||||
|
||||
}
|
||||
void StartRide(BaseEventData baseEvent)
|
||||
{
|
||||
var checkAnt = cyclingController.CheckAnt();
|
||||
#if UNITY_EDITOR
|
||||
checkAnt = true;
|
||||
#endif
|
||||
if (!checkAnt)
|
||||
{
|
||||
var alert = (GameObject)Instantiate(Resources.Load("UI/Prefab/Ride/Alert"), panel.transform);
|
||||
alert.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
cyclingController.ReSetUIManager();
|
||||
cyclingController.GoContinueRide();
|
||||
//启用ridenow
|
||||
canvasGroup.blocksRaycasts = false;
|
||||
depressFlag = true;
|
||||
}
|
||||
}
|
||||
void Cancel(BaseEventData baseEvent)
|
||||
{
|
||||
SceneManager.LoadScene("MainScene");
|
||||
}
|
||||
private void InitGameObjectData(MapRoute route)
|
||||
{
|
||||
if (route != null)
|
||||
{
|
||||
#region 绑定路书基本信息
|
||||
mapName.text = route.Name;
|
||||
level.text = route.Hard;
|
||||
elevaction.text = Math.Round(route.TotalClimb.GetValueOrDefault(0), 2).ToString() + "M";
|
||||
slope.text = Math.Round(route.AverageGrade, 2).ToString() + "%";
|
||||
rideNum.text = route.TheHeat.ToString();
|
||||
distance.text = route.Distance.ToString("f1") + "KM";
|
||||
mapDescText.text = route.Dec;
|
||||
var userList = ConfigHelper.mapApi.GetOnlineUserInfo(new int[] { route.UserId }).data;
|
||||
if (userList.Count > 0)
|
||||
{
|
||||
uploadByUserName.text = userList[0].Name;
|
||||
var countryUrl = App.Host + $"User/GetCountryImg?userid={userList[0].Id}";
|
||||
Utils.DisplayImage(head, userList[0].HeadImage);//头像
|
||||
|
||||
country.texture = cyclingController.GetCountryImageByCode(route.CountryCode);//上传者国家
|
||||
mapCountry.texture = cyclingController.GetCountryImageByName(userList[0].Country);//路书国家
|
||||
|
||||
Utils.DisplayImage(altitudeGraph, route.AltitudeGraph);//海拔图
|
||||
}
|
||||
#endregion
|
||||
StartCoroutine(HiddenLoading());
|
||||
#region 地图注册 排行榜等接口
|
||||
_map.OnInitialized += _map_OnInitialized;
|
||||
_map.OnEditorPreviewEnabled += OnEditorPreviewEnabled;
|
||||
_map.OnEditorPreviewDisabled += OnEditorPreviewDisabled;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
IEnumerator HiddenLoading()
|
||||
{
|
||||
yield return new WaitForSeconds(1f);
|
||||
loadingPanel.SetActive(false);
|
||||
}
|
||||
void _map_OnInitialized()
|
||||
{
|
||||
var visualizer = _map.MapVisualizer;
|
||||
visualizer.OnMapVisualizerStateChanged += (s) =>
|
||||
{
|
||||
if (s == ModuleState.Finished)
|
||||
{
|
||||
AddProcess(40);
|
||||
}
|
||||
};
|
||||
}
|
||||
void OnEditorPreviewEnabled()
|
||||
{
|
||||
//transform.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
void OnEditorPreviewDisabled()
|
||||
{
|
||||
//transform.gameObject.SetActive(true);
|
||||
}
|
||||
public float targetAlpha = 0f;
|
||||
public float alphaSpeed = 2.0f;
|
||||
private bool depressFlag = false;
|
||||
void Update()
|
||||
{
|
||||
if (canvasGroup == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetAlpha != canvasGroup.alpha && depressFlag)
|
||||
{
|
||||
canvasGroup.alpha = Mathf.Lerp(canvasGroup.alpha, targetAlpha, alphaSpeed * Time.deltaTime);
|
||||
if (Mathf.Abs(targetAlpha - canvasGroup.alpha) <= 0.01f)
|
||||
{
|
||||
canvasGroup.alpha = targetAlpha;
|
||||
}
|
||||
if (canvasGroup.alpha == 0)
|
||||
{
|
||||
transform.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -303,7 +303,7 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
||||
|
||||
public double[] Point { get; set; }
|
||||
|
||||
public bool exit { get; set; }
|
||||
//public bool exit { get; set; }
|
||||
|
||||
public double Speed { get; set; }
|
||||
|
||||
@@ -338,7 +338,15 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
||||
/// </summary>
|
||||
public bool Saved { get; set; }
|
||||
|
||||
//public int V { get; set; }
|
||||
}
|
||||
|
||||
public class GzipMsgModel
|
||||
{
|
||||
public int CommandType { get; set; }
|
||||
public int V { get; set; }
|
||||
public string Encoding { get; set; }
|
||||
public string Client { get; set; }
|
||||
}
|
||||
|
||||
public class ReceiveMsgModel
|
||||
|
||||
@@ -214,7 +214,7 @@ namespace Assets.Scenes.Ride.Scripts.Model
|
||||
System.IO.File.WriteAllText(recordFilePath, recordString);
|
||||
|
||||
recordData.Add(interruptRecord, files);
|
||||
|
||||
Saved = true;
|
||||
SaveDataAysnc(recordData, path);
|
||||
}
|
||||
/// <summary>
|
||||
|
||||
@@ -5,6 +5,8 @@ using Assets.Scripts.Apis;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
@@ -78,6 +80,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
//发送一条心跳包
|
||||
//SendHeartbeat();
|
||||
//告诉tcp服务器gzip
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,15 +98,79 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
SendHeartbeat();
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] Compress(string text)
|
||||
{
|
||||
var bytes = Encoding.Unicode.GetBytes(text);
|
||||
using (var mso = new MemoryStream())
|
||||
{
|
||||
using (var gs = new GZipStream(mso, CompressionMode.Compress))
|
||||
{
|
||||
gs.Write(bytes, 0, bytes.Length);
|
||||
}
|
||||
return mso.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static string Decompress(byte[] data)
|
||||
{
|
||||
// Read the last 4 bytes to get the length
|
||||
byte[] lengthBuffer = new byte[4];
|
||||
Array.Copy(data, data.Length - 4, lengthBuffer, 0, 4);
|
||||
int uncompressedSize = BitConverter.ToInt32(lengthBuffer, 0);
|
||||
|
||||
var buffer = new byte[uncompressedSize];
|
||||
using (var ms = new MemoryStream(data))
|
||||
{
|
||||
using (var gzip = new GZipStream(ms, CompressionMode.Decompress))
|
||||
{
|
||||
gzip.Read(buffer, 0, uncompressedSize);
|
||||
}
|
||||
}
|
||||
return Encoding.Unicode.GetString(buffer);
|
||||
}
|
||||
/// <summary>
|
||||
/// 发送心跳包
|
||||
/// </summary>
|
||||
private static void SendHeartbeat()
|
||||
{
|
||||
Send(0, App.CurrentUser.Id, new double[] { 0, 0 }, false, false, 0, true, 0);
|
||||
try
|
||||
{
|
||||
var model = new
|
||||
{
|
||||
CommandType = 0,
|
||||
};
|
||||
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(model));
|
||||
_udpService.Send(sendBytes, sendBytes.Length);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("发送心跳失败:" + e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 告诉TCP服务器给我Gzip的格式
|
||||
/// </summary>
|
||||
public static void SendGizpModel()
|
||||
{
|
||||
try
|
||||
{
|
||||
var model = new GzipMsgModel
|
||||
{
|
||||
CommandType = 2,
|
||||
V = 2,
|
||||
Encoding = "gzip",
|
||||
Client = App.AppVersion
|
||||
};
|
||||
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(model));
|
||||
_udpService.Send(sendBytes, sendBytes.Length);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("发送失败:" + e);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 发送数据
|
||||
/// </summary>
|
||||
@@ -119,13 +186,15 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
try
|
||||
{
|
||||
Point[0] = Math.Round(Point[0], 6, MidpointRounding.AwayFromZero);
|
||||
Point[1] = Math.Round(Point[1], 6, MidpointRounding.AwayFromZero);
|
||||
var model = new MsgModel
|
||||
{
|
||||
RouteId = RouteId,
|
||||
MemberId = MemberId,
|
||||
Point = Point,
|
||||
IsCompleted = IsCompleted,
|
||||
exit = exit,
|
||||
//exit = exit,
|
||||
EndDistance = endDistance,
|
||||
//ShowVirtual = showVirtual,
|
||||
CommandType = commandType,
|
||||
@@ -135,7 +204,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
WeightKg = weightKg,
|
||||
Competitionid = competitionId,
|
||||
Saved = saved,
|
||||
V = 1
|
||||
//V = 1
|
||||
};
|
||||
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(model));
|
||||
_udpService.Send(sendBytes, sendBytes.Length);
|
||||
@@ -206,15 +275,6 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<OnlineUser> GetCompetitionOnlineRanking(int competitionId,int pageIndex = 1,int pageSize = 5)
|
||||
{
|
||||
var result = onlineUserHelper.OnlineUsers.Where(u => u.CompetitionId == competitionId).OrderByDescending(c=>c.EndDistance).ToList();
|
||||
|
||||
var list = result.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
|
||||
//TODO:
|
||||
return list;
|
||||
}
|
||||
|
||||
public static int GetNearRiderCount()
|
||||
{
|
||||
return onlineUserHelper.OnlineUsers.Count();
|
||||
|
||||
@@ -3,6 +3,8 @@ using Assets.Scripts;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
@@ -79,6 +81,7 @@ namespace Assets.Scenes.Ride.Scripts.Network
|
||||
protected override void OnConnected()
|
||||
{
|
||||
base.OnConnected();
|
||||
MapUDPService.SendGizpModel();
|
||||
}
|
||||
|
||||
protected override void OnDisconnected()
|
||||
@@ -93,24 +96,59 @@ namespace Assets.Scenes.Ride.Scripts.Network
|
||||
}
|
||||
}
|
||||
|
||||
public string Decompress(byte[] data)
|
||||
{
|
||||
// Read the last 4 bytes to get the length
|
||||
byte[] lengthBuffer = new byte[4];
|
||||
Array.Copy(data, data.Length - 4, lengthBuffer, 0, 4);
|
||||
int uncompressedSize = BitConverter.ToInt32(lengthBuffer, 0);
|
||||
|
||||
var buffer = new byte[uncompressedSize];
|
||||
using (var ms = new MemoryStream(data))
|
||||
{
|
||||
using (var gzip = new GZipStream(ms, CompressionMode.Decompress))
|
||||
{
|
||||
gzip.Read(buffer, 0, uncompressedSize);
|
||||
}
|
||||
}
|
||||
return Encoding.UTF8.GetString(buffer);
|
||||
}
|
||||
|
||||
private string temp = "";
|
||||
protected override void OnReceived(byte[] buffer, long offset, long size)
|
||||
{
|
||||
//base.OnReceived(buffer, offset, size);
|
||||
var returnData = Encoding.UTF8.GetString(buffer, (int)offset, (int)size);
|
||||
//Debug.WriteLine("收到:" + returnData+"\r\n");
|
||||
//System.IO.File.AppendAllText(System.Environment.CurrentDirectory + "接收到的数据.txt", returnData.Trim().Replace("\0", "")+"\r\n", Encoding.UTF8);
|
||||
var list = new List<ReceiveMsgModel>();
|
||||
var itemList = returnData.Split('|');
|
||||
|
||||
foreach (var item in itemList)
|
||||
//*sdfsd#*sdfsd#*sdfsd#*sdfsd#
|
||||
foreach (var item in returnData)
|
||||
{
|
||||
var info = ReceiveMsgModel.Parse(item);
|
||||
if (info != null)
|
||||
if (item != '*' && item != '#')
|
||||
{
|
||||
list.Add(info);
|
||||
temp += item;
|
||||
}
|
||||
|
||||
if (item == '#')
|
||||
{
|
||||
//解压 temp
|
||||
var uncompressStr = Decompress(Convert.FromBase64String(temp));
|
||||
var list = new List<ReceiveMsgModel>();
|
||||
var itemList = uncompressStr.Split('|');
|
||||
|
||||
temp = "";
|
||||
|
||||
foreach (var obj in itemList)
|
||||
{
|
||||
var info = ReceiveMsgModel.Parse(obj);
|
||||
if (info != null)
|
||||
{
|
||||
list.Add(info);
|
||||
}
|
||||
}
|
||||
_action(list);
|
||||
}
|
||||
}
|
||||
_action(list);
|
||||
//Debug.WriteLine("收到:" + returnData+"\r\n");
|
||||
//System.IO.File.AppendAllText(System.Environment.CurrentDirectory + "接收到的数据.txt", returnData.Trim().Replace("\0", "")+"\r\n", Encoding.UTF8);
|
||||
}
|
||||
|
||||
protected override void OnError(SocketError error)
|
||||
|
||||
@@ -28,8 +28,15 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
_playerController = FindObjectOfType<PlayerController>();
|
||||
//创建UI
|
||||
uiObject = transform.parent.Find("SingleUI/Panel/ArrowList");
|
||||
arrowImage = Instantiate(Resources.Load<Image>("UI/Prefab/Ride/ReviewArrow"), uiObject);
|
||||
arrowImage.color = new Color(0.1529412f, 0.8745098f, 0.8901961f);
|
||||
if (mainController.cyclingController.Mode == CyclingModel.Competition)
|
||||
{
|
||||
arrowImage = Instantiate(Resources.Load<Image>("UI/Prefab/Match/CompetitionArrow"), uiObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
arrowImage = Instantiate(Resources.Load<Image>("UI/Prefab/Ride/ReviewArrow"), uiObject);
|
||||
arrowImage.color = new Color(0.1529412f, 0.8745098f, 0.8901961f);
|
||||
}
|
||||
}
|
||||
public override bool GetStart()
|
||||
{
|
||||
@@ -99,6 +106,14 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
protected override void AfterExcute()
|
||||
{
|
||||
var playerScreenPos = Camera.main.WorldToScreenPoint(transform.position);
|
||||
//如果是比赛模式头像
|
||||
if (mainController.cyclingController.Mode == CyclingModel.Competition)
|
||||
{
|
||||
playerScreenPos.y += 10f;
|
||||
}
|
||||
//如果观察的是当前用户
|
||||
var iscurrentUser = mainController.currentPlayer.UserId == UserId;
|
||||
arrowImage.gameObject.SetActive(!iscurrentUser);
|
||||
((RectTransform)arrowImage.transform).position = playerScreenPos;
|
||||
|
||||
if (IsShowInfo)
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
protected override void Init()
|
||||
{
|
||||
base.Init();
|
||||
|
||||
UserId = App.CurrentUser.Id;
|
||||
totalDistance = mainController.selectParamModel.EndDistance;
|
||||
currentlatlong = mainController.GetCenterCoordinate();
|
||||
trail = FindObjectOfType<TrailRenderer>();
|
||||
@@ -57,7 +57,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
bicycleWeight = App.CurrentUser.BicycleWeight;
|
||||
//#if UNITY_EDITOR
|
||||
System.Random rd = new System.Random();
|
||||
power = 200; //rd.Next(150, 300);//测试功率
|
||||
power = 2000; //rd.Next(150, 300);//测试功率
|
||||
//#endif
|
||||
mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100);
|
||||
}
|
||||
@@ -130,7 +130,10 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
//上传数据
|
||||
public override void Upload()
|
||||
{
|
||||
mainController.Save(TotalDistance);
|
||||
if (!mainController.cyclingController.recorderData.Saved)//处理重复上传的问题
|
||||
{
|
||||
mainController.Save(TotalDistance);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -113,6 +113,7 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
{
|
||||
Reset();
|
||||
selectPlayer.SetActive(true);
|
||||
selectPlayer.GetComponent<SelectPlayerFactory>().Refresh();
|
||||
}
|
||||
//开始游戏触发事件
|
||||
public void StartRide(BaseEventData baseEventData)
|
||||
|
||||
@@ -169,7 +169,7 @@ namespace Assets.Scripts
|
||||
var newLoading = MonoBehaviour.Instantiate(Resources.Load<GameObject>("UI/Prefab/Common/Loading"));
|
||||
newLoading.name = "Loading";
|
||||
newLoading.GetComponent<RectTransform>().position = new Vector3(Screen.width / 2, Screen.height / 2, 0);
|
||||
newLoading.transform.parent = game.transform;
|
||||
newLoading.transform.SetParent(game.transform);
|
||||
loading = newLoading.transform;
|
||||
}
|
||||
loading.GetComponent<LoadingPf>().Show();
|
||||
|
||||
Reference in new issue
Block a user