Add IStunModifier component interface
This commit is contained in:
@@ -91,7 +91,10 @@ namespace Content.Server.GameObjects.Components.Mobs
|
|||||||
/// <param name="seconds">How many seconds the mob will stay stunned</param>
|
/// <param name="seconds">How many seconds the mob will stay stunned</param>
|
||||||
public void Stun(float seconds)
|
public void Stun(float seconds)
|
||||||
{
|
{
|
||||||
seconds = Math.Min(seconds + _stunnedTimer, _stunCap);
|
seconds = Math.Min(_stunnedTimer + (seconds * StunTimeModifier), _stunCap);
|
||||||
|
|
||||||
|
if (seconds <= 0f)
|
||||||
|
return;
|
||||||
|
|
||||||
StandingStateHelper.DropAllItemsInHands(Owner);
|
StandingStateHelper.DropAllItemsInHands(Owner);
|
||||||
|
|
||||||
@@ -105,7 +108,10 @@ namespace Content.Server.GameObjects.Components.Mobs
|
|||||||
/// <param name="seconds">How many seconds the mob will stay on the ground</param>
|
/// <param name="seconds">How many seconds the mob will stay on the ground</param>
|
||||||
public void Knockdown(float seconds)
|
public void Knockdown(float seconds)
|
||||||
{
|
{
|
||||||
seconds = MathF.Min(_knockdownTimer + seconds, _knockdownCap);
|
seconds = MathF.Min(_knockdownTimer + (seconds * KnockdownTimeModifier), _knockdownCap);
|
||||||
|
|
||||||
|
if (seconds <= 0f)
|
||||||
|
return;
|
||||||
|
|
||||||
StandingStateHelper.Down(Owner);
|
StandingStateHelper.Down(Owner);
|
||||||
|
|
||||||
@@ -131,7 +137,10 @@ namespace Content.Server.GameObjects.Components.Mobs
|
|||||||
/// <param name="runModifierOverride">Run speed modifier. Set to 0 or negative for default value. (0.5f)</param>
|
/// <param name="runModifierOverride">Run speed modifier. Set to 0 or negative for default value. (0.5f)</param>
|
||||||
public void Slowdown(float seconds, float walkModifierOverride = 0f, float runModifierOverride = 0f)
|
public void Slowdown(float seconds, float walkModifierOverride = 0f, float runModifierOverride = 0f)
|
||||||
{
|
{
|
||||||
seconds = MathF.Min(_slowdownTimer + seconds, _slowdownCap);
|
seconds = MathF.Min(_slowdownTimer + (seconds * SlowdownTimeModifier), _slowdownCap);
|
||||||
|
|
||||||
|
if (seconds <= 0f)
|
||||||
|
return;
|
||||||
|
|
||||||
_walkModifierOverride = walkModifierOverride;
|
_walkModifierOverride = walkModifierOverride;
|
||||||
_runModifierOverride = runModifierOverride;
|
_runModifierOverride = runModifierOverride;
|
||||||
@@ -259,7 +268,65 @@ namespace Content.Server.GameObjects.Components.Mobs
|
|||||||
public bool CanChangeDirection() => true;
|
public bool CanChangeDirection() => true;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public float StunTimeModifier
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var modifier = 1.0f;
|
||||||
|
var components = Owner.GetAllComponents<IStunModifier>();
|
||||||
|
|
||||||
|
foreach (var component in components)
|
||||||
|
{
|
||||||
|
modifier *= component.StunTimeModifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
return modifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float KnockdownTimeModifier
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var modifier = 1.0f;
|
||||||
|
var components = Owner.GetAllComponents<IStunModifier>();
|
||||||
|
|
||||||
|
foreach (var component in components)
|
||||||
|
{
|
||||||
|
modifier *= component.KnockdownTimeModifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
return modifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public float SlowdownTimeModifier
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var modifier = 1.0f;
|
||||||
|
var components = Owner.GetAllComponents<IStunModifier>();
|
||||||
|
|
||||||
|
foreach (var component in components)
|
||||||
|
{
|
||||||
|
modifier *= component.SlowdownTimeModifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
return modifier;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public float WalkSpeedModifier => (SlowedDown ? (_walkModifierOverride <= 0f ? 0.5f : _walkModifierOverride) : 1f);
|
public float WalkSpeedModifier => (SlowedDown ? (_walkModifierOverride <= 0f ? 0.5f : _walkModifierOverride) : 1f);
|
||||||
public float SprintSpeedModifier => (SlowedDown ? (_runModifierOverride <= 0f ? 0.5f : _runModifierOverride) : 1f);
|
public float SprintSpeedModifier => (SlowedDown ? (_runModifierOverride <= 0f ? 0.5f : _runModifierOverride) : 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This interface allows components to multiply the time in seconds of various stuns by a number.
|
||||||
|
/// </summary>
|
||||||
|
public interface IStunModifier
|
||||||
|
{
|
||||||
|
float StunTimeModifier => 1.0f;
|
||||||
|
float KnockdownTimeModifier => 1.0f;
|
||||||
|
float SlowdownTimeModifier => 1.0f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user