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