using Assets.Scenes.Ride.Scripts; using System; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using DG.Tweening; using UnityEngine.SceneManagement; 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 pauseBtn { 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; } //ftp GameObject ftpPanel { get; set; } Image ftpImage { get; set; } Text wkg { get; set; } public enum ViewMode { THIRD, FIRST, } //当前是第一人称还是第三人称 public ViewMode _viewMode { get; set; } // Start is called before the first frame update void Start() { UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent()); manager = FindObjectOfType(); Init(); } // Update is called once per frame void Update() { if (manager != null) { mapName.text = manager.GetMapRoute().Name; infoText.text = $"帧数:{manager.GetCurrentFrame()}"; 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))}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); } } } 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(); ComputerPanel = transform.Find("Panel/ComputerPanel").gameObject; WatchPanel = transform.Find("Panel/WatchPanel").gameObject; power = transform.Find("Panel/ComputerPanel/Power").GetComponent(); cadance = transform.Find("Panel/ComputerPanel/Cadance").GetComponent(); heartRate = transform.Find("Panel/ComputerPanel/Hr").GetComponent(); speed = transform.Find("Panel/ComputerPanel/Speed").GetComponent(); left = transform.Find("Panel/ComputerPanel/Left").GetComponent(); right = transform.Find("Panel/ComputerPanel/Right").GetComponent(); //ToolBarPanel pauseBtn = transform.Find("Panel/ToolBarPanel/StartOrPauseButton").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(); distance = transform.Find("Panel/MiniMap/Panel/Distance").GetComponent(); mapName = transform.Find("Panel/MiniMap/Head/MapName").GetComponent(); slope = transform.Find("Panel/MiniMap/Panel/Circle/slope").GetComponent(); wave = transform.Find("Panel/MiniMap/Panel/Circle/wave"); waveimage = wave.GetComponent(); //FtpPanel ftpPanel = transform.Find("Panel/FtpPanel").gameObject; ftpImage = transform.Find("Panel/FtpPanel/ftp").GetComponent(); wkg = transform.Find("Panel/FtpPanel/wkg").GetComponent(); //modal settingPanel = transform.Find("Panel/SettingPanel").gameObject; resultPanel = transform.Find("Panel/ResultPanel").gameObject; // explosive = transform.Find("Panel/Explosive").gameObject; //toolbar 事件注册 UIManager.AddEvent(pauseBtn, 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); } //设置坡度信息 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) { manager.Pause(); } private void DeviceClick(BaseEventData e) { UIManager.Show(UIManager.Instance.DevicePanel, null, true); } private void ChangeViewClick(BaseEventData e) { var videoPlayer = FindObjectOfType(); var nearByScript = FindObjectOfType(); var rankingScript = FindObjectOfType(); var currentPlayer = manager.CurrentPlayer == null ? videoPlayer.transform : manager.CurrentPlayer.transform; _viewMode = _viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD; var cameraImage = changeViewBtn.transform.Find("Camera").gameObject; if (_viewMode == ViewMode.FIRST) { currentPlayer.DOMoveZ(-0.09f, 0f); currentPlayer.DOMoveY(-0.85f, 0f); ftpPanel.SetActive(true); nearByScript.Hidehandler(null); rankingScript.Hidehandler(null); cameraImage.SetActive(true); } else { ftpPanel.SetActive(false); currentPlayer.DOMoveZ(4, 0f); currentPlayer.DOMoveY(-1f, 0f); nearByScript.Showhandler(null); rankingScript.Showhandler(null); cameraImage.SetActive(false); } } public void ShowResultPanel() { resultPanel.SetActive(true); resultPanel.transform.SetAsLastSibling(); var videoResultScript = resultPanel.GetComponent(); 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?", () => { videoPlayer = FindObjectOfType(); videoPlayer?.Upload(); UIManager.CloseConfirm(); //show result resultPanel.SetActive(true); resultPanel.transform.SetAsLastSibling(); var videoResultScript = resultPanel.GetComponent(); videoResultScript.InjectController(manager); videoResultScript.SetDataSource(manager.cyclingController.recorderData); }, 2, () => { UIManager.CloseConfirm(); } ); } else { UIManager.ShowConfirm("Quit", "Do you want to quit?", () => { UIManager.CloseConfirm(); SceneManager.LoadSceneAsync("MainScene"); }, 2, () => { UIManager.CloseConfirm(); }); } } } }