From 452c75675679c44cc39b04bdb7d330d7c5c14d5c Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Tue, 29 Dec 2020 10:48:06 +0800 Subject: [PATCH] 增加多SDK支持。常规使用SDKChannel.KTGM 偶哈游的是空SDK --- Assets/Scripts/TowerDefense/UI/EndlessHomeBaseHPManager.cs | 132 ++++++++++++++++++++++++++++++++++++-------- 1 files changed, 108 insertions(+), 24 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/EndlessHomeBaseHPManager.cs b/Assets/Scripts/TowerDefense/UI/EndlessHomeBaseHPManager.cs index bd56768..b2cc919 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessHomeBaseHPManager.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessHomeBaseHPManager.cs @@ -1,10 +1,11 @@ -using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; -using Core.Utilities; -using DG.Tweening; using MoreMountains.NiceVibrations; +using TMPro; +using DG.Tweening; +using Core.Utilities; +using System.Collections; /** * 无尽模式玩家基地血量管理器 @@ -30,17 +31,32 @@ /// </summary> public List<GameObject> HeartList; + public TextMeshProUGUI hpTxt; + + [SerializeField] + private GameObject loseHeartPrefab; + + private bool isPlayLoseHeartDone = true; + + [SerializeField] + private Image heartImg; + + private Timer timer; + public ParticleSystem loseHeartPS;//心碎特效 + private GameObject decreaseHeartObj;//掉血显示 + // Start is called before the first frame update private void Start() { - CurrentHP = TotalHP = HeartList.Count; + CurrentHP = TotalHP = 5; + hpTxt.text = "x" + CurrentHP.ToString(); EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessLoseHeart, LoseHeart); } - // Update is called once per frame - private void Update() + public void Update() { - + if (timer != null) + timer.Tick(Time.deltaTime); } /// <summary> @@ -51,30 +67,98 @@ { if (CurrentHP == 0) return; - int preHP = CurrentHP; - int i = TotalHP - CurrentHP; + FloatLoseHeart(count); + PlayLoseHeartEffect(); CurrentHP = Mathf.Max(0, CurrentHP - count); - int num = preHP - CurrentHP; - int end = i + num; - while (i < end) - { - Image img = HeartList[i].GetComponent<Image>(); - Color c = img.color; - c.a = 0.17f; - img.color = c; + hpTxt.text = "x" + CurrentHP.ToString(); - GameObject psObj = HeartList[i].transform.GetChild(0).gameObject; - ParticleSystem ps = psObj.transform.GetChild(0).GetComponent<ParticleSystem>(); - ps.Play(); - ++i; - } - - ViewPortAdj.instance.cachedCamera.DOShakePosition(0.25f, 1.5f, 4);//这里只可以震动3D场景中的东西 + //ViewPortAdj.instance.cachedCamera.DOShakePosition(0.25f, 1.5f, 4);//这里只可以震动3D场景中的东西 + ViewPortAdj.instance.DOShakePosition(); MMVibrationManager.Haptic(HapticTypes.HeavyImpact); if (CurrentHP == 0) EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessHeartAllLose); } + + + /// <summary> + /// 丢失爱心飘字 + /// </summary> + /// <param name="count"></param> + private void FloatLoseHeart(int count) + { + TextMeshProUGUI textMeshProUGUI; + if (decreaseHeartObj != null) + { + textMeshProUGUI = decreaseHeartObj.transform.GetChild(0).GetComponent<TextMeshProUGUI>(); + textMeshProUGUI.text = int.Parse(textMeshProUGUI.text) - count + ""; + } + else + { + GameObject prefab = Resources.Load<GameObject>("UI/DecreaseHeart"); + GameObject obj = Instantiate(prefab); + obj.transform.SetParent(GameObject.Find("UICamera/BottomCanvas/Panel/Bottom/CurrencyContainer").transform, false); + obj.transform.localPosition = new Vector3(91.5f, 48.8f, 0f); + obj.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); + + decreaseHeartObj = obj; + + textMeshProUGUI = obj.transform.GetChild(0).GetComponent<TextMeshProUGUI>(); + textMeshProUGUI.text = $"-{count}"; + DOTween.To( + () => obj.transform.localPosition.y, + (float v) => + { + Vector3 pos = obj.transform.localPosition; + pos.y = v; + obj.transform.localPosition = pos; + + }, 70.9f, 0.3f); + StartCoroutine(DestroyDecreaseHeart()); + } + + //Destroy(obj, 0.6f); + } + + IEnumerator DestroyDecreaseHeart() + { + yield return new WaitForSeconds(0.6f); + Destroy(decreaseHeartObj); + decreaseHeartObj = null; + } + + private void PlayLoseHeartEffect() + { + if (!isPlayLoseHeartDone) return; + + heartImg.enabled = false; + // GameObject obj = Instantiate(loseHeartPrefab); + // obj.transform.SetParent(GameObject.Find("ParticleSystemObject").transform, false); + // obj.transform.localPosition = new Vector3(-27.93f, 0f, -51.52f); + // obj.transform.localScale = new Vector3(0.9f, 0.9f, 0.9f); + // ParticleSystem ps = obj.transform.GetChild(0).GetComponent<ParticleSystem>(); + + loseHeartPS?.Play(); + timer = new Timer(0.6f, SpawnHeart); + } + + private void SpawnHeart() + { + timer = null; + + if (CurrentHP == 0) return; + + heartImg.enabled = true; + heartImg.transform.localScale = new Vector3(0f, 0f, 0f); + + DOTween.To( + () => heartImg.transform.localScale, + (Vector3 v) => heartImg.transform.localScale = v, + new Vector3(1f, 1f, 1f), + 0.3f + ).SetEase((Ease.OutBack)) + .OnComplete(() => { isPlayLoseHeartDone = true; }); + } } } \ No newline at end of file -- Gitblit v1.9.1