From 8d41636a63ad271f8b4980257ecf6620eaa1207a Mon Sep 17 00:00:00 2001
From: wangguan <wangguan@kt007.com>
Date: Fri, 13 Nov 2020 20:25:09 +0800
Subject: [PATCH] 修改水塔受击特效

---
 Assets/Scripts/Guide/GuidePanel.cs |  382 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 350 insertions(+), 32 deletions(-)

diff --git a/Assets/Scripts/Guide/GuidePanel.cs b/Assets/Scripts/Guide/GuidePanel.cs
index e63cda4..ee3dbad 100644
--- a/Assets/Scripts/Guide/GuidePanel.cs
+++ b/Assets/Scripts/Guide/GuidePanel.cs
@@ -3,7 +3,8 @@
 using UnityEngine;
 using UnityEngine.UI;
 using System;
-
+using KTGMGemClient;
+using DG.Tweening;
 /// <summary>
 /// 新手引导UI脚本
 /// </summary>
@@ -20,17 +21,52 @@
     private RectGuidance maskObj;
 
     private RectTransform image_Rim_Rect;//边框
+    private GameObject particle_1, particle_2;//使用粒子特效
     private RectTransform image_Tip_Rect;//可以移动的提示框
     private Text text_Tip;//可以移动的提示框文字
 
     private Image image_SkillRim;//技能释放区域
     Vector2 rimOffset = new Vector2(30, 30);//边框要比按钮大一些
 
+    Image tmpMask;//自身的遮罩
+
+    ImageFire1 fire1;
+    ImageFire2 fire2;//两个用来合成的火元素
+
+    ImageWater water1;
+
+    ImageSkill skill;
+
+    ImageTowerPos towerPos;//塔位标识
+    ImageTowerPos2 towerPos2;//塔位标识
+
+    GameObject towerBuyBtn;//购买宝石按钮
+
+    Image backgroundImg;//用来接受空白点击事件的图片
+
+    RectTransform dragHandImg;//拖动标识手指
+    /// <summary>
+    /// 关闭所有UI
+    /// </summary>
+    public void CleanMask()
+    {
+        CloseMask();
+        SetRimActive(false);
+        image_SkillRim.gameObject.SetActive(false);
+
+    }
 
     // Start is called before the first frame update
     void Awake()
     {
+        tmpMask = GetComponent<Image>();
+        tmpMask.enabled = false;
+        backgroundImg = transform.Find("Button").GetComponent<Image>();
+
+        towerBuyBtn = GameObject.Find("BottomUI/TowerBuyBtn");
         tipsUI = transform.Find("Tips").gameObject;
+        tipsUI.transform.SetAsLastSibling();//把tips放在最下面
+
         charForeach = tipsUI.GetComponent<CharForeach>();
         m_Ctrl = transform.GetComponent<GuideCtrl>();
         transform.Find("Button").GetComponent<Button>().onClick.AddListener(m_Ctrl.OnFinishOneStep);
@@ -47,14 +83,36 @@
         }
 
         image_Rim_Rect = transform.Find("Image_Rim").GetComponent<RectTransform>();
+        particle_1 = image_Rim_Rect.transform.Find("Particle System Small").gameObject;
+        particle_2 = image_Rim_Rect.transform.Find("Particle System Big").gameObject;
+
         image_Tip_Rect = transform.Find("Image_Tip").GetComponent<RectTransform>();
         text_Tip = image_Tip_Rect.transform.Find("Text").GetComponent<Text>();
         image_SkillRim = transform.Find("Image_SkillRim").GetComponent<Image>();
 
-        image_Rim_Rect.gameObject.SetActive(false);
-        image_Tip_Rect.gameObject.SetActive(false);
+        SetRimActive(false);
         image_SkillRim.gameObject.SetActive(false);
 
