Files
Main/Assets/Code/Logic/_Required/Entity/Object/SimpleSkillObject.cs

107 lines
3.0 KiB
C#
Raw Permalink Normal View History

2025-01-25 04:38:09 +08:00

using Thousandto.Cfg.Data;
using Thousandto.Code.Center;
using Thousandto.Core.Asset;
using Thousandto.Plugins.Common.UniScene;
namespace Thousandto.Code.Logic
{
//简单技能召唤物
public class SimpleSkillObject : Entity
{
#region//私有变量
private bool _postDelete = false;
private float _lifeTimer = 0f;
private float _lifeTime = 0f;
#endregion
#region//属性
public Character Owner { get; private set; }
public DeclareSkill SkillCfg { get; private set; }
public SkillVisualInfo VisualInfo { get; private set; }
public PlaySimpleSkillObjectEventInfo EventInfo { get; private set; }
public FGameObjectVFX Vfx { get; private set; }
#endregion
protected override FSkinBase OnSetupSkin()
{
FSkinModel skin = GameCenter.LuaSystem.Adaptor.CreateFSkinModel(FSkinTypeCode.Custom);
skin.SetLayer(LayerUtils.SummonObj);
return skin;
}
protected override bool OnInitializeAfter(EntityInitInfo baseInfo)
{
base.OnInitializeAfter(baseInfo);
var info = baseInfo as SimpleSkillObjectInitInfo;
SyncInfo(info);
return true;
}
protected override void OnUninitializeBefore()
{
//GameCenter.WarningFiledManager.RemoveFiled(this);
base.OnUninitializeBefore();
}
public void SyncInfo(SimpleSkillObjectInitInfo info)
{
Owner = info.Owner;
SkillCfg = info.SkillCfg;
VisualInfo = info.VisualInfo;
EventInfo = info.EventInfo;
Vfx = new FGameObjectVFX(ModelTypeCode.SkillVFX, EventInfo.VfxID);
Vfx.SetParent(this.ModelTransform);
Vfx.SetPosition(Position);
Vfx.SetLayer(this.Layer);
if (!VisualInfo.EndClearVfx)
{
Vfx.IsNotLoop = true;
}
Vfx.Play();
//10倍技能帧数
var vfxLifeTime = VisualInfo.FrameCount * Skill.OneFrameTime * 10;
if (vfxLifeTime < 5f)
{
vfxLifeTime = 5f;
}
Vfx.LiftTime = vfxLifeTime;
_lifeTimer = 0f;
_lifeTime = EventInfo.LifeFrame * Skill.OneFrameTime;
_postDelete = false;
}
protected override void OnUpdate(float elapsedTime)
{
base.OnUpdate(elapsedTime);
if (_postDelete)
return;
_lifeTimer += elapsedTime;
if(_lifeTimer >= _lifeTime)
{
PostDelete();
}
}
private void PostDelete()
{
if (!_postDelete)
{
var baseScene = Scene as BaseScene;
if (baseScene != null)
{
baseScene.DeleteEntity(ID);
}
_postDelete = true;
}
}
}
}