using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG;
using DG.Tweening;
///
/// 描述:
/// 作者:WJ
///
public class HpbarTip : MonoBehaviour
{
public enum HpTweenType
{
Default, // 默认的抛物线 普通伤害
High, // 高抛物线 速度快 弱点伤害
Up, // 向上的 暴击 向上消失
Down, // 向下的 抵抗 向下消失
}
///
/// 角色
///
private Role mRole = null;
///
/// 文字
///
private Text mText = null;
///
/// 自身Transform
///
private RectTransform mRectTransform = null;
///
/// 类型
///
private int mType = 0;
///
///
///
private Camera mUICamera = null;
///
/// 父节点RectTransform
///
private RectTransform mRootRectTransform = null;
///
/// 颜色
///
private Color mColor;
///
/// 初始化
///
public void Init(RectTransform rect, Role role, int val, HpTweenType htType, Color color, float liveTime = 1.0f)
{
mRootRectTransform = rect;
mRole = role;
mText = transform.GetComponentInChildren();
mRectTransform = transform as RectTransform;
mColor = color;
mText.color = color;
mText.text = val.ToString();
mText.rectTransform.localScale = Vector3.one;
mRectTransform.anchoredPosition = World2UI(mRole.transform.position + Vector3.up * 2) + Vector2.right * mText.preferredWidth * 0.5f;
TweenFuncitonByType(htType);
Destroy(gameObject, liveTime);
}
///
/// 更新
///
private void FixedUpdate()
{
//if (mText != null && mRectTransform != null)
//{
// mColor.a -= Time.deltaTime * 0.33f;
// mText.color = mColor;
// mRectTransform.anchoredPosition3D += Vector3.up * Time.deltaTime * Screen.height * 0.2f;
//}
}
private void TweenFuncitonByType(HpTweenType htType)
{
Sequence s = DOTween.Sequence();
switch (htType)
{
case HpTweenType.Default:
mText.rectTransform.DOScale(1, 1.0f);
s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 10), 0.3f).SetEase(Ease.OutCirc));
s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 4), 0.7f).SetEase(Ease.Linear));
s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
s.PlayForward();
break;
case HpTweenType.High:
mText.rectTransform.DOScale(1.5f, 0.2f);
s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 5), 0.3f).SetEase(Ease.OutCirc));
s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 3), 0.7f).SetEase(Ease.Linear));
s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
s.PlayForward();
break;
case HpTweenType.Up:
mText.rectTransform.DOScale(2f, 0.3f);
s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D + Vector3.up * (Screen.height / 5), 1));
s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
break;
case HpTweenType.Down:
mText.rectTransform.DOScale(1.3f, 0.3f);
s.Append(mRectTransform.DOAnchorPos3D(mRectTransform.anchoredPosition3D - Vector3.up * (Screen.height / 3), 1));
s.Insert(0.5f, mText.DOColor(new Color(mColor.r, mColor.g, mColor.b, 0), 0.5f).SetEase(Ease.OutCirc));
break;
}
}
///
/// 世界坐标转成UI坐标
///
/// 世界坐标
/// UI坐标
public Vector2 World2UI(Vector3 wpos)
{
if(Camera.main == null)
{
return Vector2.zero;
}
//世界坐标 -> ViewPort坐标
Vector2 viewPos = Camera.main.WorldToViewportPoint(wpos);
//ViewPort坐标 -> UGUI坐标
return new Vector2(mRootRectTransform.rect.width * viewPos.x, mRootRectTransform.rect.height * viewPos.y);
}
}