+        fire1 = transform.Find("Image_Fire1").GetComponent<ImageFire1>();
+        fire2 = transform.Find("Image_Fire2").GetComponent<ImageFire2>();
+
+        fire1.gameObject.SetActive(false);
+        fire2.gameObject.SetActive(false);
+
+        towerPos = transform.Find("Image_TowerPos").GetComponent<ImageTowerPos>();
+        towerPos.enabled = false;
+
+        towerPos2 = transform.Find("Image_TowerPos2").GetComponent<ImageTowerPos2>();
+        towerPos2.enabled = false;
+
+        water1 = transform.Find("Image_Water").GetComponent<ImageWater>();
+        water1.gameObject.SetActive(false);
+
+        skill = transform.Find("Image_Skill").GetComponent<ImageSkill>();
+        skill.gameObject.SetActive(false);
+
+        dragHandImg = transform.Find("ImageHand").GetComponent<RectTransform>();
+        dragHandImg.gameObject.SetActive(false);
     }
 
     /// <summary>
@@ -63,7 +121,10 @@
     /// <param name="active"></param>
     public void SetGuideUI(bool active)
     {
-        tipsUI.SetActive(active);
+        if (backgroundImg.enabled != active)
+            backgroundImg.enabled = active;
+        if (tipsUI.activeSelf != active)
+            tipsUI.SetActive(active);
     }
 
     //开始打印文字
@@ -87,55 +148,289 @@
     /// <param name="currentIndex">当前第几步</param>
     public void Step1(string str, int currentIndex, Action ac)
     {
+
         if (currentIndex == 0)
         {
-            image_Rim_Rect.gameObject.SetActive(true);
-            image_Tip_Rect.gameObject.SetActive(true);
-            //设置位置
-            GameObject go = GameObject.Find("MainUI/TowerBuyBtn");
-            AddButtonListener(go, ac);
-
-            Image btnImg = go.GetComponent<Image>();
-            InitRectGuidance(btnImg);
-            SetRimPos(btnImg);
-            maskObj.ShowImmediately();
+            backgroundImg.raycastTarget = false;
+            SetRimActive(true);
+            AddButtonListener(towerBuyBtn, ac);
+            Image btnImg = towerBuyBtn.GetComponent<Image>();
+            InitRectGuidance(btnImg, 189, 73.5f);
+            SetRimPos(towerBuyBtn);
+            //maskObj.ShowImmediately();
 
         }
         else if (currentIndex == 1)
         {
-
+            RemoveButtonListener(towerBuyBtn);
+            AddButtonListener(towerBuyBtn, ac);
         }
         text_Tip.text = str;//动态改变长度
         StartCoroutine(ShowRimTip(str));
 
     }
 
+    public void Step1_1()
+    {
+        if (!fire1.gameObject.activeSelf)
+        {
+            fire1.gameObject.SetActive(true);
+            fire1.transform.Find("Image_2").gameObject.SetActive(false);
+            fire1.enabled = false;
 
+            EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.PlayAppearEffect, fire1.transform.position);
+        }
+    }
+    public void Step1_2()
+    {
+        fire2.gameObject.SetActive(true);
+        fire2.enabled = false;
+        DestoryButtonListener(towerBuyBtn);
+        SetRimActive(false);
+        CloseMask();
+        EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.PlayAppearEffect, fire2.transform.position);
+
+        //RemoveButtonListener(towerBuyBtn);
+    }
+
+    /// <summary>
+    /// 第三步,关闭其余遮罩,打开大Tips
+    /// </summary>
+    /// <param name="currentIndex"></param>
     public void Step2(int currentIndex)
     {
-        image_Rim_Rect.gameObject.SetActive(false);
-        image_Tip_Rect.gameObject.SetActive(false);
+        backgroundImg.raycastTarget = true;
+        //RemoveButtonListener(towerBuyBtn);
+    }
 
