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 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(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(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(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 } }