using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using GCGame.Table; public class GuideStepBase : MonoBehaviour { #region attr public enum GUIDE_OPT_TYPE { ForceOpt, FreeOpt, ClickClose, } #endregion #region params public string GuideUIPath; public int GuideTipStr; public GuideItem BelongGuideItem { get; set; } public GUIDE_OPT_TYPE GuideType; public Vector3 GuideInfoPosOffset; public bool IsShowEffect = false; public bool IsClickBehind = true; protected GameObject _GuideUIGO; protected GameObject _CopyGuideGO; protected List _GuideUIImagePath; #endregion public virtual void StartGuideStep() { gameObject.SetActive(true); } public virtual void FinishGuideStep() { if (!gameObject.activeSelf) return; StopGuideStep(); BelongGuideItem.NextStep(); } public virtual void StopGuideStep() { gameObject.SetActive(false); } protected virtual void ShowGuide() { if (_GuideUIGO == null) { FinishGuideStep(); return; } if (GuideType == GUIDE_OPT_TYPE.ForceOpt) { GuideLogic.Instance().SetForceBackActive(true); } else if (GuideType == GUIDE_OPT_TYPE.ClickClose) { GuideLogic.Instance().SetClickBack(); } else { GuideLogic.Instance().SetForceBackActive(false); } GuideLogic.Instance().ShowGuideInfo(); GuideLogic.Instance()._GuideTips.text = StrDictionary.GetClientDictionaryString("#{" + GuideTipStr.ToString() + "}"); //GuideLogic.Instance()._GuideInfo.position = _GuideUIGO.transform.position + GuideInfoPosOffset; GuideLogic.Instance()._GuidePos.position = _GuideUIGO.transform.position; GuideLogic.Instance()._GuidePos.anchoredPosition += new Vector2(GuideInfoPosOffset.x, GuideInfoPosOffset.y); iTween.MoveTo(GuideLogic.Instance()._GuideInfo.gameObject, GuideLogic.Instance()._GuidePos.position, 0.5f); if (GuideInfoPosOffset.x > 0) { GuideLogic.Instance().ShowGuideLeft(); } else { GuideLogic.Instance().ShowGuideRight(); } if (IsShowEffect) { GuideLogic.Instance().ShowEffect(_GuideUIGO.transform.position); } else { GuideLogic.Instance().HideEffect(); } if (_CopyGuideGO != null) { _CopyGuideGO.SetActive(false); GameObject.Destroy(_CopyGuideGO, 0.1f); GuideLogic.Instance().HideEffect(); } _CopyGuideGO = GameObject.Instantiate(_GuideUIGO); var scripts = _CopyGuideGO.GetComponentsInChildren(true); foreach (var script in scripts) { script.enabled = false; } _CopyGuideGO.transform.SetParent(GuideLogic.Instance().transform); _CopyGuideGO.transform.position = _GuideUIGO.transform.position; _CopyGuideGO.transform.localScale = Vector3.one; var rectTrans = _CopyGuideGO.GetComponent(); var clickItem = _CopyGuideGO.AddComponent(); clickItem._IsClickBehind = IsClickBehind; clickItem._ClickEvent = OnItemClick; if (_GuideUIImagePath.Count > 0) { for (int i = 0; i < _GuideUIImagePath.Count; ++i) { var imageGO = _GuideUIGO.transform.Find(_GuideUIImagePath[i]); var image = imageGO.GetComponent(); if (image != null) { clickItem._OrgImage.Add(image); var copyImageGO = _CopyGuideGO.transform.Find(_GuideUIImagePath[i]); clickItem._SelfImage.Add(copyImageGO.GetComponent()); } var text = imageGO.GetComponent(); if (text != null) { clickItem._OrgText.Add(text); var copyImageGO = _CopyGuideGO.transform.Find(_GuideUIImagePath[i]); clickItem._SelfText.Add(copyImageGO.GetComponent()); } } } if (rectTrans != null) { var orgRectTrans = _GuideUIGO.GetComponent(); rectTrans.sizeDelta = _GuideUIGO.GetComponent().sizeDelta; clickItem._OrgGOTrans = orgRectTrans; clickItem._SelfGOTrans = rectTrans; } } protected void FitCopyPos() { if (_CopyGuideGO == null || _GuideUIGO == null) return; if (_CopyGuideGO.transform.position != _GuideUIGO.transform.position) { _CopyGuideGO.transform.position = _GuideUIGO.transform.position; //GuideLogic.Instance()._GuideInfo.position = _GuideUIGO.transform.position + GuideInfoPosOffset; } if (GuideLogic.Instance()._GuidePos.position != _CopyGuideGO.transform.position) { GuideLogic.Instance()._GuidePos.position = _CopyGuideGO.transform.position; GuideLogic.Instance()._GuidePos.anchoredPosition += new Vector2(GuideInfoPosOffset.x, GuideInfoPosOffset.y); iTween.MoveTo(GuideLogic.Instance()._GuideInfo.gameObject, GuideLogic.Instance()._GuidePos.position, 0.5f); } } protected void OnItemClick(object nullItem) { FinishGuideStep(); } }