seperate Stealth and StealthOnMove (#12035)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user