283 lines
12 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Assets.Scenes.Ride.Scripts;
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
using UnityEngine.SceneManagement;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using static Assets.Scripts.Scenes.VideoRide.VideoGameManager;
namespace Assets.Scripts.Scenes.VideoRide
{
public class VideoUIManager : MonoBehaviour
{
GameObject button;
VideoGameManager manager;
VideoPlayer videoPlayer;
const float MAXPOWER = 450f;
const float MAXPOWER_RATE = 600f;
const float MAXHEARRATE = 200f;
const float MAXWKG = 6f;
Text infoText { get; set; }
//ComputerPanel
Text power { get; set; }
Text cadance { get; set; }
Text heartRate { get; set; }
Text speed { get; set; }
Text totalDistance { get; set; }
Text totalClimbed { get; set; }
Text ridingTime { get; set; }
Text mapName { get; set; }
Image left { get; set; }
Image right { get; set; }
//ToolBarPanel
GameObject settingBtn { get; set; }
GameObject deviceBtn { get; set; }
GameObject changeViewBtn { get; set; }
GameObject quitBtn { get; set; }
//minimap
Text playerTimer { get; set; }
Text distance { get; set; }
Text slope { get; set; }
Transform wave { get; set; }
Image waveimage { get; set; }
//modal
GameObject settingPanel { get; set; }
GameObject resultPanel { get; set; }
GameObject gameRoomResultPanel { get; set; }
//ftp
GameObject ftpPanel { get; set; }
Image ftpImage { get; set; }
Text wkg { get; set; }
public Text PowerText;
public Slider PowerSlider;
// Start is called before the first frame update
void Start()
{
UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>());
manager = FindObjectOfType<VideoGameManager>();
Init();
}
// Update is called once per frame
void Update()
{
if (manager != null)
{
mapName.text = manager.GetMapRoute().Name;
//#if UNITY_EDITOR
//infoText.gameObject.SetActive(true);
//infoText.text = $"帧数:{manager.GetCurrentFrame()}";
//#endif
if (manager.CurrentPlayer != null)
{
power.text = Math.Round(manager.CurrentPlayer.power).ToString();
speed.text = Math.Round(manager.CurrentPlayer.speed).ToString();
heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString();
cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString();
playerTimer.text = Helper.FormatTicks(manager.CurrentPlayer.ticks);
distance.text = $"{Math.Round((manager.CurrentPlayer.totalDistance),2)}KM";
left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE);
right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE);
SetSlopePanel();
//ftp
ftpImage.fillAmount = (float)(manager.CurrentPlayer.wkg / MAXWKG);
wkg.text = $"{manager.CurrentPlayer.wkg}w/kg";
//explosive.SetActive(true);TODO心率过高的时候显示
}
}
}
public void SetCurrentMode(VideoGameManager.ARMode aRMode)
{
if (aRMode == VideoGameManager.ARMode.INSPECT)
{
ComputerPanel.SetActive(false);
WatchPanel.SetActive(true);
}
else
{
WatchPanel.SetActive(false);
ComputerPanel.SetActive(true);
}
}
GameObject ComputerPanel { get; set; }
GameObject WatchPanel { get; set; }
GameObject explosive { get; set; }
private void Init()
{
infoText = transform.Find("InfoText").GetComponentInChildren<Text>();
ComputerPanel = transform.Find("Panel/ComputerPanel").gameObject;
WatchPanel = transform.Find("Panel/WatchPanel").gameObject;
power = transform.Find("Panel/ComputerPanel/Power").GetComponent<Text>();
cadance = transform.Find("Panel/ComputerPanel/Cadance").GetComponent<Text>();
heartRate = transform.Find("Panel/ComputerPanel/Hr").GetComponent<Text>();
speed = transform.Find("Panel/ComputerPanel/Speed").GetComponent<Text>();
left = transform.Find("Panel/ComputerPanel/Left").GetComponent<Image>();
right = transform.Find("Panel/ComputerPanel/Right").GetComponent<Image>();
//ToolBarPanel
settingBtn = transform.Find("Panel/ToolBarPanel/SettingButton").gameObject;
quitBtn = transform.Find("Panel/ToolBarPanel/ExitButton").gameObject;
changeViewBtn = transform.Find("Panel/ToolBarPanel/ChangeView").gameObject;
deviceBtn = transform.Find("Panel/ToolBarPanel/DeviceButton").gameObject;
//minmap
playerTimer = transform.Find("Panel/MiniMap/Panel/Timer").GetComponent<Text>();
distance = transform.Find("Panel/MiniMap/Panel/Distance").GetComponent<Text>();
mapName = transform.Find("Panel/MiniMap/Head/MapName").GetComponent<Text>();
slope = transform.Find("Panel/MiniMap/Panel/Circle/slope").GetComponent<Text>();
wave = transform.Find("Panel/MiniMap/Panel/Circle/wave");
waveimage = wave.GetComponent<Image>();
//FtpPanel
ftpPanel = transform.Find("Panel/FtpPanel").gameObject;
ftpImage = transform.Find("Panel/FtpPanel/ftp").GetComponent<Image>();
wkg = transform.Find("Panel/FtpPanel/wkg").GetComponent<Text>();
//modal
settingPanel = transform.Find("Panel/SettingPanel").gameObject;
resultPanel = transform.Find("Panel/ResultPanel").gameObject;
gameRoomResultPanel = transform.Find("Panel/GameRoomResult").gameObject;
//
explosive = transform.Find("Panel/Explosive").gameObject;
//toolbar 事件注册
UIManager.AddEvent(settingBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, PauseClick);
UIManager.AddEvent(changeViewBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ChangeViewClick);
UIManager.AddEvent(deviceBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, DeviceClick);
UIManager.AddEvent(quitBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, QuitClick);
PowerSlider.onValueChanged.AddListener(e =>
{
PowerText.text = e.ToString("f0") + "W";
manager.CurrentPlayer.mockpower = e;
});
}
//设置坡度信息
private void SetSlopePanel()
{
var normalizedSlope = (float)Math.Round(manager.CurrentPlayer.currentSlope, 1);
slope.text = normalizedSlope > 0 ? "+"+normalizedSlope.ToString():normalizedSlope.ToString();
var strength = 3;//增强旋转角度系数
if (normalizedSlope > 10) {
normalizedSlope = 10f;
}
if (normalizedSlope < -10) {
normalizedSlope = -10f;
}
wave.DORotate(new Vector3(0f, 0f, normalizedSlope*strength),1f);
SetWaveColor(normalizedSlope);
}
private void SetWaveColor(double currentSlope)
{
if (currentSlope > 7)
{
waveimage.color = PFConstants.Red;
}
else if (currentSlope > 3)
{
waveimage.color = PFConstants.Orange;
}
else if (currentSlope > 0)
{
waveimage.color = PFConstants.Yellow;
}
else
{
waveimage.color = PFConstants.Green;
}
}
private void PauseClick(BaseEventData e)
{
settingPanel.SetActive(true);
settingPanel.transform.SetAsLastSibling();
}
private void DeviceClick(BaseEventData e)
{
UIManager.Show(UIManager.Instance.DevicePanel, null, true);
}
private void ChangeViewClick(BaseEventData e)
{
var videoPlayer = FindObjectOfType<VideoPlayer>();
var nearByScript = FindObjectOfType<NearByScript>();
var rankingScript = FindObjectOfType<RankingScript>();
var currentPlayer = manager.CurrentPlayer == null ? videoPlayer.transform : manager.CurrentPlayer.transform;
manager._viewMode = manager._viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD;
var cameraImage = changeViewBtn.transform.Find("Camera").gameObject;
if (manager._viewMode == ViewMode.FIRST)
{
currentPlayer.DOMoveX(0f, 0f);
currentPlayer.DOMoveZ(-0.1f, 0f);
currentPlayer.DOMoveY(-0.85f, 0f);
ftpPanel.SetActive(true);
nearByScript.Hidehandler(null);
rankingScript.Hidehandler(null);
cameraImage.SetActive(true);
}
}
public void ShowResultPanel()
{
resultPanel.SetActive(true);
resultPanel.transform.SetAsLastSibling();
var videoResultScript = resultPanel.GetComponent<VideoResultScript>();
videoResultScript.InjectController(manager);
videoResultScript.SetDataSource(manager.cyclingController.recorderData);
}
public void SaveAndShowResult()
{
if (manager._aRMode == VideoGameManager.ARMode.INSPECT)
SceneManager.LoadScene("MainScene");
videoPlayer = FindObjectOfType<VideoPlayer>();
videoPlayer?.Upload();
//show result
if (manager.cyclingController is GameModel)
{
gameRoomResultPanel.SetActive(true);
gameRoomResultPanel.transform.SetAsLastSibling();
}
else
{
resultPanel.SetActive(true);
resultPanel.transform.SetAsLastSibling();
var videoResultScript = resultPanel.GetComponent<VideoResultScript>();
videoResultScript.InjectController(manager);
videoResultScript.SetDataSource(manager.cyclingController.recorderData);
}
}
private void QuitClick(BaseEventData e)
{
if (manager._aRMode == VideoGameManager.ARMode.RIDE)
{
UIManager.ShowConfirm("Quit", "Do you want to keep the record?",
() =>
{
SaveAndShowResult();
UIManager.CloseConfirm();
},
2,
() =>
{
UIManager.CloseConfirm();
}
);
}
else
{
UIManager.ShowConfirm("Quit", "Do you want to quit?", () =>
{
UIManager.CloseConfirm();
SceneManager.LoadSceneAsync("MainScene");
},
2,
() =>
{
UIManager.CloseConfirm();
});
}
}
}
}