tcp逻辑调整,历史逻辑增加赛事相关派生类

This commit is contained in:
lishuo committed 2021-07-01 18:41:35 +08:00
1 parent ec45246aa4
commit d6a7cd798f
41 files changed
+5420 -3128

No files matched your search

+3 -1
View File
@@ -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,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:
@@ -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,5 +1,5 @@
fileFormatVersion: 2
guid: c7fed0d77ca8dce4a85ed6f9a848355d
guid: 53789e6465db91d43adaa58df5c0e72d
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -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,5 +1,5 @@
fileFormatVersion: 2
guid: 2ef2d2135dbfedc418fd2a7a18a0a254
guid: 56d863ea131204b4682725335a6af540
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -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)