using UnityEngine;
|
using System.Collections.Generic;
|
using System;
|
using DG.Tweening;
|
|
|
// 如果这个Action卡住了 大概率是因为 动作被其他动作中断了 导致没有回调
|
public class RebornRecordAction : RecordAction
|
{
|
private Action actionCallback;
|
|
private float tweenDuration = 0.5f;
|
|
private float keepDuration = 0.5f;
|
|
private Sequence tweenSeq = DOTween.Sequence();
|
|
|
public RebornRecordAction(BattleField _battleField, BattleObject rebornObj, Action _callback)
|
: base(RecordActionType.Reborn, _battleField, rebornObj)
|
{
|
actionCallback = _callback;
|
}
|
|
|
public override void Run()
|
{
|
if (isFinish)
|
return;
|
|
|
if (!isRunOnce)
|
{
|
isRunOnce = true;
|
PlayRebornEffect();
|
}
|
}
|
|
// 做一个从透明到恢复的渐变的同时 播放特效
|
public void PlayRebornEffect()
|
{
|
// 播放复活特效
|
battleField.battleEffectMgr.PlayEffect(battleObject, BattleConst.RebornEffectID, battleObject.heroRectTrans, battleObject.Camp, battleObject.teamHero.modelScale);
|
|
// 渐变
|
battleObject.motionBase.skeletonAnim.skeleton.A = 0f;
|
|
battleField.battleTweenMgr.OnKillTween(tweenSeq);
|
tweenSeq = DOTween.Sequence();
|
|
tweenSeq.Append(DOVirtual.Float(0f, 1f, tweenDuration / battleField.speedRatio, value =>
|
{
|
battleObject.motionBase.skeletonAnim.skeleton.A = value;
|
}));
|
|
tweenSeq.Append(DOVirtual.DelayedCall(keepDuration / battleField.speedRatio, () =>
|
{
|
battleObject?.AfterReborn();
|
actionCallback?.Invoke();
|
actionCallback = null;
|
isFinish = true;
|
}));
|
|
battleField.battleTweenMgr.OnPlayTween(tweenSeq);
|
}
|
|
|
public override void ForceFinish()
|
{
|
if (isFinish)
|
{
|
return;
|
}
|
|
battleField.battleTweenMgr.OnKillTween(tweenSeq);
|
|
battleObject.motionBase.skeletonAnim.skeleton.A = 1f;
|
|
battleObject?.AfterReborn();
|
|
actionCallback?.Invoke();
|
|
actionCallback = null;
|
|
isFinish = true;
|
|
base.ForceFinish();
|
}
|
}
|