From 58cb0692ed67a4108b51e31b765db4c3483e3df7 Mon Sep 17 00:00:00 2001
From: wangguan <wangguan@kt007.com>
Date: Fri, 11 Dec 2020 21:42:55 +0800
Subject: [PATCH] 新手引导开宝箱音效

---
 Assets/Scripts/TowerDefense/Towers/Tower.cs |  151 +++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 123 insertions(+), 28 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Towers/Tower.cs b/Assets/Scripts/TowerDefense/Towers/Tower.cs
index e69f396..bc7139a 100644
--- a/Assets/Scripts/TowerDefense/Towers/Tower.cs
+++ b/Assets/Scripts/TowerDefense/Towers/Tower.cs
@@ -1,6 +1,4 @@
-using UnityEngine.UI;
-using DG.Tweening;
-using KTGMGemClient;
+using KTGMGemClient;
 using System;
 using ActionGameFramework.Health;
 using Core.Utilities;
@@ -10,6 +8,8 @@
 using TowerDefense.UI.HUD;
 using UnityEngine;
 using TowerDefense.Agents;
+using System.Collections;
+using System.Collections.Generic;
 
 namespace TowerDefense.Towers
 {
@@ -88,7 +88,7 @@
         /// <summary>
         /// The current level of the tower
         /// </summary>
-        public int currentLevel { get; protected set; }
+        public int currentLevel { get; set; }
 
         protected bool m_bInAttackMode = false;
 
@@ -189,16 +189,94 @@
         /// </summary>
         public int BondageTapCount { get; private set; }
 
+        /// <summary>
+        /// 泡泡上升高度
+        /// </summary>
+        private float yAdd = 10f;
+
+        /// <summary>
+        /// 原始y值
+        /// </summary>
+        private float originY;
+
+        /// <summary>
+        /// 是否开始禁锢
+        /// </summary>
+        public bool IsStartBondage { get; set; }
+
+        private float bombDuration = 0.7f;
+
+        private float bombTime;
+
+        /// <summary>
+        /// 爆炸是否结束
+        /// </summary>
+        private bool isBombCompleted;
+
+        private void Start()
+        {
+            originY = transform.position.y;
+            promptDic = new Dictionary<string, bool>();
+        }
+
         private void Update()
         {
             HandleBondageBubble();
         }
+
+        private static Dictionary<string, bool> promptDic;
 
         /// <summary>
         /// 处理禁锢泡泡技能
         /// </summary>
         private void HandleBondageBubble()
         {
+            if (IsStartBondage)
+            {
+                if (isBondage)
+                {
+                    if (transform.position.y < yAdd + originY && bondageObj != null)
+                    {
+                        // 上升状态
+                        Vector3 pos = transform.position;
+                        pos.y += 28f * Time.deltaTime;
+                        transform.position = pos;
+
+                        pos = bondageObj.transform.position;
+                        pos.y += 28f * Time.deltaTime;
+                        bondageObj.transform.position = pos;
+                    }
+                }
+                else
+                {
+                    if (!isBombCompleted)
+                    {
+                        bombTime += Time.deltaTime;
+
+                        if (bombTime > bombDuration)
+                        {
+                            // 爆炸结束开始下降
+                            isBombCompleted = true;
+                        }
+                    }
+                    else
+                    {
+                        if (transform.position.y > originY)
+                        {
+                            // 下降状态
+                            Vector3 pos = transform.position;
+                            pos.y -= 55f * Time.deltaTime;
+                            transform.position = pos;
+                        }
+                        else
+                        {
+                            // 下降结束
+                            IsStartBondage = false;
+                        }
+                    }
+                }
+            }
+
             if (!IsBondage) return;
 
             if (BondageWarningTime > 0)
@@ -244,44 +322,46 @@
         /// </summary>
         private void ShowTapPrompt()
         {
+            string key = $"{gridPosition.x}";
+            if (promptDic.ContainsKey(key)) return;
+
+            promptDic.Add(key, true);
             GameObject prefab = Resources.Load<GameObject>("Prefabs/Endless/BondageBubbleTap");
             tapObj = Instantiate(prefab);
-            tapObj.transform.SetParent(GameObject.Find("MainUI/CoinPanel").transform, false);
-            Vector3 worldPos = TowerPlacementGridEndless.instance.GetGridWorldPos(gridPosition.x, gridPosition.y);
-            Camera camera = GameObject.Find("SceneCamera3D").GetComponent<Camera>();
-            Vector3 screenPos = camera.WorldToScreenPoint(worldPos);
-            screenPos.z = 0;
-            screenPos.x += 100;
-            screenPos.y += 85;
-            tapObj.transform.position = screenPos;
-            tapObj.transform.localScale = new Vector3(0.6f, 0.6f, 0.6f);
-
-            DOTween.To(() => tapObj.transform.localScale, (Vector3 v) => tapObj.transform.localScale = v, new Vector3(1f, 1f, 1f), 0.3f).SetEase(Ease.OutBack);
+            tapObj.transform.SetParent(TowerPlacementGridEndless.instance.GridContainer.transform, false);
+            Vector3 worldPos = TowerPlacementGridEndless.instance.GetGridWorldPos(gridPosition.x, 3);
+            ParticleSystem ps = tapObj.transform.GetChild(0).GetComponent<ParticleSystem>();
+            tapObj.transform.position = worldPos;
+            Vector3 pos = tapObj.transform.position;
+            pos.x += 5.8f;
+            pos.z += 3f;
+            pos.y = 20f;
+            tapObj.transform.position = pos;
+            ps?.Play();
         }
 
         private void HideTapPrompt()
         {
             if (tapObj != null)
             {
-                Image img = tapObj.GetComponent<Image>();
-                DOTween.To(() => img.color, (Color v) => img.color = v, new Color(1f, 1f, 1f, 0f), 0.3f).OnComplete(() =>
-                {
-                    if (tapObj != null)
-                    {
-                        Destroy(tapObj);
-                        tapObj = null;
-                    }
-                });
+                ParticleSystem ps = tapObj.transform.GetChild(0).GetComponent<ParticleSystem>();
+                ps?.Stop();
+                Destroy(tapObj);
+                tapObj = null;
+
+                string key = $"{gridPosition.x}";
+                if (promptDic.ContainsKey(key))
+                    promptDic.Remove(key);
             }
         }
 
         public void OnPressed()
         {
-            if (!IsBondage || BondageWarningTime > 0) return;
+            if (!IsStartBondage || BondageWarningTime > 0) return;
 
             ++BondageTapCount;
 
-            if (BondageTapCount == 1)
+            if (BondageTapCount >= 3)
                 HideTapPrompt();
             BondageTime -= BondageClickDecreaseTime;
         }
@@ -294,9 +374,11 @@
             GameObject prefab = Resources.Load<GameObject>("Prefabs/Endless/BondageBubbleBomb");
             GameObject obj = Instantiate(prefab);
             obj.transform.SetParent(TowerPlacementGridEndless.instance.GridContainer.transform, false);
-            obj.transform.position = TowerPlacementGridEndless.instance.GetGridWorldPos(gridPosition.x, gridPosition.y);
+            obj.transform.position = transform.position;
             obj.transform.GetChild(0).GetComponent<ParticleSystem>().Play();
             Destroy(obj, 1.2f);
+            AudioSourceManager.Ins.StopBossWaterSkill();
+
         }
 
         /// <summary>
@@ -304,12 +386,19 @@
         /// </summary>
         private void StartBondage()
         {
+            bombTime = 0;
             BondageTapCount = 0;
+            isBombCompleted = false;
             GameObject prefab = Resources.Load<GameObject>("Prefabs/Endless/BondageBubble");
             bondageObj = Instantiate(prefab);
             bondageObj.transform.SetParent(TowerPlacementGridEndless.instance.GridContainer.transform, false);
-            bondageObj.transform.position = TowerPlacementGridEndless.instance.GetGridWorldPos(gridPosition.x, gridPosition.y);
+            bondageObj.transform.position = transform.position;
+            Vector3 pos = bondageObj.transform.position;
+            pos.y += gridPosition.y == 3 ? 2f : 1f;
+            bondageObj.transform.position = pos;
             bondageObj.transform.GetChild(0).GetComponent<ParticleSystem>().Play();
+            AudioSourceManager.Ins.Play(AudioEnum.BossWaterSkill);
+
         }
 
         /// <summary>
@@ -779,6 +868,12 @@
             CurrentTowerLevel.Initialize(this, enemyLayerMask, configuration.alignmentProvider);
             CurrentTowerLevel.SetShowLevel(level + 1);
 
+            //if(gridPosition.y>=2)
+            {
+                //Debug.Log("上阵状态,设置缩放");
+                CurrentTowerLevel.SetScale(level + 1);
+            }
+
             // disable affectors
             LevelState levelState = LevelState.Intro;
             if (LevelManager.instanceExists)

--
Gitblit v1.9.1