seperate Stealth and StealthOnMove (#12035)

This commit is contained in:
Rane
2022-10-22 18:06:55 -04:00
committed by GitHub
parent 637d53222a
commit a2a895de4e
4 changed files with 65 additions and 19 deletions

View File

@@ -15,7 +15,8 @@ public abstract class SharedStealthSystem : EntitySystem
SubscribeLocalEvent<StealthComponent, ComponentGetState>(OnStealthGetState);
SubscribeLocalEvent<StealthComponent, ComponentHandleState>(OnStealthHandleState);
SubscribeLocalEvent<StealthComponent, MoveEvent>(OnMove);
SubscribeLocalEvent<StealthOnMoveComponent, MoveEvent>(OnMove);
SubscribeLocalEvent<StealthOnMoveComponent, GetVisibilityModifiersEvent>(OnGetVisibilityModifiers);
SubscribeLocalEvent<StealthComponent, EntityPausedEvent>(OnPaused);
SubscribeLocalEvent<StealthComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<StealthComponent, ExamineAttemptEvent>(OnExamine);
@@ -87,7 +88,7 @@ public abstract class SharedStealthSystem : EntitySystem
component.LastUpdated = cast.LastUpdated;
}
private void OnMove(EntityUid uid, StealthComponent component, ref MoveEvent args)
private void OnMove(EntityUid uid, StealthOnMoveComponent component, ref MoveEvent args)
{
if (args.FromStateHandling)
return;
@@ -96,7 +97,13 @@ public abstract class SharedStealthSystem : EntitySystem
return;
var delta = component.MovementVisibilityRate * (args.NewPosition.Position - args.OldPosition.Position).Length;
ModifyVisibility(uid, delta, component);
ModifyVisibility(uid, delta);
}
private void OnGetVisibilityModifiers(EntityUid uid, StealthOnMoveComponent component, GetVisibilityModifiersEvent args)
{
var mod = args.SecondsSinceUpdate * component.PassiveVisibilityRate;
args.FlatModifier += mod;
}
/// <summary>
@@ -150,6 +157,32 @@ public abstract class SharedStealthSystem : EntitySystem
return component.LastVisibility;
var deltaTime = _timing.CurTime - component.LastUpdated.Value;
return Math.Clamp(component.LastVisibility + (float) deltaTime.TotalSeconds * component.PassiveVisibilityRate, component.MinVisibility, component.MaxVisibility);
var ev = new GetVisibilityModifiersEvent(uid, component, (float) deltaTime.TotalSeconds, 0f);
RaiseLocalEvent(uid, ev, false);
return Math.Clamp(component.LastVisibility + ev.FlatModifier, component.MinVisibility, component.MaxVisibility);
}
/// <summary>
/// Used to run through any stealth effecting components on the entity.
/// <summary>
private sealed class GetVisibilityModifiersEvent : EntityEventArgs
{
public readonly StealthComponent Stealth = default!;
public readonly float SecondsSinceUpdate;
/// <summary>
/// Calculate this and add to it. Do not divide, multiply, or overwrite.
/// The sum will be added to the stealth component's visibility.
/// </summary>
public float FlatModifier;
public GetVisibilityModifiersEvent(EntityUid uid, StealthComponent stealth, float secondsSinceUpdate, float flatModifier)
{
Stealth = stealth;
SecondsSinceUpdate = secondsSinceUpdate;
FlatModifier = flatModifier;
}
}
}