+    /// <summary>
+    /// 第四步,合成宝石
+    /// </summary>
+    public void Step3(int currentIndex, string str)
+    {
+        if (currentIndex == 0)
+        {
+
+            tmpMask.enabled = true;
+
+            SetGuideUI(false);
+
+            SetRimPos(fire2.gameObject);
+            fire1.enabled = true;
+            fire2.enabled = true;
+            image_Tip_Rect.gameObject.SetActive(false);
+            ShowDragPath(fire2.GetStartP, fire1.GetRect);
+            StartCoroutine(ShowRimTip(str));
+        }
+    }
+
+    //移动方框,提示玩家进行合成
+    public void Step3_2(string str)
+    {
+        SetRimPos(fire1.gameObject);
+        //StartCoroutine(ShowRimTip(str));
+    }
+
+    /// <summary>
+    /// 第五步,拖动造塔
+    /// </summary>
+    public void Step4(int currentIndex, string str)
+    {
+        if (currentIndex == 0)
+        {
+            tmpMask.enabled = false;
+
+            SetRimActive(true);
+            Image btnImg = transform.Find("Image_TowerPos").GetComponent<Image>();
+            towerPos.enabled = true;
+            InitRectGuidance(btnImg, 75, 80);
+            SetRimPos(btnImg.gameObject);
+            //maskObj.ShowImmediately();
+            ShowDragPath(fire1.GetStartP, btnImg.rectTransform);
+            StartCoroutine(ShowRimTip(str));
+
+        }
+    }
+
+    /// <summary>
+    /// 第六步
+    /// </summary>
+    public void Step5(int currentIndex, string str)
+    {
+        if (currentIndex == -1)
+        {
+            CloseMask();
+            SetRimActive(false);
+
+        }
+    }
+
+    /// <summary>
+    /// 第七步,解锁新塔位
+    /// </summary>
+    public void Step7(int currentIndex, string str)
+    {
+        if (currentIndex == 0)
+        {
+            SetRimActive(true);
+            //设置位置
+            GameObject go = transform.Find("Image_TowerPos2").gameObject;
+
+            Image btnImg = go.GetComponent<Image>();
+            btnImg.raycastTarget = false;
+            InitRectGuidance(btnImg, 75, 80);
+            SetRimPos(go);
+            //maskObj.ShowImmediately();
+            StartCoroutine(ShowRimTip(str));
+        }
+    }
+
+    //介绍水元素
+    public void Step8()
+    {
+        SetGuideUI(true);
+        SetRimActive(false);
         CloseMask();
+    }
+
+
+    /// <summary>
+    /// 第九步,
+    /// </summary>
+    /// <param name="str"></param>
+    /// <param name="currentIndex">当前第几步</param>
+    public void Step9(string str, int currentIndex, Action ac)
+    {
+        if (currentIndex == 0)
+        {
+
+            SetRimActive(true);
+
+            image_Tip_Rect.gameObject.SetActive(false);
+            //设置位置
+            AddButtonListener(towerBuyBtn, ac);
+
+            Image btnImg = towerBuyBtn.GetComponent<Image>();
+            InitRectGuidance(btnImg, 189, 73.5f);
+            SetRimPos(towerBuyBtn);
+            //maskObj.ShowImmediately();
+        }
+        else if (currentIndex == 1)
+        {
+            GameObject go = transform.Find("Image_TowerPos2").gameObject;
+            Image btnImg = go.GetComponent<Image>();
+            btnImg.raycastTarget = true;
+            InitRectGuidance(btnImg, 75, 80);
+            SetRimPos(go);
+            //maskObj.ShowImmediately();
+            ShowDragPath(water1.GetStartP, btnImg.rectTransform);
+        }
+
+        //StartCoroutine(ShowRimTip(str));
+    }
+
+    public void Step9_1()
+    {
+        water1.gameObject.SetActive(true);
+        towerPos2.enabled = true;
+        DestoryButtonListener(towerBuyBtn);
+    }
+
+
+    //生成一个技能宝石
+    public void Step10()
+    {
+        //SetGuideUI(false);
+
+        image_SkillRim.gameObject.SetActive(true);
+
+        skill.gameObject.SetActive(true);
+    }
+
+    /// <summary>
+    /// 第12步,引导释放技能
+    /// </summary>
+    public void Step11(int currentIndex, string str)
+    {
+        if (currentIndex == 0)
+        {
+            tmpMask.enabled = true;
+            tmpMask.color = new Color(1.0f, 1.0f, 1.0f, 0);
+            SetGuideUI(false);
+            SetRimActive(true);
+            SetRimPos(skill.gameObject);
+            image_Tip_Rect.gameObject.SetActive(false);
+            //StartCoroutine(ShowRimTip(str));
+
+            ShowDragPath(skill.GetStartP, image_SkillRim.rectTransform);
+
+            InitRectGuidance(image_SkillRim, 79, 265);
+
+        }
+        else if (currentIndex == 1)
+        {
+            SetRimActive(false);
+            //SetRimPos(image_SkillRim.gameObject);
+            //StartCoroutine(ShowRimTip(str));
+        }
+    }
+
+    public void SkillRelease()
+    {
+        StopShowDragPath(true);
+        CloseMask();
+        image_SkillRim.gameObject.SetActive(false);
+        tmpMask.enabled = false;
+        SetRimActive(false);
+    }
+
+    public void Step12()
+    {
+
+
+        SetGuideUI(true);
     }
 
     #region 按钮以及提示
 
