Files
JJBB/Assets/Project/Script/Player/Impact/ImpactEffectBase.cs
2024-08-23 15:49:34 +08:00

90 lines
2.1 KiB
C#

using Games.LogicObj;
using GCGame.Table;
using UnityEngine;
public abstract class ImpactEffectBase
{
//已经有在 EffectLogic 中分类型,这里直接使用
public abstract EffectLogic.EffectType ImpactEffectType { get; }
protected int bodyPart = -1; //主要用来区分 身体 左武器 右武器等 使用ModelPart常量
protected bool isRunning; // false表示处于延迟状态
public Tab_Effect Data { get; private set; }
public bool Overly = false;
protected float startTime;
protected float endTime;
public float _EndTime
{
get { return endTime; }
}
/// <summary>
/// effect表中的部位转化到ObjMatManager中的ModelPart数值
/// </summary>
protected static int BodyToModelPart(int source)
{
return source + ModelPart.body;
}
/// <summary>
/// 获得状态的持续时间比例
/// </summary>
protected float GetEffectTimeRatio()
{
return Mathf.Clamp01((Time.time - startTime) / Data.Duration);
}
protected Obj objCharacter;
public virtual void SetPart(int part)
{
bodyPart = part;
}
public virtual int GetPart()
{
return bodyPart;
}
public virtual void InitData(Tab_Effect effectData, Obj obj, float overrideDuration = -1f)
{
Data = effectData;
objCharacter = obj;
startTime = Time.time + Data.DelayTime;
if (overrideDuration < 0f)
endTime = Data.Duration < 0 ? float.PositiveInfinity : startTime + Data.Duration;
else
endTime = startTime + overrideDuration;
}
public virtual void StartEffect()
{
isRunning = true;
}
public virtual void StopEffect()
{
}
public bool OnUpdate()
{
var result = true;
if (!isRunning)
{
if (Time.time > startTime)
StartEffect();
}
if (isRunning)
{
if (Time.time > endTime)
result = false;
else
UpdateInherited();
}
return result;
}
protected virtual void UpdateInherited()
{
}
}