| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- using ProjectBase.Event;
- using ProjectBase.UI;
- using ShotSimulator.Event;
- using ShotSimulator.Train;
- using ShotSimulator.Train.Info;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Localization.Components;
- using UnityEngine.UI;
- namespace ShotSimulator.UI
- {
- public class ExecuteTrainUIView : BaseUIView
- {
- public Sprite[] countdownTex;
- public Image countdownImage;
- public GameObject countDownPanel;
- public GameObject trainingPanel;
- public JumpingNumberTextComponent score_JumpNumComponent;
- public Text precisionText;
- public Text timeText;
- public Text bulletNumsText;
- public GameObject pausePanel;
- public Button pauseButton;
- public Button replayButton;
- public Button continueButton;
- public Button exitButton;
- private GameObject current_ReloadTipObj;
- public GameObject reloadedTipObj;
- public GameObject emptyMagazineTipText;
- public GameObject ChamberEmptyTipObj;
- public GameObject emptyMagazineTipObj;
- public GameObject reloadingTipObj;
- public LocalizeStringEvent ReloadedTipLocalize;
- private BaseTrainHandle m_TrainHandle;
- private int bulletLowNums;
- protected override void InitUIObjects()
- {
- base.InitUIObjects();
- pauseButton.onClick.AddListener(OnPauseButtonClick);
- replayButton.onClick.AddListener(OnReplayButtonClick);
- continueButton.onClick.AddListener(OnContinueButtonClick);
- exitButton.onClick.AddListener(OnExitButtonClick);
- ReloadedTipLocalize.StringReference.Arguments = new object[1];
- }
- protected override void UpdateArguments(params object[] args)
- {
- base.UpdateArguments(args);
- m_TrainHandle = args[0] as BaseTrainHandle;
- }
- protected override void UpdateViewCallBack()
- {
- base.UpdateViewCallBack();
- bulletLowNums = m_TrainHandle.FirearmData.magazineCapacity / 5;
- }
- private void Update()
- {
- if (m_TrainHandle != null)
- {
- if (m_TrainHandle.IsRunning && !m_TrainHandle.IsPause)
- {
- if (m_TrainHandle.TrainInfo.finishType == TrainTaskFinishType.Time)
- {
- timeText.text = SecondToFormattedTime((int)m_TrainHandle.m_TaskTimer.remainingTime);
- }
- }
- }
- }
- private string SecondToFormattedTime(int seconds)
- {
- TimeSpan timeSpan = TimeSpan.FromSeconds(seconds);
- return timeSpan.ToString(@"mm\:ss");
- }
- protected override void OnShowCallBack()
- {
- base.OnShowCallBack();
- EventCenter.GetInstance().RegisterEvent(EventKey.OnTrainResultMetricsDataUpdated, OnTrainResultMetricsDataUpdated);
- EventCenter.GetInstance().RegisterEvent(EventKey.OnBulletNumsChanged, OnBulletNumsChanged);
- EventCenter.GetInstance().RegisterEvent(EventKey.OnMagazineStateChanged, OnMagazineStateChanged);
- EventCenter.GetInstance().RegisterEvent(EventKey.OnShootWitchEmptyBullets, OnShootWitchEmptyBullets);
- EventCenter.GetInstance().RegisterEvent(EventKey.OnShootWitchChamberEmpty, OnShootWitchChamberEmpty);
- EventCenter.GetInstance().RegisterEvent(EventKey.OnExecutingTrainDataUpdated, OnExecutingTrainDataUpdated);
- EventCenter.GetInstance().RegisterEvent(EventKey.OnChamberStateUpdated, OnChamberStateUpdated);
- replayButton.interactable = true;
- continueButton.interactable = true;
- exitButton.interactable = true;
- pauseButton.interactable = true;
- countdownImage.sprite = countdownTex[countdownTex.Length - 1];
- countDownPanel.SetActive(true);
- trainingPanel.SetActive(true);
- pausePanel.SetActive(false);
- emptyMagazineTipText.SetActive(false);
- ChamberEmptyTipObj.SetActive(false);
- if (current_ReloadTipObj != null)
- {
- current_ReloadTipObj.SetActive(false);
- }
- score_JumpNumComponent.Init();
- precisionText.text = "N/A";
- switch (m_TrainHandle.TrainInfo.finishType)
- {
- case TrainTaskFinishType.Time:
- timeText.text = SecondToFormattedTime((int)m_TrainHandle.TrainInfo.duration);
- break;
- case TrainTaskFinishType.Number:
- timeText.text = string.Format("{0}/{1}", m_TrainHandle.TrainInfo.maxNumber, m_TrainHandle.TrainInfo.maxNumber);
- break;
- default:
- timeText.text = "-/-";
- break;
- }
- if (m_TrainHandle.TrainInfo.m_TrainFirearmConfig.isNeedConsumeBullet)
- {
- bulletNumsText.text = "-:-";
- }
- else
- {
- bulletNumsText.text = "¡Þ";
- }
- StartCoroutine(StartCountdown());
- }
- protected override void OnHideCallBack()
- {
- base.OnHideCallBack();
- EventCenter.GetInstance().UnregisterEvent(EventKey.OnTrainResultMetricsDataUpdated, OnTrainResultMetricsDataUpdated);
- EventCenter.GetInstance().UnregisterEvent(EventKey.OnBulletNumsChanged, OnBulletNumsChanged);
- EventCenter.GetInstance().UnregisterEvent(EventKey.OnMagazineStateChanged, OnMagazineStateChanged);
- EventCenter.GetInstance().UnregisterEvent(EventKey.OnShootWitchEmptyBullets, OnShootWitchEmptyBullets);
- EventCenter.GetInstance().UnregisterEvent(EventKey.OnShootWitchChamberEmpty, OnShootWitchChamberEmpty);
- EventCenter.GetInstance().UnregisterEvent(EventKey.OnExecutingTrainDataUpdated, OnExecutingTrainDataUpdated);
- EventCenter.GetInstance().UnregisterEvent(EventKey.OnChamberStateUpdated, OnChamberStateUpdated);
- }
- private IEnumerator StartCountdown()
- {
- for (int i = countdownTex.Length - 1; i >= 0; i--)
- {
- countdownImage.sprite = countdownTex[i];
- countdownImage.SetNativeSize();
- yield return new WaitForSeconds(1f);
- }
- countDownPanel.SetActive(false);
- TrainTaskLoader.GetInstance().StartTrainTask();
- }
- private void OnTrainResultMetricsDataUpdated(BaseEventData eventData)
- {
- TrainResultEventData data = eventData as TrainResultEventData;
- if (data != null)
- {
- switch (data.type)
- {
- case MetricsType.Score:
- OnScoreUpdated(data.value);
- break;
- case MetricsType.Precision:
- OnPrecisionUpdated(data.value);
- break;
- }
- }
- }
- private void OnScoreUpdated(double value)
- {
- score_JumpNumComponent.SetNum((int)value);
- }
- private void OnPrecisionUpdated(double value)
- {
- precisionText.text = value.ToString("P0");
- }
- private void OnBulletNumsChanged(BaseEventData eventData)
- {
- BulletNumsEventData data = eventData as BulletNumsEventData;
- if (data != null)
- {
- string color = data.magazineBulletNums <= bulletLowNums ? "red" : "white";
- bulletNumsText.text = string.Format("<color={0}>{1}</color>:{2}", color, data.magazineBulletNums, data.magazineCapacity);
- if (current_ReloadTipObj != null)
- {
- current_ReloadTipObj.gameObject.SetActive(false);
- }
- if (data.magazineBulletNums == 0)
- {
- current_ReloadTipObj = emptyMagazineTipObj;
- current_ReloadTipObj.SetActive(true);
- }
- }
- }
- private void OnChamberStateUpdated(BaseEventData eventData)
- {
- ChamberStateEventData data = eventData as ChamberStateEventData;
- if (data != null)
- {
- if (data.IsChambered)
- {
- ChamberEmptyTipObj.SetActive(false);
- }
- }
- }
- private void OnMagazineStateChanged(BaseEventData eventData)
- {
- MagazineStateEventData data = eventData as MagazineStateEventData;
- if (data != null)
- {
- if (current_ReloadTipObj != null)
- {
- current_ReloadTipObj.gameObject.SetActive(false);
- }
- switch (data.state)
- {
- case MagazineState.Separation:
- current_ReloadTipObj = reloadingTipObj;
- current_ReloadTipObj.SetActive(true);
- break;
- case MagazineState.ReLoad:
- StartCoroutine(ShowReloadedTip(data.reloadedTime));
- break;
- }
- }
- }
- private IEnumerator ShowReloadedTip(float reloadTime)
- {
- emptyMagazineTipText.SetActive(false);
- ReloadedTipLocalize.StringReference.Arguments[0] = reloadTime.ToString("F1");
- ReloadedTipLocalize.StringReference.RefreshString();
- current_ReloadTipObj = reloadedTipObj;
- current_ReloadTipObj.SetActive(true);
- yield return new WaitForSeconds(3f);
- current_ReloadTipObj.SetActive(false);
- }
- private void OnShootWitchEmptyBullets(BaseEventData eventData)
- {
- emptyMagazineTipText.SetActive(true);
- }
- private void OnShootWitchChamberEmpty(BaseEventData eventData)
- {
- ChamberEmptyTipObj.SetActive(true);
- }
- private void OnExecutingTrainDataUpdated(BaseEventData eventData)
- {
- ExecutingTrainEventData data = eventData as ExecutingTrainEventData;
- if (data != null)
- {
- if (m_TrainHandle.TrainInfo.finishType == TrainTaskFinishType.Number)
- {
- timeText.text = string.Format("{0}/{1}", data.currentNumber, data.maxNumber);
- }
- }
- }
- private void OnPauseButtonClick()
- {
- pauseButton.interactable = false;
- TrainTaskLoader.GetInstance().SetContinueOrPauseTrain(true);
- pausePanel.SetActive(true);
- }
- private void OnReplayButtonClick()
- {
- replayButton.interactable = false;
- TrainTaskLoader.GetInstance().ReStartTrain();
- }
- private void OnContinueButtonClick()
- {
- pauseButton.interactable = true;
- continueButton.interactable = false;
- TrainTaskLoader.GetInstance().SetContinueOrPauseTrain(false);
- pausePanel.SetActive(false);
- }
- private void OnExitButtonClick()
- {
- exitButton.interactable = false;
- TrainTaskLoader.GetInstance().FinishTrain();
- }
- }
- }
|