+
+    public void SetRimActive(bool isOn)
+    {
+        if (image_Rim_Rect.gameObject.activeSelf != isOn)
+        {
+            image_Rim_Rect.gameObject.SetActive(isOn);
+            image_Tip_Rect.gameObject.SetActive(isOn);
+        }
+    }
     /// <summary>
     /// 设置边框的大小和位置
     /// </summary>
     /// <param name="target"></param>
-    private void SetRimPos(Image target)
+    private void SetRimPos(GameObject target, bool changeTipPos = true)
     {
+        SetRimActive(true);
         RectTransform rt = target.GetComponent<RectTransform>();
         image_Rim_Rect.anchoredPosition = rt.anchoredPosition;
         image_Rim_Rect.sizeDelta = (rt.sizeDelta * rt.localScale) + rimOffset;
-        image_Tip_Rect.anchoredPosition = new Vector2(image_Rim_Rect.anchoredPosition.x, image_Rim_Rect.anchoredPosition.y + 74 / 2 + image_Rim_Rect.sizeDelta.y / 2);
+        if (image_Rim_Rect.sizeDelta.x > 200)
+        {
+            particle_1.SetActive(false);
+            particle_2.SetActive(true);
+        }
+        else
+        {
+            particle_1.SetActive(true);
+            particle_2.SetActive(false);
+        }
+
+        if (changeTipPos)
+            image_Tip_Rect.anchoredPosition = new Vector2(image_Rim_Rect.anchoredPosition.x, image_Rim_Rect.anchoredPosition.y + 74 / 2 + image_Rim_Rect.sizeDelta.y / 2);
 
     }
 
     IEnumerator ShowRimTip(string str)
     {
+        text_Tip.text = str;//动态改变长度
         yield return 10;
         SetTipRect(str);//动态修改text长度需要等待计算完成
     }
@@ -153,17 +448,22 @@
 
     #region 遮罩,以及按钮添加删除事件
 
+
+
     /// <summary>
     /// 抠出来一个区域
     /// </summary>
     /// <param name="target"></param>
-    void InitRectGuidance(Image target)
+    void InitRectGuidance(Image target, float x, float y)
     {
         if (!maskObj.gameObject.activeSelf)
         {
             maskObj.gameObject.SetActive(true);
         }
-        maskObj.Init(target);
+        //maskObj.Init(target);
+        //maskObj.ShowImmediately();
+        maskObj.InitForCamera(target, x, y);
+
     }
 
     /// <summary>
@@ -183,6 +483,7 @@
     {
         ac();
     };
+
     }
 
     /// <summary>
@@ -191,23 +492,40 @@
     /// <param name="go"></param>
     private void RemoveButtonListener(GameObject go)
     {
-        EventTriggerListener.GetListener(go).onClick -= null;
+        EventTriggerListener eventTriggerListener = EventTriggerListener.GetListener(go);
 
+        eventTriggerListener.RemoveListener(go);
+    }
+
+    private void DestoryButtonListener(GameObject go)
+    {
+        EventTriggerListener eventTriggerListener = EventTriggerListener.GetListener(go);
+
+        if (eventTriggerListener != null)
+            Destroy(eventTriggerListener);
     }
 
     #endregion
 
-    #region 
+    #region 拖动效果
+    private void ShowDragPath(Vector2 startP, RectTransform endP)
+    {
+        if (!dragHandImg.gameObject.activeSelf)
+        {
+            dragHandImg.gameObject.SetActive(true);
+            dragHandImg.anchoredPosition = startP;
+            dragHandImg.DOMove(endP.position, 1).SetEase(Ease.InCubic).SetLoops(-1);
+        }
+    }
+
+    public void StopShowDragPath(bool isClose)
+    {
+        dragHandImg.DOKill();
+        if (isClose)
+            dragHandImg.gameObject.SetActive(false);
+    }
+
 
     #endregion
-
-    #region 
-
-    #endregion
-
-    #region 
-
-    #endregion
-
 
 }

--
Gitblit v1.9.1