赛事逻辑细节调整

This commit is contained in:
lishuo 2021-07-09 18:16:50 +08:00
parent b2a527f518
commit eb1803c9ef
25 changed files with 6190 additions and 2935 deletions

View File

@ -1,5 +1,104 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4382447086690716054
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5919874311317632104}
- component: {fileID: 8200741020039933140}
- component: {fileID: 5534840131862683971}
- component: {fileID: 3632779539013864088}
- component: {fileID: 2706448526702157850}
m_Layer: 5
m_Name: Head
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &5919874311317632104
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4382447086690716054}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 6493213265088056322}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 7.7}
m_SizeDelta: {x: 34, y: 34}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8200741020039933140
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4382447086690716054}
m_CullTransparentMesh: 0
--- !u!114 &5534840131862683971
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4382447086690716054}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Texture: {fileID: 0}
m_UVRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
--- !u!114 &3632779539013864088
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4382447086690716054}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: adb30198aa32dd140b5750692dd48104, type: 3}
m_Name:
m_EditorClassIdentifier:
radius: 0
--- !u!114 &2706448526702157850
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4382447086690716054}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: adb30198aa32dd140b5750692dd48104, type: 3}
m_Name:
m_EditorClassIdentifier:
radius: 17
--- !u!1 &6493213265088056325
GameObject:
m_ObjectHideFlags: 0
@ -31,6 +130,7 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 7997588139725775237}
- {fileID: 5919874311317632104}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -101,7 +201,7 @@ GameObject:
- component: {fileID: 903010575534991368}
- component: {fileID: 69121430299213633}
m_Layer: 5
m_Name: Image
m_Name: Back
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -123,8 +223,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0.14, y: 5.06}
m_SizeDelta: {x: 32.28424, y: 28.873718}
m_AnchoredPosition: {x: -0.000014648, y: 7.7}
m_SizeDelta: {x: 34, y: 34}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &903010575534991368
CanvasRenderer:
@ -153,7 +253,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 38b250357a82cd14c9df5129757f2e58, type: 3}
m_Sprite: {fileID: 21300000, guid: d0c64427b3fee1c43b1029096f236331, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
fileFormatVersion: 2
guid: d89e303a3008b774e87b6ba0a35ea20b
folderAsset: yes
DefaultImporter:
guid: 3ce179eef26cbf94ba2bd307690e4beb
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:

View File

@ -0,0 +1,57 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6205008823505179609
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5943061288920100496}
- component: {fileID: 5182925534904330519}
m_Layer: 0
m_Name: OnlinePlayer
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &5943061288920100496
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6205008823505179609}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5182925534904330519
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6205008823505179609}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 281c3f68a13a427499876dec554c3223, type: 3}
m_Name:
m_EditorClassIdentifier:
character: {fileID: 6205008823505179609}
characterAnimator: {fileID: 0}
nextPos: {x: 0, y: 0, z: 0}
stopRecord: 0
CurrentIndex: 0
CurrentDistance: 0
NextSlopeTotalDistance: 0
PreElevation: 0
PreSlope: 0
currentRotation: {x: 0, y: 0, z: 0, w: 0}
currentPos: {x: 0, y: 0, z: 0}
_playerController: {fileID: 0}

View File

@ -1,7 +1,6 @@
fileFormatVersion: 2
guid: 0e8389fe2e69de14ba5b9b48f580dd81
folderAsset: yes
DefaultImporter:
guid: 0c03153a91a4d1a49a0b34d13ad04b96
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:

File diff suppressed because it is too large Load Diff

View File

