赛事功能完善

创建比赛按钮;loading页面more按钮等
This commit is contained in:
lishuo committed 2021-07-23 09:04:56 +08:00
1 parent eed2d13624
commit e76b5c443f
55 files changed
+7805 -3376

No files matched your search

@@ -1,6 +1,7 @@
using Assets.Scripts;
using Assets.Scripts.Apis;
using Assets.Scripts.Apis.Models;
using DG.Tweening;
using System;
using System.Collections.Generic;
using UnityEngine;
@@ -15,12 +16,16 @@ namespace Assets.Scenes.Ride.Scripts
private bool _canJoin = false;
private bool _canStart = false;
private RawImage CompetitionDesc;
private RawImage CompetitionDesc { get; set; }
private RawImage SponsorLogoImage { get; set; }
private Text StartTime { get; set; }
private Text Contestant { get; set; }
private Text CompetitionStatus { get; set; }
private Transform PlayersPanel {get;set;}
private GameObject LeftBack { get; set; }
private GameObject MiddleBack { get; set; }
private GameObject CancelJoin { get; set; }
private GameObject ReadMore { get; set; }
public override void InjectController(CyclingController controller)
{
@@ -29,6 +34,8 @@ namespace Assets.Scenes.Ride.Scripts
panel = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/CompetitonPanel"), transform);
PFUIPanel mainPanel = panel.GetComponent<PFUIPanel>();
PFUIPanel modelPanel = transform.Find("ModalPanel").GetComponent<PFUIPanel>();
CompetitionDesc = panel.transform.Find("CompetitionDesc").GetComponent<RawImage>();
SponsorLogoImage = panel.transform.Find("SponsorTitle/Sponsor").GetComponent<RawImage>();
cyclingController.SetUIManager(mainPanel, modelPanel);
}
protected override void Start()
@@ -54,9 +61,19 @@ namespace Assets.Scenes.Ride.Scripts
StartTime = panel.transform.Find("Time").GetComponent<Text>();
Contestant = panel.transform.Find("Contestant").GetComponent<Text>();
Watch = panel.transform.Find("Watch").gameObject;
CancelJoin = panel.transform.Find("CancelJoin").gameObject;
PlayersPanel = panel.transform.Find("PlayersPanel/List/Viewport/Content");
LeftBack = panel.transform.Find("LeftBack").gameObject;
MiddleBack = panel.transform.Find("MiddleBack").gameObject;
CompetitionStatus = panel.transform.Find("CompetitionStatus").GetComponent<Text>();
ReadMore = panel.transform.Find("ReadMore").gameObject;
UIManager.AddEvent(ReadMore, EventTriggerType.PointerClick, ReadCompetitionPreview);
UIManager.AddEvent(Watch, EventTriggerType.PointerClick, StartWatch);
UIManager.AddEvent(CancelJoin, EventTriggerType.PointerClick, CancelReserve);
}
private bool _canCancelApply = false;
//查询赛事相关数据
protected override void InitGameObjectData()
{
@@ -65,11 +82,22 @@ namespace Assets.Scenes.Ride.Scripts
//赛事状态按钮控制
_canJoin = competition.CanJoin;
_canStart = competition.CanStart;
var showWatch = !_canJoin && !_canStart && !competition.HasRecord;
_canCancelApply = competition.applyed;//可以取消预约
//报名或者开始比赛
rideNowText.text = _canJoin ? "Apply" : "RideNow";
//观战
var showWatch = !_canJoin && !_canStart && !_canCancelApply;
Watch.SetActive(showWatch);
rideNow.gameObject.SetActive(!showWatch);
rideNowText.text = _canJoin ? "Apply" : "RideNow";
//取消预约
CancelJoin.SetActive(_canCancelApply);
//比赛结束
if (competition.Status == 4)
{
rideNow.gameObject.SetActive(false);
Watch.SetActive(false);
CancelJoin.SetActive(false);
}
#region 赛事基本信息
//赛事名称
@@ -82,22 +110,35 @@ namespace Assets.Scenes.Ride.Scripts
slope.text = Math.Round(route.AverageGrade, 2).ToString() + "%";
//比赛开始时间
StartTime.text = competition.StartTime.ToLongTimeString();
//比赛状态
CompetitionStatus.text = GetENStatus(competition.StatusVlaue.ToString());
//参赛选手
Contestant.text = competition.UserList.Count.ToString() + "Players";
ShowPlayers(competition.UserList);
//路书描述
mapDescText.text = route.Dec;
//主办方logo
Utils.DisplayImage(SponsorLogoImage, competition.SponsorCoverage, true);
//赛事详情
//异步请求mapbox画出当前路书路线图
DrawMapRouteAsync(route.Id,1);
AddProcess(20);
if (!string.IsNullOrEmpty(competition.ShortPreview))
{
LeftBack.SetActive(false);
MiddleBack.SetActive(false);
Utils.DisplayImage(CompetitionDesc, competition.ShortPreview, true);
var canvasGroup = CompetitionDesc.GetComponent<CanvasGroup>();
canvasGroup.DOFade(1, 1);
}
else
{
//异步请求mapbox画出当前路书路线图
DrawMapRouteAsync(route.Id, 1);
}
AddProcess(30);
#endregion
StartCoroutine(HiddenLoading());
}
private int maxShowCout = 15;
private int maxShowCout = 9;
private void ShowPlayers(List<CompetitionPlayer> list)
{
var watcher = Resources.Load<GameObject>("UI/Prefab/Match/Watcher");
@@ -106,7 +147,8 @@ namespace Assets.Scenes.Ride.Scripts
foreach (var item in list)
{
index++;
if (index >= maxShowCout) {
if (index >= maxShowCout)
{
Instantiate(moreHead, PlayersPanel);
break;
}
@@ -123,26 +165,58 @@ namespace Assets.Scenes.Ride.Scripts
{
}
private string GetENStatus(string status)
{
switch (status)
{
case "已结束": return "DONE";
case "未开始": return "APPLIED";
case "报名中": return "APPLLYING";
case "比赛中": return "RACING";
}
return "";
}
#region 事件
//先报名后开始
protected override void StartRide(BaseEventData baseEvent)
{
//先报名
if (_canJoin)
try
{
MapCompetitionApi s = new MapCompetitionApi();
var rrr = s.ApplyMapCompetition(cyclingController.competitionId);
if (rrr.Result.result)
//先报名
if (_canJoin)
{
var competition = s.GetById(cyclingController.competitionId).data;
_canStart = competition.CanStart;
MapCompetitionApi s = new MapCompetitionApi();
var rrr = s.ApplyMapCompetition(cyclingController.competitionId);
if (rrr.result)
{
//var competition = s.GetById(cyclingController.competitionId).data;
//_canStart = competition.CanStart;
_canJoin = false;
//取消预约
CancelJoin.SetActive(true);
}
//if (_canStart)
{
rideNowText.text = "RideNow";
}
}
else
{
base.StartRide(baseEvent);
}
rideNowText.text = "RideNow";
}
else
catch (Exception e)
{
base.StartRide(baseEvent);
Debug.LogError(e);
}
}
//查看赛事详情
protected void ReadCompetitionPreview(BaseEventData baseEvent)
{
Application.OpenURL(App.CurrentUser.WebHost + $"#/Mine/MatchPreview?id={cyclingController.competitionId}&Token={App.CurrentUser.cookie}");
}
//观察
protected void StartWatch(BaseEventData baseEvent)
@@ -152,6 +226,32 @@ namespace Assets.Scenes.Ride.Scripts
cyclingController.player.SetActive(false);
base.StartRide(baseEvent);
}
//取消预约
protected void CancelReserve(BaseEventData baseEvent)
{
try
{
MapCompetitionApi api = new MapCompetitionApi();
var result = api.CancelMapCompetition(cyclingController.competition.Id);
if (result.result)
{
rideNowText.text = "Apply";
CancelJoin.SetActive(false);
_canJoin = true;
Debug.Log(result);
//SHOW Alert
}
else
{
Debug.Log(result);
//SHOW Alert
}
}
catch (Exception ex)
{
Debug.Log(ex);
}
}
#endregion
}
}
@@ -72,7 +72,7 @@ namespace Assets.Scenes.Ride.Scripts
if (!isInit)
{
//当前用户在第几页
pageIndex = (pageSize > 0 ? currentIndex / pageSize : 0) + (totalCount % pageSize > 0 ? 1 : 0);
pageIndex = (pageSize > 0 ? currentIndex / pageSize : 1) + (currentIndex % pageSize > 0 ? 1 : 0);
}
Rank.text = $"{pageIndex}/{totalPages}";
var pagedList = rankingList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
@@ -43,7 +43,10 @@ namespace Assets.Scenes.Ride.Scripts
Rank = transform.Find("Rank").GetComponent<Text>();
Timer = transform.Find("Timer")?.GetComponent<Text>();
countryTexture = Resources.Load<Sprite>("Images/flag_China_Person").texture;
UIManager.AddEvent(this.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Watch);
if (cyclingController.isWatch)
{
UIManager.AddEvent(this.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Watch);
}
}
private void Update()
{
@@ -1,5 +1,6 @@
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using Assets.Scripts;
using Assets.Scripts.UI.UIEffect;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
@@ -8,19 +9,48 @@ using UnityEngine.UI;
namespace Assets.Scenes.Ride.Scripts
{
public class CompetitionResultFactory: MonoBehaviour
public class CompetitionResultFactory : MonoBehaviour
{
CyclingController cyclingController;
RawImage Head;
Text Ranking;
Text Timer;
GameObject Mine { get; set; }
GameObject TitleImage { get; set; }
GameObject WatchTitle { get; set; }
GameObject RankingPanel { get; set; }
RawImage TopHead { get; set; }
RawImage SecondHead { get; set; }
RawImage ThirdHead { get; set; }
Image Top { get; set; }
Sprite SpriteTop { get; set; }
Sprite SpriteSecond { get; set; }
Sprite SpriteThrid { get; set; }
Text RankingTitle { get; set; }
Text TimerTitle { get; set; }
private void Awake()
{
cyclingController = FindObjectOfType<CyclingController>();
var closeBtn = transform.Find("Close").gameObject;
Head = transform.Find("Mine/Head").GetComponent<RawImage>();
Ranking = transform.Find("Mine/Ranking").GetComponent<Text>();
RankingTitle = transform.Find("Mine/RankingTitle").GetComponent<Text>();
TimerTitle = transform.Find("Mine/TimerTitle").GetComponent<Text>();
Timer = transform.Find("Mine/Timer").GetComponent<Text>();
Top = transform.Find("Mine/TOP").GetComponent<Image>();
Mine = transform.Find("Mine").gameObject;
RankingPanel = transform.Find("Ranking").gameObject;
TopHead = transform.Find("Ranking/TopHead").GetComponent<RawImage>();
SecondHead = transform.Find("Ranking/SecondHead").GetComponent<RawImage>();
ThirdHead = transform.Find("Ranking/ThirdHead").GetComponent<RawImage>();
TitleImage = transform.Find("TitleImage").gameObject;
WatchTitle = transform.Find("WatchTitle").gameObject;
SpriteTop = Resources.Load<Sprite>("Images/Ride/Match/top-1");
SpriteSecond = Resources.Load<Sprite>("Images/Ride/Match/top-2");
SpriteThrid = Resources.Load<Sprite>("Images/Ride/Match/top-3");
UIManager.AddEvent(closeBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, Close);
}
@@ -36,6 +66,18 @@ namespace Assets.Scenes.Ride.Scripts
}
}
private Color RED = new Color(0.9764706f, 0.1882353f, 0.5254902f);
private Color SHALLOW_RED = new Color(1f, 0.454902f, 0.5215687f);
private Color PURPLE = new Color(0.1568628f, 0.4431373f, 0.8745098f);
private Color SHALLOW_PURPLE = new Color(0.3843137f, 0.7764706f, 1f);
private Color BLUE = new Color(0.4352941f, 0.3333333f, 0.9372549f);
private Color SHALLOW_BLUE = new Color(0.772549f, 0.5529412f, 1f);
private Color WHITE = new Color(1f, 1f, 1f);
public void Refresh()
{
if (cyclingController.cyclingController is CompetitionModel model)
@@ -44,14 +86,81 @@ namespace Assets.Scenes.Ride.Scripts
if (list == null) return;
var parent = transform.Find("ScrollView/Viewport/Content");
//当前用户排名
var currentRanking = list.Where(c => c.UserId == cyclingController.currentPlayer.UserId).FirstOrDefault();
if (currentRanking != null)
Mine.SetActive(!cyclingController.isWatch);
RankingPanel.SetActive(cyclingController.isWatch);
TitleImage.SetActive(!cyclingController.isWatch);
WatchTitle.SetActive(cyclingController.isWatch);
if (!cyclingController.isWatch)
{
Utils.DisplayImage(Head, App.CurrentUser.WxHeadImg, true);//TODO:改造数据结构结果增加头像字段
Ranking.text = currentRanking.Index.ToString().PadLeft(3,'0');
Timer.text = currentRanking.TripTime;
//当前用户排名
var currentRanking = list.Where(c => c.UserId == cyclingController.currentPlayer.UserId).FirstOrDefault();
if (currentRanking != null)
{
Utils.DisplayImage(Head, currentRanking.WxHeadImg, true);
Ranking.text = currentRanking.Index.ToString().PadLeft(3, '0');
Timer.text = currentRanking.TripTime;
var uigradient = Mine.transform.GetComponent<UIGradient>();
if (currentRanking.Index <=3)
{
TimerTitle.color = WHITE;
RankingTitle.color = WHITE;
}
if (currentRanking.Index == 1)
{
uigradient.color1 = RED;
uigradient.color2 = SHALLOW_RED;
Top.sprite = SpriteTop;
Top.gameObject.SetActive(true);
}
if (currentRanking.Index == 2)
{
uigradient.color1 = PURPLE;
uigradient.color2 = SHALLOW_PURPLE;
Top.sprite = SpriteSecond;
Top.gameObject.SetActive(true);
}
if (currentRanking.Index == 3)
{
uigradient.color1 = BLUE;
uigradient.color2 = SHALLOW_BLUE;
Top.sprite = SpriteThrid;
Top.gameObject.SetActive(true);
}
}
}
else
{
//观察者模式左边显示前三名
var topList = list.OrderBy(c=>c.Index).Take(3);
foreach (var item in topList)
{
if (item.Index == 1)
{
Utils.DisplayImage(TopHead, item.WxHeadImg, true);
var name = TopHead.transform.Find("Name").GetComponent<Text>();
name.text = item.Name;
TopHead.gameObject.SetActive(true);
}
if (item.Index == 2)
{
Utils.DisplayImage(SecondHead, item.WxHeadImg, true);
var name = SecondHead.transform.Find("Name").GetComponent<Text>();
name.text = item.Name;
SecondHead.gameObject.SetActive(true);
}
if (item.Index == 3)
{
Utils.DisplayImage(ThirdHead, item.WxHeadImg, true);
var name = ThirdHead.transform.Find("Name").GetComponent<Text>();
name.text = item.Name;
ThirdHead.gameObject.SetActive(true);
}
}
}
//排名列表
var rankingList = FindObjectsOfType<FinalRankingItemScript>();
foreach (var item in list)
@@ -67,7 +176,7 @@ namespace Assets.Scenes.Ride.Scripts
//有就更新
finalRankingItemScript.setGap(item.Gap);
finalRankingItemScript.setSource(item.DeviceType);
finalRankingItemScript.setUserId(item.UserId);
finalRankingItemScript.setUserId(item.UserId,item.WxHeadImg);
finalRankingItemScript.setRanking(item.Index);
finalRankingItemScript.setHeartRate(item.HeartRate.ToString("f0"));
finalRankingItemScript.setName(item.Name);
@@ -83,7 +192,7 @@ namespace Assets.Scenes.Ride.Scripts
{
this.gameObject.SetActive(false);
this.Destroy();
//SceneManager.LoadScene("MainScene");
SceneManager.LoadScene("MainScene");
}
}
}
@@ -4,8 +4,7 @@ using Assets.Scenes.Ride.Scripts.Model;
using UnityEngine.EventSystems;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using UnityEngine.UI;
using Assets.Scripts;
using Assets.Scripts.Apis;
using UnityEngine.SceneManagement;
namespace Assets.Scenes.Ride.Scripts
{
@@ -15,26 +14,35 @@ namespace Assets.Scenes.Ride.Scripts
{
base.Awake();
}
GameObject countDownPanel;
Text title;
Text timer;
GameObject countDownPanel { get; set; }
Text title { get; set; }
Text timer { get; set; }
protected override void Start()
{
base.Start();
//创建倒计时面板
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();
//隐藏单人骑行时间
var spilitLineH2 = transform.Find("Panel/ComputerPanel/SpilitLineH2").gameObject;
spilitLineH2.SetActive(false);
timerTxt.gameObject.SetActive(false);
timerTxtTitle.gameObject.SetActive(false);
//countDownPanel.SetActive(false);
//观察者模式隐藏坡度
if (mainController.isWatch)
{
nextSlopePanel.SetActive(false);
currentSlopePanel.SetActive(false);
}
altitudeGraph.gameObject.SetActive(false);
//暂停按钮禁用
pauseButton.interactable = false;
}
protected override void Update()
{
base.Update();
CountDown();
}
//开始游戏触发事件
public void StartRide(BaseEventData baseEventData)
{
@@ -42,90 +50,64 @@ namespace Assets.Scenes.Ride.Scripts
}
CompetitionModel competitionModel;
bool canStart = false;
GameObject watchPanel { get; set; }
//开始骑行-加个5秒钟倒计时
public override void StartRide()
{
competitionModel = mainController.cyclingController as CompetitionModel;
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>();
competitionRankingList = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/CompetitionRankingPanel"), transform.Find("Panel"));
topRankPanel = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/TopRankPanel"), transform.Find("Panel"));
watchPanel = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/WatcherPanel"), transform.Find("Panel"));
}
private void CountDown()
{
miniMap.SetActive(false); //隐藏小地图
viewButton.gameObject.SetActive(false);//隐藏切换视角
//viewButton.gameObject.SetActive(false);//隐藏切换视角
headPanel.SetActive(!mainController.isWatch); //隐藏海拔图观察者的头像
if (competitionModel == null)
return;
//比赛进行中
if (competitionModel != null)
#region 赛事状态改变时间
canStart = competitionModel.CanStart();
//比赛开始
if (count <= 0 && canStart)
{
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);
}
//显示结果(非观战到达终点弹窗)
var ishowResult = !mainController.isWatch && (competitionModel.mapCompetition?.HasRecord ?? false) || competitionModel.recorderData.Saved;
if (ishowResult)
{
ShowResultList();
}
var s = competitionModel?.EndCountDown();
//显示关门时间
if (s.Value.Item2)
{
if (s.Value.Item1 <= 0 && !mainController.cyclingController.recorderData.Saved)
{
//自动保存,游戏设置结束
SaveRide(null);
}
else
{
//显示倒计时面板信息
showCountDown(s.Value.Item1, "get the winner,end tance remains");
}
}
else if (s.Value.Item1 > 0)
{
//显示倒计时面板信息
showCountDown(s.Value.Item1, "remaining");
}
////显示关门时间
//if (s.Value.Item2 && s.Value.Item1 <= 0 && !mainController.cyclingController.recorderData.Saved)
//{
// //自动保存,游戏设置结束
// SaveRide(null);
//}
//var title = s.Value.Item2 && s.Value.Item1 <= 0 ? "finish" : "remaining";
////显示倒计时面板信息
//showCountDown(s.Value.Item1, title);
//显示当前比赛进行多长时间了
timerTxt.text = competitionModel.ShowTime;
mainController.SetStart();
}
}
//赛事结束,自动保存
var s = competitionModel.EndCountDown();
if (s.Item1 <= 0 && !mainController.cyclingController.recorderData.Saved && !mainController.isWatch)
{
SaveRide(null);
}
//显示结果(观察者要等到赛事结束才弹出)
var ishowResult = ((competitionModel.mapCompetition?.HasRecord ?? false) || competitionModel.recorderData.Saved) || (mainController.isWatch && competitionModel.CanQuit());
if (ishowResult)
{
ShowResultList();
}
//显示观众
var watchList = mainController.GetWatcherList();
watchPanel.SetActive(watchList.Count >= 5);
#endregion
private void showCountDown(int count,string text)
{
countDownPanel.SetActive(true);
title.text = text;
if (count >= 0)
{
timer.text = Helper.FormatTicks(count);
}
}
public override void SaveRide(BaseEventData baseEventData)
{
//观察者退出
if (mainController.isWatch)
{
SceneManager.LoadScene("MainScene");
return;
}
//参赛者保存并弹出赛事结果
if (!mainController.isQuit)
{
mainController.SetQuit();
@@ -166,5 +148,36 @@ namespace Assets.Scenes.Ride.Scripts
competitionResultPanel = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/CompetitionResultPanel"), transform.Find("Panel"));
}
}
//极简模式
protected override void ClearPanel(BaseEventData baseEventData)
{
if (clearLock)
{
base.ClearPanel(baseEventData);
countDownPanel.transform.DOLocalMove(new Vector3(countDownPanel.transform.localPosition.x + isSimple * -430f, countDownPanel.transform.localPosition.y, countDownPanel.transform.localPosition.z), 1);
topRankPanel.transform.DOLocalMove(new Vector3(topRankPanel.transform.localPosition.x + isSimple * -430f, topRankPanel.transform.localPosition.y, topRankPanel.transform.localPosition.z), 1);
competitionRankingList.transform.DOLocalMove(new Vector3(competitionRankingList.transform.localPosition.x + isSimple * 430f, competitionRankingList.transform.localPosition.y, competitionRankingList.transform.localPosition.z), 1);
watchPanel.transform.DOLocalMove(new Vector3(watchPanel.transform.localPosition.x, watchPanel.transform.localPosition.y + isSimple * 260f, watchPanel.transform.localPosition.z), 1);
}
}
protected override void StopRide(BaseEventData baseEventData)
{
//观察者
if (mainController.isWatch)
{
quitPanel.SetActive(true);
var content=quitPanel.transform.Find("Content").GetComponent<Text>();
content.text = "Do you want to quit?";
quitPanel.transform.Find("AbandonButton").gameObject.SetActive(false);
quitPanel.transform.Find("SaveButton/Text").GetComponent<Text>().text = "OK";
}
//参赛者:提醒是否退出并保存赛事结果
else
{
quitPanel.SetActive(true);
}
}
}
}
@@ -0,0 +1,77 @@
using Assets.Scenes.Ride.Scripts.Model;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
namespace Assets.Scenes.Ride.Scripts
{
public class CountDownFactory : MonoBehaviour
{
Text Title { get; set; }
Text CountTimer { get; set; }
Text TimerTitle { get; set; }
Text Timer { get; set; }
CompetitionModel competitionModel { get; set; }
CyclingController cyclingController { get; set; }
private void Start()
{
cyclingController = FindObjectOfType<CyclingController>();
Title = transform.Find("Title").GetComponent<Text>();
CountTimer = transform.Find("Timer").GetComponent<Text>();
TimerTitle = transform.Find("ConpetitionTimerTitle").GetComponent<Text>();
Timer = transform.Find("ConpetitionTimer").GetComponent<Text>();
competitionModel = cyclingController.cyclingController as CompetitionModel;
}
GameObject competitionResultPanel { get; set; }
private void Update()
{
if (competitionModel != null)
{
var count = competitionModel.StartCountdown();
//比赛开始前倒计时
if (count > 0 && !competitionModel.recorderData.Saved)
{
ShowCountDown(count, "Get ready!");//显示倒计时面板信息
Timer.gameObject.SetActive(false);
TimerTitle.gameObject.SetActive(false);
}
else
{
var s = competitionModel.EndCountDown();
var isAutoSave = s.Item1 <= 0 && !cyclingController.cyclingController.recorderData.Saved && !cyclingController.isWatch;
//显示关门时间
if (s.Item2 && !isAutoSave)
{
//显示倒计时面板信息
ShowCountDown(s.Item1, "get the winner,end tance remains");
}
else if (s.Item1 > 0)
{
//显示倒计时面板信息
//ShowCountDown(s.Item1, "remaining");
ShowCountDown(cyclingController.currentPlayer.TotalTicks, "Riding Time");
}
//显示当前选手骑行时间
Timer.gameObject.SetActive(true);
TimerTitle.gameObject.SetActive(true);
Timer.text = Helper.FormatTicks(cyclingController.currentPlayer.TotalTicks);
}
}
}
private void ShowCountDown(int count, string text)
{
Title.text = text;
if (count >= 0)
{
CountTimer.text = Helper.FormatTicks(count);
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 40622737bf14f984daaf181918914827
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -164,12 +164,15 @@ namespace Assets.Scenes.Ride.Scripts
}
}
public void setUserId(int userId)
public void setUserId(int userId,string WxHeadImg)
{
_userId = userId;
var isself = userId == cyclingController.currentPlayer.UserId;
//头像根据是否是自己显示
Utils.DisplayImage(Head, App.CurrentUser.WxHeadImg, true);//TODO:改造数据结构结果增加头像字段
if (isself)
{
Utils.DisplayImage(Head, WxHeadImg, true);
}
Head.gameObject.SetActive(isself);
//边框样式
var color = isself ? WHITE : TRANSPARENT;
@@ -8,7 +8,7 @@ namespace Assets.Scenes.Ride.Scripts
{
public class TopRankingFactory : BaseListFactory
{
private List<CompetitionRankingSortModel> rankingList {get;set;}
private List<CompetitionTopModel> rankingList {get;set;}
private AbstractPlayer currentPlayer { get; set; }
private int topSize = 6;//取前6名
protected override void Awake()
@@ -31,18 +31,18 @@ namespace Assets.Scenes.Ride.Scripts
{
CompetitionModel s = cyclingController.cyclingController as CompetitionModel;
var ss = s?.competitionRankingModel;
rankingList = ss?.Sorts;
rankingList = ss?.TopList;
if (rankingList == null) return;
var pagedList = rankingList.Take(topSize).ToList();
for (int i = 0; i < pagedList.Count(); i++)
for (int i = 0; i < rankingList.Count(); i++)
{
Create(pagedList[i]);
Create(rankingList[i]);
}
}
private void Create(CompetitionRankingSortModel item)
private void Create(CompetitionTopModel item)
{
var rankingList = FindObjectsOfType<TopRankingItem>();
var competitionRankingItem = rankingList.Where(c => c.UserId == item.UserId).FirstOrDefault();
var competitionRankingItem = rankingList.Where(c => c.rank == item.Index).FirstOrDefault();
//如果当前有这个用户则更新没有则创建并setslibingindex
if (competitionRankingItem == null)
{
@@ -61,15 +61,11 @@ namespace Assets.Scenes.Ride.Scripts
competitionRankingItem = rankingList.OrderByDescending(c => c.rank).FirstOrDefault();
}
}
competitionRankingItem.setUserId(item.UserId);
competitionRankingItem.setTimer(item.TripTime);
competitionRankingItem.SetRank(item.Index);
competitionRankingItem.setName(item.Name);
competitionRankingItem.setRatio(item.KGWeight + "W/KG");
competitionRankingItem.setSpeed(item.Speed.ToString() + "KM/H");
competitionRankingItem.setHead(item.Headimage);
competitionRankingItem.setCountry(item.CountryImg);
competitionRankingItem.setDistance(item.Near.ToString() + "KM");
competitionRankingItem.setUserId(item.UserId);
competitionRankingItem.setCountry(item.Country);
competitionRankingItem.transform.SetSiblingIndex(item.Index);
}
}
@@ -9,11 +9,7 @@ namespace Assets.Scenes.Ride.Scripts
{
private RawImage Head;
private RawImage Country;
private Image Background;
private Text Name;
private Text Speed;
private Text Distance;
private Text Ratio;//功体比
private Text Rank;//当前排名
private Text Timer;
@@ -22,48 +18,25 @@ namespace Assets.Scenes.Ride.Scripts
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;
public int rank { get; set; }
private Texture countryTexture;
CyclingController cyclingController;
private void Awake()
{
cyclingController = FindObjectOfType<CyclingController>();
Background = transform.GetComponent<Image>();
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>();
Rank = transform.Find("Rank").GetComponent<Text>();
Timer = transform.Find("Timer")?.GetComponent<Text>();
countryTexture = Resources.Load<Sprite>("Images/flag_China_Person").texture;
var btn = this.gameObject.GetComponent<Button>();
btn.onClick.AddListener(() =>
{
Watch();
});
///UIManager.AddEvent(this.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Watch);
}
//切换到当前用户视角
public void Watch()
{
cyclingController.ChangeCurrentPlayer(_userId);
Timer = transform.Find("Timer")?.GetComponent<Text>();
}
public void setTimer(string timer)
{
Timer.text = timer;
}
public void setRatio(string ratio)
{
if (!_ratio.Equals(ratio))
{
Ratio.text = ratio;
}
}
//设置当前排名
public void SetRank(int rank)
{
@@ -96,21 +69,9 @@ namespace Assets.Scenes.Ride.Scripts
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;
_userId = userId;
}
}
}