| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using DG.Tweening;
- using UnityEngine.SceneManagement;
- namespace DuckHunter
- {
- public class GameUI : MonoBehaviour
- {
- [SerializeField] Text textScore;
- [SerializeField] Text textScoreBest;
- [SerializeField] Text textHitScore;
- [SerializeField] Button btnReset;
- [SerializeField] Button btnAim;
- [SerializeField] Button btnCrosshair;
- [SerializeField] Button btnBack;
- [SerializeField] Button btnCalibrationOffset;
- [SerializeField] RectTransform duckForGameStart;
- [SerializeField] GameObject textGameOver;
- [SerializeField] GameObject textGameCompleted;
- [SerializeField] GameObject bottomBox;
- [SerializeField] Slider levelSlider;
- [SerializeField] Material outlight;
- public static GameUI Instance;
- void Awake()
- {
- Instance = this;
- btnReset.onClick.AddListener(() =>
- {
- AudioManager.Instance.PlayBtn();
- UnityEngine.SceneManagement.SceneManager.LoadScene("DuckHunter");
- });
- if (!CommonConfig.StandaloneModeOrPlatformB) {
- if (GlobalData.MyDeviceMode == DeviceMode.Gun || BluetoothAim.ins && BluetoothAim.ins.isMainConnectToInfraredDevice())
- {
- //btnAim.gameObject.SetActive(false);
- btnCrosshair.gameObject.SetActive(true);
- //获取设置值和一个存储值
- bool onInitOpen = InfraredDemo._ins ? InfraredDemo._ins.bInitCrosshairShow() : true;
- Image crossHairImage = btnCrosshair.GetComponentInChildren<Image>();
- crossHairImage.material = onInitOpen ? outlight : null;
- btnCrosshair.onClick.AddListener(delegate () {
- AudioManager.Instance.PlayBtn();
- bool onlyShow = !CrossHair.Instance.GetOnlyShow();
- CrossHair.Instance.SetOnlyShow(onlyShow);
- //记录准心值
- if (InfraredDemo._ins) InfraredDemo._ins.setCrosshairValue(onlyShow);
- if (onlyShow)
- {
- crossHairImage.material = outlight;
- }
- else
- {
- crossHairImage.material = null;
- }
- });
- //校准
- btnCalibrationOffset.gameObject.SetActive(true);
- btnCalibrationOffset.onClick.AddListener(delegate () {
- AudioMgr.ins.PlayBtn();
- SmartBowController.Instance.ResetAim();
- });
- }
- else
- {
- btnAim.gameObject.SetActive(true);
- btnAim.onClick.AddListener(() =>
- {
- if (btnAim.GetComponent<LongPressMonitor>().isLongPress) return;
- AudioManager.Instance.PlayBtn();
- SmartBowController.Instance.ResetAim();
- });
- btnAim.gameObject.AddComponent<LongPressMonitor>().onLongPress += () =>
- {
- AudioManager.Instance.PlayBtn();
- if (SB_EventSystem.ins) SB_EventSystem.ins.AwakenSimulateMouse();
- };
- }
- }
-
- btnBack.onClick.AddListener(onShowResultView);
- InitLevelSlider();
- levelSlider.onValueChanged.AddListener(OnLevelSliderUpdate);
- //根据模式切换图标
- tempRTF = GlobalData.MyDeviceMode == DeviceMode.Archery ? arrowsRTF : bulletRTF;
- tempRTF.gameObject.SetActive(true);
- }
- void OnDestroy()
- {
- if (Instance == this) Instance = null;
- DOTween.KillAll(false);
- }
- // Update is called once per frame
- void Update()
- {
- GameManager gm = GameManager.Instance;
- if (!gm) return;
- // int t = (int)(Time.time - startTime);
- // int m = t / 60;
- // int s = t % 60;
- // string mStr = m < 10 ? "0" + m : m.ToString();
- // string sStr = s < 10 ? "0" + s : s.ToString();
- // textTime.text = $"{mStr}:{sStr}";
- }
- void InitLevelSlider()
- {
- RenderLevelSliderText();
- levelSlider.SetValueWithoutNotify(GameManager.Instance.level);
- }
- void OnLevelSliderUpdate(float v)
- {
- GameManager.DefaultLevel = GameManager.Instance.level = (int)v;
- RenderLevelSliderText();
- }
- void RenderLevelSliderText()
- {
- var tal2 = levelSlider.transform.Find("Text").GetComponent<TextAutoLanguage2>();
- tal2.textFormatArgs = new object[] { GameManager.Instance.level };
- tal2.ApplyToText();
- }
- int _renderHitScore = 0;
- Tween _sequenceRenderHitScore;
- public void RenderHitScore(int score, int bestScore)
- {
- if (!GameManager.Instance) return;
- if (_sequenceRenderHitScore != null)
- {
- _sequenceRenderHitScore.Kill();
- _sequenceRenderHitScore = null;
- }
- _sequenceRenderHitScore = DOTween.To(() => _renderHitScore, v =>
- {
- _renderHitScore = v;
- textScore.text = _renderHitScore.ToString();
- }, score, 0.5f);
- if (bestScore > 0)
- {
- textScoreBest.gameObject.SetActive(true);
- var tal2 = textScoreBest.GetComponent<TextAutoLanguage2>();
- tal2.textFormatArgs = new object[] { bestScore };
- tal2.ApplyToText();
- }
- }
- public bool CheckHitDuckForGameStart(Vector2 screenPosition)
- {
- return RectTransformUtility.RectangleContainsScreenPoint(duckForGameStart, screenPosition);
- }
- public void HandleGameStart(System.Action callback, bool startImmediate)
- {
- if (startImmediate) TextGameScreenCenter.Instance.ShowText(TextGameScreenCenter.TextName.GAME_START_HIDE);
- else TextGameScreenCenter.Instance.ShowText(TextGameScreenCenter.TextName.GAME_START_FADEOUT);
- TweenCallback cb = () =>
- {
- bottomBox.SetActive(true);
- duckForGameStart.gameObject.SetActive(false);
- levelSlider.gameObject.SetActive(false);
- callback?.Invoke();
- };
- if (startImmediate) cb.Invoke();
- else
- {
- Sequence sequence = DOTween.Sequence();
- sequence.Append(duckForGameStart.transform.DOMoveX(Screen.width * 1.125f, 1f));
- sequence.AppendCallback(cb);
- }
- }
- List<Sequence> arrowsFadeSeqList = new List<Sequence>();
- [SerializeField] RectTransform arrowsRTF;
- [SerializeField] RectTransform bulletRTF;
- RectTransform tempRTF;
- public void RenderArrowCount(int count)
- {
- if (count == 0 && arrowsFadeSeqList.Count > 0) return;
- if (arrowsFadeSeqList.Count > 0)
- {
- for (int i = arrowsFadeSeqList.Count - 1; i >= 0; i--)
- {
- var seq = arrowsFadeSeqList[i];
- arrowsFadeSeqList.RemoveAt(i);
- seq.Kill();
- }
- }
-
- for (int i = 1; i < tempRTF.childCount; i++)
- {
- RectTransform iconRTF = tempRTF.GetChild(i) as RectTransform;
- Image iconIMG = iconRTF.GetComponent<Image>();
- iconIMG.color = Color.white;
- iconRTF.gameObject.SetActive(i <= count);
- if (count == 0)
- {
- if (i <= 3) iconRTF.gameObject.SetActive(true);
- var seq = DOTween.Sequence();
- arrowsFadeSeqList.Add(seq);
- seq.Append(iconIMG.DOFade(0.5f, 0.2f));
- seq.Append(iconIMG.DOFade(1f, 0f));
- seq.SetLoops(-1);
- }
- }
- }
- [SerializeField] RectTransform duckCountRTF;
- int _renderHitDuckCount = 0;
- List<Sequence> _duckIconListSequences = new List<Sequence>();
- /// <summary>
- /// 渲染鸭子的状态图标列表
- /// </summary>
- public void RenderHitDuckCount(int duckType)
- {
- if (duckType > 0)
- {
- _renderHitDuckCount++;
- RectTransform iconRTF = duckCountRTF.GetChild(_renderHitDuckCount) as RectTransform;
- Image iconIMG = iconRTF.GetComponent<Image>();
- iconIMG.sprite = Resources.Load<Sprite>("DuckHunter/Textures/Icons/Duck" + duckType);
- }
- else if (duckType == 0)
- {
- _renderHitDuckCount++;
- RectTransform iconRTF = duckCountRTF.GetChild(_renderHitDuckCount) as RectTransform;
- Image iconIMG = iconRTF.GetComponent<Image>();
- var seq = DOTween.Sequence();
- _duckIconListSequences.ForEach(e => e.Restart());
- _duckIconListSequences.Add(seq);
- seq.AppendCallback(() =>
- {
- Color c = iconIMG.color;
- c.a = 1;
- iconIMG.color = c;
- });
- seq.Append(iconIMG.DOFade(0.2f, 0.2f));
- seq.Append(iconIMG.DOFade(1f, 0f));
- seq.SetLoops(-1);
- }
- else
- {
- _duckIconListSequences.ForEach(e => e.Kill());
- for (int i = 1; i < duckCountRTF.childCount; i++)
- {
- RectTransform iconRTF = duckCountRTF.GetChild(i) as RectTransform;
- Image iconIMG = iconRTF.GetComponent<Image>();
- var seq = DOTween.Sequence();
- Color c = iconIMG.color;
- c.a = 1;
- iconIMG.color = c;
- seq.Append(iconIMG.DOFade(0.5f, 0.2f));
- seq.Append(iconIMG.DOFade(1f, 0f));
- seq.SetLoops(-1);
- }
- }
- }
- Sequence _sequenceShowTextHitScore;
- public void ShowTextHitScore(int score, Vector2 screenPosition)
- {
- if (_sequenceShowTextHitScore != null)
- {
- _sequenceShowTextHitScore.Kill();
- _sequenceShowTextHitScore = null;
- }
- textHitScore.gameObject.SetActive(true);
- textHitScore.text = score.ToString();
- textHitScore.transform.position = screenPosition;
- _sequenceShowTextHitScore = DOTween.Sequence();
- _sequenceShowTextHitScore.Append(textHitScore.DOFade(0.8f, 0));
- float lpy = textHitScore.transform.localPosition.y;
- _sequenceShowTextHitScore.Append(textHitScore.transform.DOLocalMoveY(lpy + 100, 0.5f));
- _sequenceShowTextHitScore.AppendInterval(1.5f);
- _sequenceShowTextHitScore.Append(textHitScore.DOFade(0, 0.5f));
- _sequenceShowTextHitScore.AppendCallback(() => textHitScore.gameObject.SetActive(false));
- }
- [SerializeField] Text textLevel;
- public void RenderLevel(int level)
- {
- var tal2 = textLevel.GetComponent<TextAutoLanguage2>();
- tal2.textFormatArgs = new object[] { level };
- tal2.ApplyToText();
- }
- [SerializeField] RectTransform arrowBox;
- public void AddArrowOnScreen(Vector2 screenPosition)
- {
- //arrowBox.GetChild(0)
- var o = Instantiate(arrowBox.GetChild((int)GlobalData.MyDeviceMode).gameObject, arrowBox);
- var tf = o.transform;
- tf.position = screenPosition;
- tf.gameObject.SetActive(true);
- Image img = tf.GetComponent<Image>();
- Sequence seq = DOTween.Sequence();
- seq.AppendInterval(2.5f);
- seq.Append(img.DOFade(0, 0.5f));
- seq.AppendCallback(() => Destroy(o));
- }
- GameResultView gameResultView;
- int num = 0;
- public void onShowResultView()
- {
- AudioManager.Instance.PlayBtn();
- // UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
- if (num == 0)
- {
- //野鸭退出时候操作一次分数
- Debug.Log("野鸭btnBack上传的积分:");
- GameManager.Instance.onUploadScore();
- //处理本地排行榜
- GameManager.Instance.UploadBestScoreToLocalRank(()=> {
- //结束游戏页面
- gameResultView = GameManager.Instance.userGameAnalyse1.showResultView(() =>
- {
- UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
- });
- });
- ////结束游戏页面
- //gameResultView = GameManager.Instance.userGameAnalyse1.showResultView(() =>
- //{
- // UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
- //});
- num += 1;
- return;
- }
- if(num == 1)
- {
- gameResultView.OnClick_Back();
- SceneManager.LoadScene("Home", LoadSceneMode.Single);
- Debug.Log("退出当前场景");
- }
- }
- }
- }
|