Mirror speed penalty for worn duffels and hardsuits when in-hand (#22168)
* Add speed penalty for holding hardsuits and duffels * just inherit from ClothingSpeedModifier * comment godo
This commit is contained in:
parent
2d3e32f209
commit
94c3a7019d
|
|
@ -0,0 +1,21 @@
|
|||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Movement.Systems;
|
||||
|
||||
namespace Content.Shared.Hands.EntitySystems;
|
||||
|
||||
public abstract partial class SharedHandsSystem
|
||||
{
|
||||
private void InitializeRelay()
|
||||
{
|
||||
SubscribeLocalEvent<HandsComponent, RefreshMovementSpeedModifiersEvent>(RelayEvent);
|
||||
}
|
||||
|
||||
private void RelayEvent<T>(Entity<HandsComponent> entity, ref T args) where T : EntityEventArgs
|
||||
{
|
||||
var ev = new HeldRelayedEvent<T>(args);
|
||||
foreach (var held in EnumerateHeld(entity, entity.Comp))
|
||||
{
|
||||
RaiseLocalEvent(held, ref ev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -31,6 +31,7 @@ public abstract partial class SharedHandsSystem
|
|||
InitializeDrop();
|
||||
InitializePickup();
|
||||
InitializeVirtual();
|
||||
InitializeRelay();
|
||||
}
|
||||
|
||||
public override void Shutdown()
|
||||
|
|
|
|||
|
|
@ -319,4 +319,15 @@ namespace Content.Shared.Hands
|
|||
|
||||
public EntityUid Sender { get; }
|
||||
}
|
||||
|
||||
[ByRefEvent]
|
||||
public sealed class HeldRelayedEvent<TEvent> : EntityEventArgs
|
||||
{
|
||||
public TEvent Args;
|
||||
|
||||
public HeldRelayedEvent(TEvent args)
|
||||
{
|
||||
Args = args;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
using Content.Shared.Clothing;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared.Item;
|
||||
|
||||
/// <summary>
|
||||
/// This is used for items that change your speed when they are held.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This is separate from <see cref="ClothingSpeedModifierComponent"/> because things like boots increase/decrease speed when worn, but
|
||||
/// shouldn't do that when just held in hand.
|
||||
/// </remarks>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
[Access(typeof(HeldSpeedModifierSystem))]
|
||||
public sealed partial class HeldSpeedModifierComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// A multiplier applied to the walk speed.
|
||||
/// </summary>
|
||||
[DataField] [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public float WalkModifier = 1.0f;
|
||||
|
||||
/// <summary>
|
||||
/// A multiplier applied to the sprint speed.
|
||||
/// </summary>
|
||||
[DataField] [ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public float SprintModifier = 1.0f;
|
||||
|
||||
/// <summary>
|
||||
/// If true, values from <see cref="ClothingSpeedModifierComponent"/> will attempted to be used before the ones in this component.
|
||||
/// </summary>
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public bool MirrorClothingModifier = true;
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
using Content.Shared.Clothing;
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.Movement.Systems;
|
||||
|
||||
namespace Content.Shared.Item;
|
||||
|
||||
/// <summary>
|
||||
/// This handles <see cref="HeldSpeedModifierComponent"/>
|
||||
/// </summary>
|
||||
public sealed class HeldSpeedModifierSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<HeldSpeedModifierComponent, GotEquippedHandEvent>(OnGotEquippedHand);
|
||||
SubscribeLocalEvent<HeldSpeedModifierComponent, GotUnequippedHandEvent>(OnGotUnequippedHand);
|
||||
SubscribeLocalEvent<HeldSpeedModifierComponent, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent>>(OnRefreshMovementSpeedModifiers);
|
||||
}
|
||||
|
||||
private void OnGotEquippedHand(Entity<HeldSpeedModifierComponent> ent, ref GotEquippedHandEvent args)
|
||||
{
|
||||
_movementSpeedModifier.RefreshMovementSpeedModifiers(args.User);
|
||||
}
|
||||
|
||||
private void OnGotUnequippedHand(Entity<HeldSpeedModifierComponent> ent, ref GotUnequippedHandEvent args)
|
||||
{
|
||||
_movementSpeedModifier.RefreshMovementSpeedModifiers(args.User);
|
||||
}
|
||||
|
||||
private void OnRefreshMovementSpeedModifiers(EntityUid uid, HeldSpeedModifierComponent component, HeldRelayedEvent<RefreshMovementSpeedModifiersEvent> args)
|
||||
{
|
||||
var walkMod = component.WalkModifier;
|
||||
var sprintMod = component.SprintModifier;
|
||||
if (component.MirrorClothingModifier && TryComp<ClothingSpeedModifierComponent>(uid, out var clothingSpeedModifier))
|
||||
{
|
||||
walkMod = clothingSpeedModifier.WalkModifier;
|
||||
sprintMod = clothingSpeedModifier.SprintModifier;
|
||||
}
|
||||
|
||||
args.Args.ModifySpeed(walkMod, sprintMod);
|
||||
}
|
||||
}
|
||||
|
|
@ -11,6 +11,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffel
|
||||
|
|
@ -232,6 +233,7 @@
|
|||
capacity: 9999
|
||||
- type: ClothingSpeedModifier
|
||||
sprintModifier: 1 # makes its stats identical to other variants of bag of holding
|
||||
- type: HeldSpeedModifier
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffel
|
||||
|
|
@ -244,3 +246,4 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1
|
||||
sprintModifier: 1
|
||||
- type: HeldSpeedModifier
|
||||
|
|
@ -230,6 +230,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ExplosionResistance
|
||||
damageCoefficient: 0.65
|
||||
- type: GroupExamine
|
||||
|
|
@ -255,6 +256,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.7
|
||||
sprintModifier: 0.65
|
||||
- type: HeldSpeedModifier
|
||||
- type: ExplosionResistance
|
||||
damageCoefficient: 0.5
|
||||
- type: GroupExamine
|
||||
|
|
@ -277,6 +279,7 @@
|
|||
Piercing: 0.4
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ExplosionResistance
|
||||
damageCoefficient: 0.4
|
||||
- type: GroupExamine
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
|
||||
- type: entity
|
||||
abstract: true
|
||||
|
|
@ -71,6 +72,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.4
|
||||
sprintModifier: 0.6
|
||||
- type: HeldSpeedModifier
|
||||
- type: Item
|
||||
size: 121
|
||||
- type: Armor
|
||||
|
|
@ -106,6 +108,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: Item
|
||||
size: 80
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.80
|
||||
sprintModifier: 0.80
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitBasic
|
||||
|
||||
|
|
@ -57,6 +58,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.7
|
||||
sprintModifier: 0.7
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitAtmos
|
||||
- type: ReverseEngineering # Nyano
|
||||
|
|
@ -95,6 +97,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.7
|
||||
sprintModifier: 0.7
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitEngineering
|
||||
|
||||
|
|
@ -123,6 +126,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSpatio
|
||||
|
||||
|
|
@ -153,6 +157,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.75
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSalvage
|
||||
|
||||
|
|
@ -182,6 +187,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.75
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSecurity
|
||||
|
||||
|
|
@ -208,6 +214,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.65
|
||||
sprintModifier: 0.65
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitBrigmedic
|
||||
|
||||
|
|
@ -237,6 +244,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.7
|
||||
sprintModifier: 0.7
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitWarden
|
||||
|
||||
|
|
@ -268,6 +276,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitCap
|
||||
|
||||
|
|
@ -299,6 +308,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitEngineeringWhite
|
||||
|
||||
|
|
@ -323,6 +333,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.95
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitMedical
|
||||
|
||||
|
|
@ -354,6 +365,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.75
|
||||
- type: HeldSpeedModifier
|
||||
- type: Item
|
||||
size: 50
|
||||
- type: Tag
|
||||
|
|
@ -392,6 +404,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSecurityRed
|
||||
|
||||
|
|
@ -422,6 +435,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.85
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitLuxury
|
||||
|
||||
|
|
@ -454,6 +468,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSyndie
|
||||
- type: ReverseEngineering # Nyano
|
||||
|
|
@ -506,6 +521,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSyndieElite
|
||||
|
||||
|
|
@ -537,6 +553,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSyndieCommander
|
||||
|
||||
|
|
@ -568,6 +585,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.65
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitCybersun
|
||||
|
||||
|
|
@ -599,6 +617,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitWizard
|
||||
|
||||
|
|
@ -628,6 +647,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitLing
|
||||
|
||||
|
|
@ -657,6 +677,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.6
|
||||
sprintModifier: 0.6
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitPirateEVA
|
||||
- type: StaticPrice
|
||||
|
|
@ -689,6 +710,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitPirateCap
|
||||
- type: StaticPrice
|
||||
|
|
@ -795,6 +817,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitDeathsquad
|
||||
|
||||
|
|
@ -830,6 +853,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetCBURN
|
||||
|
||||
|
|
@ -863,5 +887,6 @@
|
|||
# - type: Construction # DeltaV - Prevent clowns from making the hardsuit
|
||||
# graph: ClownHardsuit
|
||||
# node: clownHardsuit
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitClown
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.5
|
||||
sprintModifier: 0.5
|
||||
- type: HeldSpeedModifier
|
||||
- type: TemperatureProtection
|
||||
coefficient: 0.5
|
||||
- type: ToggleableClothing
|
||||
|
|
@ -83,6 +84,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.85
|
||||
sprintModifier: 0.85
|
||||
- type: HeldSpeedModifier
|
||||
|
||||
#Paramedic Voidsuit
|
||||
#Despite having resistances and looking like one, this is two-piece and parents off the EVA suit so it goes here.
|
||||
|
|
@ -102,6 +104,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
- type: TemperatureProtection
|
||||
coefficient: 0.1
|
||||
- type: Armor
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.7
|
||||
- type: HeldSpeedModifier
|
||||
- type: GroupExamine
|
||||
|
||||
- type: entity
|
||||
|
|
@ -72,6 +73,7 @@
|
|||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: GroupExamine
|
||||
|
||||
- type: entity
|
||||
|
|
|
|||
Loading…
Reference in New Issue