168 lines
4.5 KiB
C#
168 lines
4.5 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using Thousandto.Cfg.Data;
|
||
|
||
using Thousandto.Code.Center;
|
||
using Thousandto.Core.Asset;
|
||
using Thousandto.Core.Base;
|
||
using UnityEngine;
|
||
using Thousandto.Code.Global;
|
||
|
||
namespace Thousandto.Code.Logic
|
||
{
|
||
//buff
|
||
public class Buff
|
||
{
|
||
#region//私有变量
|
||
private FGameObjectVFX _vfxID = null;
|
||
private float _delayTime = 0f;
|
||
#endregion
|
||
|
||
#region//属性
|
||
//配置ID
|
||
public int DataID { get; private set; }
|
||
//叠加层数
|
||
public int CurLevel { get; private set; }
|
||
//剩余时间
|
||
public float RemainTime { get; private set; }
|
||
//参数列表
|
||
public List<int> Args { get; private set; }
|
||
//增加此buff的时间。用于计算buff剩余时间
|
||
public float SyncTime { get; private set; }
|
||
public ulong OwenId { get; private set; }
|
||
public DeclareBuff Cfg { get; private set; }
|
||
//当前剩余时间
|
||
public float CurRemainTime
|
||
{
|
||
get
|
||
{
|
||
return RemainTime - (Time.realtimeSinceStartup - SyncTime);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region//公有函数
|
||
//刷新buff数据
|
||
public void RefreshData(ulong ownerID, DeclareBuff cfg, MSG_Common.Buff buff)
|
||
{
|
||
OwenId = ownerID;
|
||
DataID = buff.buffId;
|
||
CurLevel = buff.curLevel;
|
||
Cfg = cfg;
|
||
RemainTime = buff.remainTime;
|
||
Args = buff.args;
|
||
SyncTime = Time.realtimeSinceStartup;
|
||
}
|
||
|
||
//处理buff增加事件,增加buff特效
|
||
public void DoAdd(bool delay)
|
||
{
|
||
_delayTime = 0f;
|
||
if (delay && Cfg.DTime > 0)
|
||
{
|
||
_delayTime = Cfg.DTime / 1000f;
|
||
}
|
||
else
|
||
{
|
||
DoBuffVisualAdd();
|
||
AddBuffSpecial();
|
||
}
|
||
}
|
||
|
||
//增加buff的外观显示
|
||
public void DoBuffVisualAdd(Character inOwner = null)
|
||
{
|
||
DeleteBuffVfx();
|
||
Character owner = null;
|
||
if (inOwner != null)
|
||
{
|
||
owner = inOwner;
|
||
}
|
||
else
|
||
{
|
||
owner = GameCenter.GameSceneSystem.FindEntity<Character>(OwenId);
|
||
}
|
||
//判断特效开关
|
||
if (owner != null && GameObjectLimit.CanPlayVfx(owner, ModelTypeCode.BuffVFX))
|
||
{
|
||
if (Cfg.BuffVfx > 0)
|
||
{
|
||
_vfxID = owner.Skin.PlayVFX(ModelTypeCode.BuffVFX, Cfg.BuffVfx, SlotUtils.GetSlotName((Slot)Cfg.VfxSlot), FSkinPartCode.Body, true, Cfg.VfxScal / 100.0f, true);
|
||
}
|
||
}
|
||
|
||
if (Cfg.Wenzi != 0 && owner != null)
|
||
{
|
||
GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_HUD_POPUP_BUFFNAME, this);
|
||
}
|
||
}
|
||
|
||
//增加buff的特殊效果展示
|
||
public void AddBuffSpecial(Character inOwner = null)
|
||
{
|
||
Character owner = null;
|
||
if (inOwner != null)
|
||
{
|
||
owner = inOwner;
|
||
}
|
||
else
|
||
{
|
||
owner = GameCenter.GameSceneSystem.FindEntity<Character>(OwenId);
|
||
}
|
||
OnAddBuffSpecial(owner);
|
||
}
|
||
|
||
//处理buff删除事件,删除buff特效
|
||
public void DoDelete()
|
||
{
|
||
DeleteBuffVfx();
|
||
DeleteBuffSpecial();
|
||
}
|
||
|
||
//删除buff特效
|
||
public void DeleteBuffVfx()
|
||
{
|
||
if (_vfxID != null)
|
||
{
|
||
_vfxID.Destroy();
|
||
_vfxID = null;
|
||
}
|
||
}
|
||
|
||
public void DeleteBuffSpecial()
|
||
{
|
||
Character owner = GameCenter.GameSceneSystem.FindEntity<Character>(OwenId);
|
||
OnDeleteBuffSpecial(owner);
|
||
}
|
||
|
||
//更新
|
||
public void Update()
|
||
{
|
||
OnUpdate();
|
||
}
|
||
#endregion
|
||
|
||
#region//子类继承
|
||
protected virtual void OnAddBuffSpecial(Character inOwner = null)
|
||
{
|
||
|
||
}
|
||
|
||
protected virtual void OnDeleteBuffSpecial(Character owner)
|
||
{
|
||
|
||
}
|
||
|
||
protected virtual void OnUpdate()
|
||
{
|
||
if (_delayTime > 0 && (Time.realtimeSinceStartup - SyncTime) > _delayTime)
|
||
{
|
||
DoBuffVisualAdd();
|
||
AddBuffSpecial();
|
||
_delayTime = 0f;
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
}
|