using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using System;
|
using KTGMGemClient;
|
using DG.Tweening;
|
/// <summary>
|
/// 新手引导UI脚本
|
/// </summary>
|
public class GuidePanel : MonoBehaviour
|
{
|
GameObject tipsUI;//显示文字的UI
|
CharForeach charForeach;//动态显示文字
|
|
GuideCtrl m_Ctrl;//控制类
|
|
/// <summary>
|
/// 遮罩对象
|
/// </summary>
|
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("BottomCanvas/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);
|
GameObject go = Instantiate(Resources.Load<GameObject>("GuideFile/RectGuidance_Panel"), this.transform);
|
if (go != null)
|
{
|
go.transform.SetSiblingIndex(1);
|
maskObj = go.GetComponent<RectGuidance>();
|
maskObj.gameObject.SetActive(false);
|
}
|
else
|
{
|
Debug.LogError("遮罩生成失败了");
|
}
|
|
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>();
|
|
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>
|
/// 设置引导框
|
/// </summary>
|
/// <param name="active"></param>
|
public void SetGuideUI(bool active)
|
{
|
if (backgroundImg.enabled != active)
|
backgroundImg.enabled = active;
|
if (tipsUI.activeSelf != active)
|
tipsUI.SetActive(active);
|
}
|
|
//开始打印文字
|
public void StartShowWord(string str, Action cb)
|
{
|
charForeach.StartShowWord(str, cb);
|
}
|
|
/// <summary>
|
/// 立刻完成打印
|
/// </summary>
|
public void ShowWordImmediately()
|
{
|
charForeach.ShowWordImmediately();
|
}
|
|
/// <summary>
|
/// 第二步,购买宝石
|
/// </summary>
|
/// <param name="str"></param>
|
/// <param name="currentIndex">当前第几步</param>
|
public void Step1(string str, int currentIndex, Action ac)
|
{
|
|
if (currentIndex == 0)
|
{
|
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)
|
{
|
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(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;
|
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长度需要等待计算完成
|
}
|
/// <summary>
|
/// 设置显示文字的长度
|
/// </summary>
|
/// <param name="str"></param>
|
private void SetTipRect(string str)
|
{
|
RectTransform textRect = text_Tip.GetComponent<RectTransform>();
|
image_Tip_Rect.sizeDelta = new Vector2(textRect.sizeDelta.x + 64, image_Tip_Rect.sizeDelta.y);
|
}
|
|
#endregion
|
|
#region 遮罩,以及按钮添加删除事件
|
|
|
|
/// <summary>
|
/// 抠出来一个区域
|
/// </summary>
|
/// <param name="target"></param>
|
void InitRectGuidance(Image target, float x, float y)
|
{
|
if (!maskObj.gameObject.activeSelf)
|
{
|
maskObj.gameObject.SetActive(true);
|
}
|
//maskObj.Init(target);
|
//maskObj.ShowImmediately();
|
maskObj.InitForCamera(target, x, y);
|
|
}
|
|
/// <summary>
|
/// 关闭遮罩
|
/// </summary>
|
public void CloseMask()
|
{
|
maskObj.gameObject.SetActive(false);
|
}
|
|
/// <summary>
|
/// 给按钮添加事件
|
/// </summary>
|
private void AddButtonListener(GameObject go, Action ac)
|
{
|
EventTriggerListener.GetListener(go).onClick += (go1) =>
|
{
|
ac();
|
};
|
|
}
|
|
/// <summary>
|
/// 移除事件
|
/// </summary>
|
/// <param name="go"></param>
|
private void RemoveButtonListener(GameObject go)
|
{
|
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 拖动效果
|
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
|
|
}
|