//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, September 15, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System; using TableConfig; namespace Snxxz.UI { public class NewItemGetBehaviour : MonoBehaviour { [SerializeField] ItemBehaviour m_ItemBehaviour; [SerializeField] Image[] m_Stars; [SerializeField] UIAlphaTween m_AlphaTween; [SerializeField] ScaleTween m_ScaleTween; [SerializeField] AnimationCurve curve; [SerializeField] AnimationCurve normalCurve; [SerializeField] float m_Duration = 0f; public float duration { get { return m_Duration; } } [SerializeField] float m_NormalRatio; public float normalRatio { get { return m_NormalRatio; } } Vector3 targetPosition; Vector3 startPosition; Action endCallBack = null; Vector3 normal = Vector3.up; float timer = 0f; float endTime = 0f; float distance = 0f; public void Begin(Item _item, Vector3 _from, Vector3 _to, Action _callBack) { startPosition = _from; targetPosition = _to; endTime = Time.time + duration; m_ItemBehaviour.SetItem(_item); var config = ConfigManager.Instance.GetTemplate(_item.id); for (int i = 0; i < m_Stars.Length; i++) { m_Stars[i].gameObject.SetActive(i < config.StarLevel); } this.gameObject.SetActive(true); this.transform.localPosition = startPosition; this.transform.localPosition = this.transform.localPosition.SetZ(0); Vector3 nl = Vector3.Normalize(targetPosition - startPosition); normal = new Vector3(-nl.y, nl.x, 0); distance = Vector3.Distance(startPosition, targetPosition); m_AlphaTween.Play(); m_ScaleTween.Play(); endCallBack = _callBack; } private void LateUpdate() { if (Time.time < endTime) { timer = duration - (endTime - Time.time); var t = timer / duration; var c1 = curve.Evaluate(t); var c2 = normalCurve.Evaluate(t) * normalRatio; var v1 = (targetPosition - startPosition) * c1 + startPosition; var v2 = normal * c2 * distance; this.transform.localPosition = v1 + v2; } else { this.gameObject.SetActive(false); if (endCallBack != null) { endCallBack(); endCallBack = null; } } } } }