@ -45,7 +45,7 @@ public static class App
public static int firstEnter { get; set; }
public static IPEndPoint UdpAddress { get; private set; } = new IPEndPoint(IPAddress.Parse("192.168.0.97"), 11000);
public static IPEndPoint TcpAddress { get; private set; } = new IPEndPoint(IPAddress.Parse("192.168.0.97"), 21001);
public static IPEndPoint TcpAddress { get; private set; } = new IPEndPoint(IPAddress.Parse("192.168.0.102"), 21001);
public static UpdateModel UpdateObject { get; set; }
public static int CompetionId { get; set; }//比赛id
//public static string AppDownloadUrl { get; internal set; }
@ -66,17 +66,13 @@ public static class App
static App()
{
//CultureInfo currentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
//currentCulture.NumberFormat.NumberDecimalSeparator = ".";
//Thread.CurrentThread.CurrentCulture = currentCulture;
//System.Globalization.CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
//#if !UNITY_EDITOR
//// Host = "http://pf.juze.pro/";
//// UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 21000);
//// TcpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 21001);
// Host = "https://wx.powerfun.com.cn/";
// UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11000);
// TcpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11001);
//#endif
#if !UNITY_EDITOR
// Host = "http://pf.juze.pro/";
// UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 21000);
// TcpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 21001);
Host = "https://wx.powerfun.com.cn/";
UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11000);
TcpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11001);
#endif
}
}

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: fb74a9f48e6075b4098a071b7c41755b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 7cecb30d95cebeb43b5768b505937c28
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -305,14 +305,15 @@ namespace Assets.Scenes.Ride.Scripts
Vector3 v = Vector3.Lerp(prePos, nextPos, t);
currentPos = v;
transform.localPosition = v;
if (UserId == mainController.currentPlayer.UserId)
{
yield return new WaitForEndOfFrame();
}
else
{
yield return null;
}
//if (UserId == mainController.currentPlayer.UserId)
//{
// yield return new WaitForEndOfFrame();
// }
// else
// {
// yield return null;
// }
yield return new WaitForEndOfFrame();
}
}
#endregion

View File

@ -86,7 +86,7 @@ namespace Assets.Scenes.Ride.Scripts
protected void SetNextIndex()
{
var p = pageIndex + 1;
if (p * pageSize <= totalPages)
if (p <= totalPages)
{
pageIndex++;
}

View File

@ -222,7 +222,6 @@ namespace Assets.Scenes.Ride.Scripts
while (time < 0) {
MoveElevationImage();
BindDataSource();
fps.text = (1 / Time.deltaTime).ToString();
time = 1;
}
MoveCamera();

View File

@ -11,6 +11,7 @@ namespace Assets.Scenes.Ride.Scripts
public class CompetitionRankingFactory : BaseListFactory
{
private bool isInit = false;
private bool isnext = false;
private List<CompetitionRankingSortModel> rankingList {get;set;}
private AbstractPlayer currentPlayer { get; set; }
private Text Title { get; set; }
@ -45,11 +46,15 @@ namespace Assets.Scenes.Ride.Scripts
{
SetPreIndex();
isInit = true;
isnext = false;
CreateList();
}
private void NextPage(BaseEventData baseEventData)
{
SetNextIndex();
isInit = true;
isnext = true;
CreateList();
}
protected override void CreateList()
{
@ -71,10 +76,23 @@ namespace Assets.Scenes.Ride.Scripts
}
Rank.text = $"{pageIndex}/{totalPages}";
var pagedList = rankingList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
//删除
var currentList = FindObjectsOfType<CompetitionRankingItem>();
foreach (var item in currentList)
{
var e = pagedList.Where(c => c.UserId == item.UserId).FirstOrDefault();
if (e == null)
{
item.transform.gameObject.SetActive(false);//TODO这里暂时不删除删除对应的图片和脚本依赖这个对象脚本提供一个dispose
bufferSize--;
}
}
//创建或者新增
for (int i = 0; i < pagedList.Count(); i++)
{
CreateOrUpdate(pagedList[i]);
}
}
private void CreateOrUpdate(CompetitionRankingSortModel item)
{
@ -95,7 +113,13 @@ namespace Assets.Scenes.Ride.Scripts
else
{
//情况二没有足够的buffer找到要被淘汰的buffer()最后一名
competitionRankingItem = rankingList.OrderByDescending(c => c.rank).FirstOrDefault();
if (isnext) {
competitionRankingItem = rankingList.OrderBy(c => c.rank).FirstOrDefault();
}
else
{
competitionRankingItem = rankingList.OrderByDescending(c => c.rank).FirstOrDefault();
}
}
}
@ -106,7 +130,7 @@ namespace Assets.Scenes.Ride.Scripts
competitionRankingItem.setSpeed(item.Speed.ToString() + "KM/H");
competitionRankingItem.setHead(item.Headimage);
competitionRankingItem.setCountry(item.CountryImg);
competitionRankingItem.setDistance(item.Near.ToString() + "KM");
competitionRankingItem.setDistance(currentPlayer.UserId == item.UserId?"0KM": item.Near.ToString() + "KM");
competitionRankingItem.transform.SetSiblingIndex(item.Index);
}
}

