261 lines
12 KiB
C#
261 lines
12 KiB
C#
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
|
using Assets.Scripts;
|
|
using Assets.Scripts.UI.UIEffect;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.UI;
|
|
using DG.Tweening;
|
|
|
|
namespace Assets.Scenes.Ride.Scripts
|
|
{
|
|
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; }
|
|
GameObject ShareButton { get; set; }
|
|
GameObject ToolBarPanel { get; set; }
|
|
GameObject WeChatButton { get; set; }
|
|
GameObject WeChatGpButton { 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; }
|
|
Text CloseTime { get; set; }
|
|
Text CloseTitle { 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;
|
|
CloseTitle = transform.Find("CloseTitle").GetComponent<Text>();
|
|
CloseTime = transform.Find("CloseTime").GetComponent<Text>();
|
|
#if UNITY_IOS || UNITY_ANDROID
|
|
ShareButton = transform.Find("ShareButton").gameObject;
|
|
ToolBarPanel = transform.Find("ToolBarPanel").gameObject;
|
|
WeChatButton = transform.Find("ToolBarPanel/WeChatButton").gameObject;
|
|
WeChatGpButton = transform.Find("ToolBarPanel/GoogleButton").gameObject;
|
|
UIManager.AddEvent(WeChatButton, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShareWechat);
|
|
UIManager.AddEvent(WeChatGpButton, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShareWechatGp);
|
|
#endif
|
|
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);
|
|
}
|
|
|
|
float time = 1;
|
|
private void Update()
|
|
{
|
|
var model = cyclingController.cyclingController as CompetitionModel;
|
|
if (model != null)
|
|
{
|
|
var s = model.EndCountDown();
|
|
//显示关门时间
|
|
var isshow = s.Item3 && s.Item1 >= 0 && !cyclingController.isWatch;
|
|
CloseTime.text = Helper.FormatTicks(s.Item1);
|
|
CloseTitle.gameObject.SetActive(isshow);
|
|
CloseTime.gameObject.SetActive(isshow);
|
|
}
|
|
time -= Time.deltaTime;
|
|
while (time < 0)
|
|
{
|
|
Refresh();
|
|
time += 1;
|
|
}
|
|
}
|
|
|
|
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)
|
|
{
|
|
var list = model?.competitionRankingModel?.Results;
|
|
if (list == null) return;
|
|
var parent = transform.Find("ScrollView/Viewport/Content");
|
|
|
|
Mine.SetActive(!cyclingController.isWatch);
|
|
RankingPanel.SetActive(cyclingController.isWatch);
|
|
//TitleImage.SetActive(!cyclingController.isWatch);
|
|
WatchTitle.SetActive(cyclingController.isWatch);
|
|
|
|
if (!cyclingController.isWatch)
|
|
{
|
|
//当前用户排名
|
|
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)
|
|
{
|
|
var finalRankingItemScript = rankingList.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
|
//没有就创建
|
|
if (finalRankingItemScript == null)
|
|
{
|
|
#if UNITY_IOS || UNITY_ANDROID
|
|
var finalRankingItem = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/Mobile/FinalRankingItem"), parent);
|
|
#else
|
|
var finalRankingItem = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/FinalRankingItem"), parent);
|
|
#endif
|
|
finalRankingItemScript = finalRankingItem.GetComponent<FinalRankingItemScript>();
|
|
}
|
|
|
|
//有就更新
|
|
finalRankingItemScript.setGap(item.Gap);
|
|
finalRankingItemScript.setSource(item.DeviceType);
|
|
finalRankingItemScript.setUserId(item.UserId,item.WxHeadImg);
|
|
finalRankingItemScript.setRanking(item.Index);
|
|
finalRankingItemScript.setHeartRate(item.HeartRate);
|
|
finalRankingItemScript.setName(item.Name);
|
|
finalRankingItemScript.setPower(item.Power.ToString());
|
|
finalRankingItemScript.setRatio(item.WeightKg.ToString("f2"));
|
|
finalRankingItemScript.setTimer(item.TripTime);
|
|
finalRankingItemScript.transform.SetSiblingIndex(item.Index);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Close(BaseEventData baseEventData)
|
|
{
|
|
this.gameObject.SetActive(false);
|
|
this.Destroy();
|
|
SceneManager.LoadScene("MainScene");
|
|
App.MainSceneParam["Name"] = "RaceHomePanel";
|
|
}
|
|
|
|
private void OpenShare(BaseEventData baseEventData)
|
|
{
|
|
((RectTransform)ToolBarPanel.transform).pivot = new Vector2(0, ((RectTransform)ToolBarPanel.transform).pivot.y);
|
|
ShareButton.SetActive(false);
|
|
ToolBarPanel.transform.DOScaleX(1, 1);
|
|
}
|
|
|
|
private void ShareWechat(BaseEventData baseEventData)
|
|
{
|
|
if (App.weChatController.IsWeChatAppInstalled())
|
|
{
|
|
App.weChatController.ShareWebpageToWX(0, $"{App.CurrentUser.WebHost}Mine/MatchPreview?id={cyclingController.competitionId}&Token={App.CurrentUser.cookie}", cyclingController.competition.NickName, "By " + App.CurrentUser.Nickname, null);
|
|
}
|
|
else
|
|
{
|
|
Utils.showToast(null, "未安装微信");
|
|
}
|
|
}
|
|
|
|
private void ShareWechatGp(BaseEventData baseEventData)
|
|
{
|
|
if (App.weChatController.IsWeChatAppInstalled())
|
|
{
|
|
App.weChatController.ShareWebpageToWX(1, $"{App.CurrentUser.WebHost}Mine/MatchPreview?id={cyclingController.competitionId}&Token={App.CurrentUser.cookie}", cyclingController.competition.NickName, "By " + App.CurrentUser.Nickname);
|
|
}
|
|
else
|
|
{
|
|
Utils.showToast(null, "未安装微信");
|
|
}
|
|
}
|
|
}
|
|
}
|