|
@@ -1,4 +1,5 @@
|
|
|
using System;
|
|
|
+using System.Collections.Generic;
|
|
|
using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
|
|
|
using Fort23.Core;
|
|
|
using Fort23.UTool;
|
|
@@ -18,6 +19,8 @@ namespace GameLogic.Combat.Buff
|
|
|
protected float _jianGe;
|
|
|
public System.Action buffFinish;
|
|
|
|
|
|
+ private List<BuffStackInfo> _buffStackInfos = new List<BuffStackInfo>();
|
|
|
+
|
|
|
public int buffCount
|
|
|
{
|
|
|
get { return _count; }
|
|
@@ -25,6 +28,7 @@ namespace GameLogic.Combat.Buff
|
|
|
|
|
|
protected int _count;
|
|
|
private float _time;
|
|
|
+
|
|
|
public void Init(CombatHeroEntity combatHeroEntity, CombatHeroEntity source, BuffInfo buffInfo)
|
|
|
{
|
|
|
_triggerData.Source = this;
|
|
@@ -37,23 +41,53 @@ namespace GameLogic.Combat.Buff
|
|
|
|
|
|
public void AddBuffCount(CombatHeroEntity source, BuffInfo buffInfo)
|
|
|
{
|
|
|
- _currTime = 0;
|
|
|
- int c = buffCount + buffInfo.count;
|
|
|
- if (c > buffInfo.BuffConfig.overlayCount)
|
|
|
+ if (buffInfo.BuffConfig.timeType == 1)
|
|
|
{
|
|
|
- c = buffInfo.BuffConfig.overlayCount - buffCount;
|
|
|
+ _currTime = 0;
|
|
|
+ int c = buffCount + buffInfo.count;
|
|
|
+ if (c > buffInfo.BuffConfig.overlayCount)
|
|
|
+ {
|
|
|
+ c = buffInfo.BuffConfig.overlayCount - buffCount;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ c = buffInfo.count;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (c <= 0)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ _count += c;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- c = buffInfo.count;
|
|
|
- }
|
|
|
+ int c = buffCount + buffInfo.count;
|
|
|
+ if (c > buffInfo.BuffConfig.overlayCount)
|
|
|
+ {
|
|
|
+ c = buffInfo.BuffConfig.overlayCount - buffCount;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ c = buffInfo.count;
|
|
|
+ }
|
|
|
|
|
|
- if (c <= 0)
|
|
|
- {
|
|
|
- return;
|
|
|
+ if (c <= 0)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ buffInfo.count = c;
|
|
|
+ _count += c;
|
|
|
+ BuffStackInfo buffStackInfo = CObjectPool.Instance.Fetch<BuffStackInfo>();
|
|
|
+ buffStackInfo.BuffBasic = this;
|
|
|
+ buffStackInfo.BuffInfo = buffInfo;
|
|
|
+ buffStackInfo.count = c;
|
|
|
+ _buffStackInfos.Add(buffStackInfo);
|
|
|
}
|
|
|
|
|
|
- _count += c;
|
|
|
+
|
|
|
UpdateEffect();
|
|
|
}
|
|
|
|
|
@@ -67,7 +101,6 @@ namespace GameLogic.Combat.Buff
|
|
|
|
|
|
public void UpdateEffect()
|
|
|
{
|
|
|
-
|
|
|
ProUpdateEffect();
|
|
|
}
|
|
|
|
|
@@ -78,11 +111,45 @@ namespace GameLogic.Combat.Buff
|
|
|
|
|
|
public void ReduceCount(int count)
|
|
|
{
|
|
|
- _count -= count;
|
|
|
- if (_count <= 0)
|
|
|
+ if (buffInf.BuffConfig.timeType == 1)
|
|
|
{
|
|
|
- combatHeroEntity.BuffControl.RemoveBuff(this);
|
|
|
- return;
|
|
|
+ _count -= count;
|
|
|
+ if (_count <= 0)
|
|
|
+ {
|
|
|
+ combatHeroEntity.BuffControl.RemoveBuff(this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ while (count > 0)
|
|
|
+ {
|
|
|
+ if (_buffStackInfos.Count <= 0)
|
|
|
+ {
|
|
|
+ combatHeroEntity.BuffControl.RemoveBuff(this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ BuffStackInfo buffStackInfo = _buffStackInfos[0];
|
|
|
+ if (buffStackInfo.count >= count)
|
|
|
+ {
|
|
|
+ buffStackInfo.count -= count;
|
|
|
+ _count -= count;
|
|
|
+ count = 0;
|
|
|
+ if (buffStackInfo.count == 0)
|
|
|
+ {
|
|
|
+ RemoveBuffStackInfo(buffStackInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ int c = buffStackInfo.count;
|
|
|
+ count -= c;
|
|
|
+ _count -= c;
|
|
|
+ buffStackInfo.count = 0;
|
|
|
+ RemoveBuffStackInfo(buffStackInfo);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
UpdateEffect();
|
|
@@ -126,7 +193,6 @@ namespace GameLogic.Combat.Buff
|
|
|
CObjectPool.Instance.Recycle(buffInf);
|
|
|
buffInf = null;
|
|
|
combatHeroEntity = null;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
protected virtual void ProDormancyObj()
|
|
@@ -135,15 +201,24 @@ namespace GameLogic.Combat.Buff
|
|
|
|
|
|
public void Update(float t)
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- _currTime += t;
|
|
|
- if (buffInf.buffTime > 0 && _currTime > buffInf.buffTime)
|
|
|
+ if (buffInf.BuffConfig.timeType == 1)
|
|
|
{
|
|
|
- combatHeroEntity.BuffControl.RemoveBuff(this);
|
|
|
- return;
|
|
|
+ _currTime += t;
|
|
|
+ if (buffInf.buffTime > 0 && _currTime > buffInf.buffTime)
|
|
|
+ {
|
|
|
+ combatHeroEntity.BuffControl.RemoveBuff(this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ for (int i = 0; i < _buffStackInfos.Count; i++)
|
|
|
+ {
|
|
|
+ BuffStackInfo buffStackInfo = _buffStackInfos[i];
|
|
|
+ buffStackInfo.Update(t);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
if (_jianGe > 0)
|
|
|
{
|
|
|
_time += t;
|
|
@@ -153,12 +228,26 @@ namespace GameLogic.Combat.Buff
|
|
|
UpdateJumping();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
ProUpdate(t);
|
|
|
}
|
|
|
|
|
|
+ public void RemoveBuffStackInfo(BuffStackInfo buffStackInfo)
|
|
|
+ {
|
|
|
+ _buffStackInfos.Remove(buffStackInfo);
|
|
|
+ _count -= buffStackInfo.count;
|
|
|
+ CObjectPool.Instance.Recycle(buffStackInfo);
|
|
|
+ if (_buffStackInfos.Count <= 0)
|
|
|
+ {
|
|
|
+ combatHeroEntity.BuffControl.RemoveBuff(this);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ UpdateEffect();
|
|
|
+ }
|
|
|
+
|
|
|
protected virtual void UpdateJumping()
|
|
|
{
|
|
|
-
|
|
|
}
|
|
|
|
|
|
protected virtual void ProUpdate(float t)
|