View File

@ -74,8 +74,8 @@ namespace Assets.Scenes.Ride.Scripts
mainController.SetStart();
countDownPanel.SetActive(false);
}
//显示结果
var ishowResult = (competitionModel.mapCompetition?.HasRecord ?? false) || competitionModel.recorderData.Saved;
//显示结果(非观战到达终点弹窗)
var ishowResult = !mainController.isWatch && (competitionModel.mapCompetition?.HasRecord ?? false) || competitionModel.recorderData.Saved;
if (ishowResult)
{
ShowResultList();

View File

@ -41,20 +41,6 @@ namespace Assets.Scenes.Ride.Scripts
}
private void Create(CompetitionRankingSortModel item)
{
////创建
//GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem;
//GameObject newObj = (GameObject)Instantiate(prefabItem, parent);
//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");
////competitionRankingItem.setTimer(item.ti)
//bufferSize++;
var rankingList = FindObjectsOfType<TopRankingItem>();
var competitionRankingItem = rankingList.Where(c => c.UserId == item.UserId).FirstOrDefault();
//如果当前有这个用户则更新没有则创建并setslibingindex

View File

@ -21,6 +21,7 @@ using Assets.Scenes.Ride.Scripts.Model.RiderModels;
using System.IO;
using ChartAndGraph;
using UnityEngine.UI;
using System.Diagnostics;
public class CyclingController : DeviceServiceMonoBase
{
@ -48,7 +49,7 @@ public class CyclingController : DeviceServiceMonoBase
public int competitionId { get; set; }
private MapApi mapApi;
public DateTime startTime;
public DateTime startTime { get; set; }
public DateTime endTime;
public bool isQuit;
public bool isPause;
@ -100,7 +101,7 @@ public class CyclingController : DeviceServiceMonoBase
{
UIManager.Instance.MainPanel = this.transform.Find("SingleUI/Panel").GetComponent<PFUIPanel>();
UIManager.Instance.ModalsPanel = this.transform.Find("SingleUI/ModalPanel").GetComponent<PFUIPanel>();
onlineUserPrefab = Resources.Load<GameObject>("UI/Prefab/Ride/OnlinePlayer");
onlineUserPrefab = Resources.Load<GameObject>("UI/Prefab/Match/OnlinePlayer");
miniMapPlayerPrefab = Resources.Load<GameObject>("UI/Prefab/Ride/MiniMapPlayer");
watcher = Resources.Load<GameObject>("UI/Prefab/Match/Watcher");
target = transform.Find("Target");
@ -298,15 +299,17 @@ public class CyclingController : DeviceServiceMonoBase
//miniMap.SetActive(true);
map.OnTileFinished += Map_OnTileFinished;
mapPos = map.transform.position;
//SetCyclingModel(CyclingModel.Competition);
//为了解决比赛观看模式下,切换观看用户之前跨度过大导致地图海拔信息不完整的问题
RangeAroundTransformTileProviderOptions options = new RangeAroundTransformTileProviderOptions
{
targetTransform = target,
visibleBuffer = 4,
disposeBuffer = 4
};
map.SetExtent(MapExtentType.RangeAroundTransform, options);
map.SetExtentOptions(options);
}
//private void Map_OnTileFinished(Mapbox.Unity.MeshGeneration.Data.UnityTile obj)
//{
// var playerController = player.GetComponent<PlayerController>();
// player.transform.position = map.GeoToWorldPosition(playerController.Currentlatlong);
//}
//设置骑行模式
public void SetCyclingModel(CyclingModel mode)
{
@ -338,23 +341,14 @@ public class CyclingController : DeviceServiceMonoBase
if (selectedPlayer != null)
{
currentPlayer = selectedPlayer;
selectedPlayer.transform.localScale = new Vector3(3f, 3f, 3f);
}
var unselectedPlayers = coll.Where(c => c.UserId != userId).ToList();
foreach (var item in unselectedPlayers)
{
item.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
}
//如果是3d地图显示3d小人
//if (Is3dView)
//{
// player.SetActive(true);
// var playerscript = player.GetComponent<AbstractPlayer>();
// playerscript = currentPlayer;
//}
//if (Is3dView)
//{
// onlinePlayer = Resources.Load<GameObject>("UI/Prefab/Ride/OnlinePlayer11");
// var ob = Instantiate(onlinePlayer, transform);
// ob.SetActive(true);
// ob.transform.position = currentPlayer.currentPos;
// //var on = ob.AddComponent<AbstractPlayer>();
// //on = currentPlayer;
//}
}
public void ChangeRandomPlayer()
{
@ -447,7 +441,7 @@ public class CyclingController : DeviceServiceMonoBase
onlinePlayerController.UserId = onlineRider.UserId;
onlinePlayerController.SetDataSource(onlineTotalDistance, onlineDistance, onlineRider.NickName, onlineRider.WeightKg, index);
onlinePlayerController.SetDataSource(onlineTotalDistance, onlineDistance, onlineRider.NickName, onlineRider.WeightKg, new Vector2d(onlineRider.Point.Latitude, onlineRider.Point.Longitude),index);
onlinePlayerController.SetHead(onlineRider.WxHeadImg);
//小地图人物
GameObject miniPlayer = (GameObject)Instantiate(miniMapPlayerPrefab, transform);
@ -460,7 +454,7 @@ public class CyclingController : DeviceServiceMonoBase
}
else
{
currentUser.SetDataSource(onlineTotalDistance, onlineDistance, onlineRider.NickName, onlineRider.WeightKg, index);
currentUser.SetDataSource(onlineTotalDistance, onlineDistance, onlineRider.NickName, onlineRider.WeightKg, new Vector2d(onlineRider.Point.Latitude, onlineRider.Point.Longitude), index);
}
//如果是观察者且当前第一此进入场景(TODO这样切换会闪一下待解决)
if (isWatch && currentPlayer is PlayerController)
@ -488,8 +482,8 @@ public class CyclingController : DeviceServiceMonoBase
{
item.IsShowInfo = false;
}
var frontPlayer = others.Where(c => c.TotalDistance - playerController.TotalDistance < 0.25 && c.TotalDistance - playerController.TotalDistance >= 0 && !(c is PlayerController)).OrderBy(c=>c.TotalDistance).FirstOrDefault();
var bakePlayer = others.Where(c => c.TotalDistance - playerController.TotalDistance >-0.25 && c.TotalDistance - playerController.TotalDistance < 0 && !(c is PlayerController)).OrderByDescending(c=>c.TotalDistance).FirstOrDefault();
var frontPlayer = others.Where(c => c.TotalDistance - currentPlayer.TotalDistance < 0.25 && c.TotalDistance - currentPlayer.TotalDistance >= 0 && c.UserId != currentPlayer.UserId).OrderBy(c=>c.TotalDistance).FirstOrDefault();
var bakePlayer = others.Where(c => c.TotalDistance - currentPlayer.TotalDistance >-0.25 && c.TotalDistance - currentPlayer.TotalDistance < 0 && c.UserId != currentPlayer.UserId).OrderByDescending(c=>c.TotalDistance).FirstOrDefault();
if(frontPlayer != null)
frontPlayer.IsShowInfo = true;
if (bakePlayer != null)
@ -631,6 +625,7 @@ public class CyclingController : DeviceServiceMonoBase
#endregion
#region
Stopwatch sw { get; set; }
//开始骑行
public void SetStart()
{
@ -638,6 +633,9 @@ public class CyclingController : DeviceServiceMonoBase
{
isStart = true;
startTime = UIManager.Now.GetDateTime();
//骑行累计毫秒
sw = new Stopwatch();
sw.Start();
}
else
{
@ -659,6 +657,11 @@ public class CyclingController : DeviceServiceMonoBase
//退出或者完成骑行
public void SetQuit()
{
//耗时巨大的代码
sw.Stop();
TimeSpan ts2 = sw.Elapsed;
UnityEngine.Debug.Log(string.Format("Stopwatch总共花费{0}ms.", ts2.TotalMilliseconds));
//TODO后算接口需要增加累计毫秒字段
isStart = false;
isQuit = true;
}
@ -789,28 +792,25 @@ public class CyclingController : DeviceServiceMonoBase
return new Vector2d(0,0);
}
}
/// <summary>
/// 海拔图数据
/// </summary>
public float[] GetRealTimeLineChartData(int index)
private double CurrentMaxAp = 0;//当前最大AP
public void ComputeMaxAP(double power,int ticks)
{
List<float> dist = new List<float>();
var list = mapData.List.Select(c => (float) c.Elevation ).ToArray();
var count = list.Count();
for (int i = 0; i < count; i++)
//计算当前最大AP
if (power > CurrentMaxAp)
{
if (i > index)
{
dist.Add(list[i]);
}
CurrentMaxAp = power;
}
//分段记录MaxAp
switch (ticks)
{
case 5: recorderData.FiveSecondsMaxAP = CurrentMaxAp; break;
case 10: recorderData.TenSecondsMaxAP = CurrentMaxAp; break;
case 60: recorderData.OneMinuteMaxAP = CurrentMaxAp; break;
case 300: recorderData.FiveMinutesMaxAp = CurrentMaxAp; break;
case 1200: recorderData.TwentyMinutesMaxAP = CurrentMaxAp; break;
default:
break;
}
return dist.ToArray();
}
public float[] GetLineChartData()
{
var list = mapData.List.Select(c => (float)c.Elevation).ToArray();
return list;
}
#endregion
}

View File

@ -0,0 +1,32 @@
using UnityEngine;
using UnityEngine.UI;
namespace Assets.Scenes.Ride.Scripts
{
public class FpsController : MonoBehaviour
{
public float showTime = 1f;
public Text tvFpsInfo;
private int count = 0;
private float deltaTime = 0f;
// Update is called once per frame
private void Awake()
{
tvFpsInfo = GetComponent<Text>();
}
private void Update()
{
count++;
deltaTime += Time.deltaTime;
if (deltaTime >= showTime)
{
float fps = count / deltaTime;
//float milliSecond = deltaTime * 1000 / count;
string strFpsInfo = string.Format("{0:0.}FPS", fps);
tvFpsInfo.text = strFpsInfo;
count = 0;
deltaTime = 0f;
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1991677607237434c8b4a5acebccc6bf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -111,6 +111,12 @@ namespace Assets.Scenes.Ride.Scripts.Model
public int GlobalCyclingId { get; set; }
public double? TwentyMinutesMaxAP { get; set; }
public double? FiveSecondsMaxAP { get; set; }
public double? TenSecondsMaxAP { get; set; }
public double? OneMinuteMaxAP { get; set; }
public double? FiveMinutesMaxAp { get; set; }
public void SaveWithLocalRecordAysnc(CyclingModel cyclingModel, RouteResultParam selectParam, string imageName,string recordId,string path)
{
Dictionary<MapInterruptRecord, List<string>> recordData = new Dictionary<MapInterruptRecord, List<string>>();

View File

@ -38,18 +38,6 @@ namespace Assets.Scenes.Ride.Scripts
}
private void Create(NearRiderModel item)
{
////创建
//GameObject prefabItem = item.IsSelf ? nearByMajorItem : nearByItem;
//GameObject newObj = (GameObject)Instantiate(prefabItem, parent);
//var nearByItemscript = newObj.GetComponent<NearByItemScript>();
//nearByItemscript.setUserId(item.Id);
//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.Country));
//nearByItemscript.setDistance(item.Near.ToString() + "KM");
//bufferSize++;
var rankingList = FindObjectsOfType<NearByItemScript>();
var nearByItemscript = rankingList.Where(c => c.UserId == item.Id).FirstOrDefault();
//如果当前有这个用户则更新没有则创建并setslibingindex

View File

@ -278,13 +278,15 @@ namespace Assets.Scenes.Ride.Scripts
//比赛中的人只能看到当前比赛的人
public static List<OnlineUser> GetCompetitionOnlineUsers(int competitionId)
{
var result = onlineUserHelper.OnlineUsers.Where(u => u.CompetitionId == competitionId && !u.IsWatcher).ToList();
//var result = onlineUserHelper.OnlineUsers.Where(u => u.CompetitionId == competitionId && !u.IsWatcher).ToList();
var result = onlineUserHelper.OnlineUsers.Where(u =>!u.IsWatcher).ToList();
return result;
}
//当前比赛观察者
public static List<OnlineUser> GetCompetitionWatchers(int competitionId,int size = 5)
{
var result = onlineUserHelper.OnlineUsers.Where(u => u.CompetitionId == competitionId && u.IsWatcher).Take(size).ToList();
//var result = onlineUserHelper.OnlineUsers.Where(u => u.CompetitionId == competitionId && u.IsWatcher).Take(size).ToList();
var result = onlineUserHelper.OnlineUsers.Where(u =>u.IsWatcher).Take(size).ToList();
return result;
}

View File

@ -7,6 +7,7 @@ using System;
using UnityEngine;
using UnityEngine.UI;
using System.Linq;
using Mapbox.Utils;
namespace Assets.Scenes.Ride.Scripts
{
@ -31,6 +32,13 @@ namespace Assets.Scenes.Ride.Scripts
if (mainController.cyclingController.Mode == CyclingModel.Competition)
{
arrowImage = Instantiate(Resources.Load<Image>("UI/Prefab/Match/CompetitionArrow"), uiObject);
//比赛模式
if (!string.IsNullOrEmpty(headUrl))
{
var rawImge = arrowImage.transform.Find("Head").GetComponent<RawImage>();
Utils.DisplayImage(rawImge, headUrl, true);
rawImge.gameObject.SetActive(true);
}
}
else
{
@ -55,7 +63,7 @@ namespace Assets.Scenes.Ride.Scripts
}
}
double diff = 0;
public void SetDataSource(double _totalDistance, double _distance,string Name,double weightKg,int index=0)
public void SetDataSource(double _totalDistance, double _distance,string Name,double weightKg,Vector2d point,int index=0)
{
totalDistance = _totalDistance;
distance = _distance;
@ -63,8 +71,12 @@ namespace Assets.Scenes.Ride.Scripts
nickName = Name;
weightKgStr = weightKg.ToString("f2") + "W/KG";
CurrentIndex = index;
//Point = point;
currentlatlong = point;
}
public Vector2d Point { get; set; }
private string headUrl;
public void SetHead(string url )
{
@ -108,6 +120,8 @@ namespace Assets.Scenes.Ride.Scripts
infoPanel?.Destroy();
transform.gameObject.Destroy();
}
TrailRenderer trailRenderer { get; set; }
protected override void AfterExcute()
{
@ -117,9 +131,34 @@ namespace Assets.Scenes.Ride.Scripts
{
playerScreenPos.y += 10f;
}
//如果观察的是当前用户
//如果观察的是当前用户 隐藏UI 添加trailrender
var iscurrentUser = mainController.currentPlayer.UserId == UserId;
arrowImage.gameObject.SetActive(!iscurrentUser);
if (iscurrentUser && trailRenderer == null)
{
trailRenderer = gameObject.AddComponent<TrailRenderer>();
trailRenderer = FindObjectOfType<TrailRenderer>();
//var color7 = Resources.Load<Material>("UI/Material/color7");
var Graph2 = Resources.Load<Material>("UI/Material/3dGraph2");
trailRenderer.materials = new Material[] { Graph2 };
trailRenderer.time = 30;
trailRenderer.startWidth = 1f;
trailRenderer.endWidth = 1f;
trailRenderer.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
trailRenderer.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
trailRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
trailRenderer.allowOcclusionWhenDynamic = false;
trailRenderer.textureMode = LineTextureMode.Tile;
trailRenderer.motionVectorGenerationMode = MotionVectorGenerationMode.ForceNoMotion;
trailRenderer.receiveShadows = false;
trailRenderer.rayTracingMode = UnityEngine.Experimental.Rendering.RayTracingMode.Off;
}
//如果不是当前用户则销毁轨迹效果
if (!iscurrentUser)
{
trailRenderer?.Destroy();
}
((RectTransform)arrowImage.transform).position = playerScreenPos;
if (IsShowInfo)
@ -197,10 +236,31 @@ namespace Assets.Scenes.Ride.Scripts
}
else
{
headPanel.transform.position = new Vector3(itemPosition.x, itemPosition.y, 0);
if (UserId != mainController.currentPlayer.UserId)
{
headPanel.transform.position = new Vector3(itemPosition.x, itemPosition.y, 0);
}
else
{
int nextIndex = CurrentIndex;
var viewIndex = chartDataSourceScript.GetViewIndex(nextIndex);
//人物移动 停止条件 到中间且线未加载完
if (GetStart() && chartDataSourceScript.ReachMid(viewIndex) && !chartDataSourceScript.ReachEnd())
{
var currentDistance = CurrentDistance;
var distance = Distance;
var offset = currentDistance > 0 ? distance * 1000 / currentDistance : 1;
graph.HorizontalScrolling += offset;
headPanel.transform.position = new Vector3(headPanel.transform.position.x, itemPosition.y, 0);
}
else
{
headPanel.transform.position = new Vector3(itemPosition.x, itemPosition.y, 0);
//headPanel.transform.DOMove(new Vector3(nextPosition.x, nextPosition.y, 0), 1);
}
}
//headPanel.transform.DOMove(new Vector3(itemPosition.x, itemPosition.y, 0), 1);
}
if (head == null)
{
head = headPanel.GetComponentInChildren<RawImage>();
@ -219,13 +279,21 @@ namespace Assets.Scenes.Ride.Scripts
{
MoveHead();
var rect = ((RectTransform)(headPanel.transform));
//如果切换到当前用户,当前用户头像变大
//如果切换到当前用户,当前用户头像变大,并且只显示当前用户
if (mainController.currentPlayer.UserId == UserId)
{
headPanel.SetActive(true);
rect.DOScale(new Vector3(1.5f, 1.5f, 1.5f), 0.5f);
//移动海拔图
var currentDistance = CurrentDistance;
var distance = Distance;
var offset = currentDistance > 0 ? distance * 1000 / currentDistance : 1;
graph.HorizontalScrolling += offset;
}
else
{
headPanel.SetActive(false);
rect.DOScale(new Vector3(1f, 1f, 1f), 0.5f);
}
}

View File

@ -116,6 +116,8 @@ namespace Assets.Scenes.Ride.Scripts
recorderData.PreDistance = Math.Round(preDistance,6,MidpointRounding.AwayFromZero);
recorderData.EndDistance = Math.Round(targetData._Distance,6,MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
//实时计算MaxAp
mainController.ComputeMaxAP(Power, ticks);
}
}
@ -158,7 +160,10 @@ namespace Assets.Scenes.Ride.Scripts
var currentDistance = CurrentDistance;
var distance = Distance;
var offset = currentDistance > 0 ? distance * 1000 / currentDistance : 1;
graph.HorizontalScrolling += offset;
if (UserId == mainController.currentPlayer.UserId)
{
graph.HorizontalScrolling += offset;
}
headPanel.transform.DOMove(new Vector3(oldPos.x, nextPosition.y, 0), 1);
}
else

View File

@ -47,8 +47,8 @@ namespace Assets.Scenes.Ride.Scripts
}
private void Update()
{
if(!vector3s.Contains(playerController.currentPos))
vector3s.Add(playerController.currentPos);
if(!vector3s.Contains(cyclingCotroller.currentPlayer.currentPos))
vector3s.Add(cyclingCotroller.currentPlayer.currentPos);
}
private void _map_OnUpdated()
@ -106,7 +106,7 @@ namespace Assets.Scenes.Ride.Scripts
var path = new List<Vector3>();
var mapData = cyclingCotroller.GetMapData();
if (mapData != null && playerController != null)
if (mapData != null && cyclingCotroller.currentPlayer != null)
{
//foreach (var mapDataItem in mapData.List)
for (int i = 0; i < mapData.List.Count; i++)
@ -123,7 +123,7 @@ namespace Assets.Scenes.Ride.Scripts
// dat.Add(item);
//}
//前后取50个点
decimal diff = i - playerController.CurrentIndex;
decimal diff = i - cyclingCotroller.currentPlayer.CurrentIndex;
decimal diffAbs = Math.Abs(diff);
if (diffAbs <= 200)
{

View File

@ -106,7 +106,7 @@ public class HomeController : PFUIPanel
#region
App.CompetionId = 1048;
App.RouteIdParam = 3386;
App.RouteIdParam = 5054;
SceneManager.LoadScene("Ride");
#endregion
}