|
|
|
|
@ -19,7 +19,6 @@ public class SettleSystem : IExecuteSystem, IInitializeSystem
|
|
|
|
|
{
|
|
|
|
|
SettleDebugDraw(entity);
|
|
|
|
|
SettleSkill(entity.skill);
|
|
|
|
|
SettleHit(entity.skill);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -35,71 +34,39 @@ public class SettleSystem : IExecuteSystem, IInitializeSystem
|
|
|
|
|
|
|
|
|
|
private static void SettleSkill(SkillComponent skill)
|
|
|
|
|
{
|
|
|
|
|
foreach (var hitInfo in skill.SkillHitInfo.Values)
|
|
|
|
|
foreach (var hitInfo in skill.HitInfo)
|
|
|
|
|
{
|
|
|
|
|
if (hitInfo.IsDealed)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hitInfo.IsDealed = true;
|
|
|
|
|
var isEntity = hitInfo.HitEntity != 0;
|
|
|
|
|
if (isEntity)
|
|
|
|
|
{
|
|
|
|
|
var target = Util.GetEntity(hitInfo.HitEntity);
|
|
|
|
|
target.skill.HitInfo.Add(hitInfo);
|
|
|
|
|
}
|
|
|
|
|
SettleHit(hitInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
skill.HitInfo.Clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void SettleHit(SkillComponent skill)
|
|
|
|
|
private static void SettleHit(SkillHitInfo hitInfo)
|
|
|
|
|
{
|
|
|
|
|
while (true)
|
|
|
|
|
var entity = Util.GetEntity(hitInfo.OwnerEntity);
|
|
|
|
|
var target = Util.GetEntity(hitInfo.HitEntity);
|
|
|
|
|
if (entity == null || target == null)
|
|
|
|
|
{
|
|
|
|
|
_tempHitInfo.Clear();
|
|
|
|
|
_tempHitInfo.AddRange(skill.HitInfo);
|
|
|
|
|
skill.HitInfo.Clear();
|
|
|
|
|
foreach (var hitInfo in _tempHitInfo)
|
|
|
|
|
{
|
|
|
|
|
var isEntity = hitInfo.HitEntity != 0;
|
|
|
|
|
if (!isEntity)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var entity = Util.GetEntity(hitInfo.OwnerEntity);
|
|
|
|
|
var target = Util.GetEntity(hitInfo.HitEntity);
|
|
|
|
|
if (entity == null || target == null)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var damageResult = SettleDamage(hitInfo, entity, target); //伤害结算
|
|
|
|
|
var hitLevel = SettleHitLevel(hitInfo, damageResult, entity, target); //命中效果等级
|
|
|
|
|
var flowSpeed = SettleFlowSpeed(hitInfo, hitLevel, entity, target); //强制位移(击退、击飞、击落等)
|
|
|
|
|
var pauseTime = SettlePause(hitInfo, hitLevel, entity, target); //卡帧
|
|
|
|
|
SettleSelfMoveForceScale(hitLevel, entity, target); //攻击者移动速度调整
|
|
|
|
|
SettleBreak(flowSpeed, hitLevel, damageResult, entity, target); //打断技能/动画
|
|
|
|
|
SettleBuff(hitLevel, entity, target); //添加硬直/击晕buff
|
|
|
|
|
SettleTrigger(hitInfo, entity, target); //命中触发器
|
|
|
|
|
|
|
|
|
|
//纯表现
|
|
|
|
|
SettleHitText(hitLevel, damageResult, entity, target); //跳字
|
|
|
|
|
SettleHitEffect(flowSpeed, hitLevel, hitInfo.HitType, entity, target); //命中特效
|
|
|
|
|
SettleFlash(hitLevel, entity, target); //闪白
|
|
|
|
|
SettleShake(hitLevel, entity, target); //抖动
|
|
|
|
|
SettleScale(flowSpeed, entity, target); //抖动
|
|
|
|
|
SettleGlobalEffect(target, pauseTime); //全局特效
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (skill.HitInfo.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
//结算过程中可能引入新的受击 直接继续结算
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var damageResult = SettleDamage(hitInfo, entity, target); //伤害结算
|
|
|
|
|
var hitLevel = SettleHitLevel(hitInfo, damageResult, entity, target); //命中效果等级
|
|
|
|
|
var flowSpeed = SettleFlowSpeed(hitInfo, hitLevel, entity, target); //强制位移(击退、击飞、击落等)
|
|
|
|
|
var pauseTime = SettlePause(hitInfo, hitLevel, entity, target); //卡帧
|
|
|
|
|
SettleSelfMoveForceScale(hitLevel, entity, target); //攻击者移动速度调整
|
|
|
|
|
SettleBreak(flowSpeed, hitLevel, damageResult, entity, target); //打断技能/动画
|
|
|
|
|
SettleBuff(hitLevel, entity, target); //添加硬直/击晕buff
|
|
|
|
|
SettleTrigger(hitInfo, entity, target); //命中触发器
|
|
|
|
|
|
|
|
|
|
//纯表现
|
|
|
|
|
SettleHitText(hitLevel, damageResult, entity, target); //跳字
|
|
|
|
|
SettleHitEffect(flowSpeed, hitLevel, hitInfo.SkillParam.hitType, entity, target); //命中特效
|
|
|
|
|
SettleFlash(hitLevel, entity, target); //闪白
|
|
|
|
|
SettleShake(hitLevel, entity, target); //抖动
|
|
|
|
|
SettleScale(flowSpeed, entity, target); //抖动
|
|
|
|
|
SettleGlobalEffect(target, pauseTime); //全局特效
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public struct SettleDamageResult
|
|
|
|
|
@ -207,7 +174,7 @@ public class SettleSystem : IExecuteSystem, IInitializeSystem
|
|
|
|
|
staggerDef += Util.GetProperty(target, EProperty.ShieldStaggerDefLevel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var sub = hitInfo.StaggerLevel - staggerDef;
|
|
|
|
|
var sub = hitInfo.SkillParam.staggerLevel - staggerDef;
|
|
|
|
|
sub = Mathf.Clamp(sub, 0, 3);
|
|
|
|
|
var ret = EHitLevel.None;
|
|
|
|
|
switch (sub)
|
|
|
|
|
@ -462,11 +429,6 @@ public class SettleSystem : IExecuteSystem, IInitializeSystem
|
|
|
|
|
{
|
|
|
|
|
//触发buffTrigger
|
|
|
|
|
UtilBuff.BuffEffectAll(target.ID(), EBuffEffectTimingType.BeAttack);
|
|
|
|
|
if (((hitInfo.Performance & (1 << ((int)ESKillPerformance.Heavy - 1))) != 0) ||
|
|
|
|
|
(hitInfo.Performance & (1 << ((int)ESKillPerformance.Floating - 1))) != 0)
|
|
|
|
|
{
|
|
|
|
|
UtilBuff.BuffEffectAll(target.ID(), EBuffEffectTimingType.BeAttackHeavy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//触发SkillTrigger
|
|
|
|
|
UtilSkillTrigger.Trigger(entity.ID(), target.ID(), hitInfo.SkillId, ESkillTriggerTimingType.Hit);
|
|
|
|
|
|