//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Friday, September 15, 2017
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using System;
|
|
|
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 = ItemConfig.Get(_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;
|
}
|
}
|
|
}
|
|
}
|
|
}
|