using UnityEngine; using UnityEngine.UI; using System.Collections; using Games.Item; using System.Collections.Generic; using GCGame.Table; using Games.GlobeDefine; [System.Serializable] public class SkillTipsInfo { public int Profession; public int Level; public int SkillBaseID; } public class NewSkillTips : UIControllerBase { public static void OnSkillLearn(int skillId, int skillIdx) { Hashtable hash = new Hashtable(); hash.Add("SkillID", skillId); hash.Add("SkillIdx", skillIdx); UIManager.ShowUI(UIInfo.NewSkillTips, ShowUIOver, hash); } public static void ShowUIOver(bool sucess, object param) { if (!sucess) return; Hashtable hash = param as Hashtable; if (hash == null) return; if (hash.ContainsKey("SkillID")) { NewSkillTips.Instance().OnSkill((int)hash["SkillID"], (int)hash["SkillIdx"]); } } public void OnEnable() { SetInstance(this); } public void OnDestory() { SetInstance(null); } #region public static int _MAX_LEVEL = -1; public List _ShowTipBaseID; public Image _SkillIcon; public Image _SkillName; public float _ShowTime = 3; public float _IconMoveTime = 0.6f; public float _CloseDelay = 0.3f; private bool ShowEffecting = false; private SkillTipsInfo _ActingTips; #endregion public void OnSkill(int skillID, int skillIdx) { var _mainPlayer = Singleton.GetInstance().MainPlayer; if (_mainPlayer == null) { CloseWindow(); return; } var tabSkill = _mainPlayer.OwnSkillInfo[skillIdx].SkillBaseTable; if (!_ShowTipBaseID.Contains(tabSkill.Id)) { if(!ShowEffecting) CloseWindow(); return; } FindIconPos(skillIdx); if(_TargetObj == null) { CloseWindow(); return; } ShowSkillInfo(tabSkill); } public void ShowSkillInfo(Tab_SkillBase skillBase) { if (skillBase == null) { CloseWindow(); } ResetMove(); LoadAssetBundle.Instance.SetImageSprite(_SkillIcon, skillBase.Icon); LoadAssetBundle.Instance.SetImageSprite(_SkillName, skillBase.TextIcon); PlayEffect(); StartCoroutine(PlayAnim()); } public IEnumerator PlayAnim() { ShowEffecting = true; yield return new WaitForSeconds(_ShowTime); StartIconMove(); yield return new WaitForSeconds(_IconMoveTime); if (_TargetObj != null) { Color alphaColor = _TargetObj.color; alphaColor.a = 1; _TargetObj.color = alphaColor; } yield return new WaitForSeconds(_CloseDelay); CloseWindow(); } private void OnDisable() { ShowEffecting = false; } public void CloseWindow() { HideEffect(); UIManager.CloseUI(UIInfo.NewSkillTips); } #region effect public GameObject _EffectPrefab; private GameObject _EffectInstance; private void InitEffect() { if (_EffectInstance == null) { var effectInstanceGO = GameObject.Instantiate(_EffectPrefab); effectInstanceGO.transform.SetParent(transform); effectInstanceGO.transform.localScale = Vector3.one; effectInstanceGO.AddComponent(); _EffectInstance = effectInstanceGO; } } private void PlayEffect() { InitEffect(); _EffectInstance.gameObject.SetActive(true); } private void HideEffect() { if (_EffectInstance != null) { _EffectInstance.gameObject.SetActive(false); } } #endregion #region icon move private Vector3 _IconPos = Vector3.zero; private float _ScaleChange = 0; private Image _TargetObj; private void FindIconPos(int skillIdx) { if (SkillBarLogic.Instance()) { var canvasGroup = SkillBarLogic.Instance().gameObject.GetComponent(); if (canvasGroup.alpha != 1) { _TargetObj = null; return; } } for (int i = 0; i < SkillBarLogic.Instance().SkillButtons.Length; ++i) { if (SkillBarLogic.Instance().SkillButtons[i].SkillIndex == skillIdx) { if (_TargetObj != null) { Color alphaColor1 = _TargetObj.color; alphaColor1.a = 1; _TargetObj.color = alphaColor1; } _TargetObj = SkillBarLogic.Instance().SkillButtons[i].skillIcon; _IconPos = SkillBarLogic.Instance().SkillButtons[i].skillIcon.transform.position; _ScaleChange = SkillBarLogic.Instance().SkillButtons[i].skillIcon.rectTransform.rect.width / _SkillIcon.rectTransform.rect.width; Color alphaColor = _TargetObj.color; alphaColor.a = 0; _TargetObj.color = alphaColor; } } } public void StartIconMove() { if (_IconPos == Vector3.zero) return; iTween.MoveTo(_SkillIcon.gameObject, _IconPos, _IconMoveTime); iTween.ScaleTo(_SkillIcon.gameObject, new Vector3(_ScaleChange, _ScaleChange, _ScaleChange), _IconMoveTime); } public void ResetMove() { Debug.Log("ResetPosition1:" + _SkillIcon.transform.position); _SkillIcon.transform.localPosition = Vector3.zero; _SkillIcon.transform.localScale = Vector3.one; Debug.Log("ResetPosition2:" + _SkillIcon.transform.position); } #endregion }