230 lines
5.8 KiB
C#
230 lines
5.8 KiB
C#
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<NewSkillTips>
|
|
{
|
|
|
|
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<int> _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<ObjManager>.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<UIParticleSystem>();
|
|
_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<CanvasGroup>();
|
|
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
|
|
|
|
}
|