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:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
34
Content.Shared/Item/HeldSpeedModifierComponent.cs
Normal file
34
Content.Shared/Item/HeldSpeedModifierComponent.cs
Normal file
@@ -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;
|
||||
}
|
||||
44
Content.Shared/Item/HeldSpeedModifierSystem.cs
Normal file
44
Content.Shared/Item/HeldSpeedModifierSystem.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffel
|
||||
@@ -236,6 +237,7 @@
|
||||
- 0,0,19,9
|
||||
- type: ClothingSpeedModifier
|
||||
sprintModifier: 1 # makes its stats identical to other variants of bag of holding
|
||||
- type: HeldSpeedModifier
|
||||
|
||||
- type: entity
|
||||
parent: ClothingBackpackDuffel
|
||||
@@ -248,3 +250,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
|
||||
@@ -70,6 +71,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.4
|
||||
sprintModifier: 0.6
|
||||
- type: HeldSpeedModifier
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
- type: Armor
|
||||
@@ -105,6 +107,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: Item
|
||||
size: Huge
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -90,6 +92,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.7
|
||||
sprintModifier: 0.7
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitEngineering
|
||||
|
||||
@@ -118,6 +121,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSpatio
|
||||
|
||||
@@ -148,6 +152,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.75
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSalvage
|
||||
|
||||
@@ -177,6 +182,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.75
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSecurity
|
||||
|
||||
@@ -203,6 +209,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.65
|
||||
sprintModifier: 0.65
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitBrigmedic
|
||||
|
||||
@@ -232,6 +239,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.7
|
||||
sprintModifier: 0.7
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitWarden
|
||||
|
||||
@@ -263,6 +271,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitCap
|
||||
|
||||
@@ -294,6 +303,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitEngineeringWhite
|
||||
|
||||
@@ -318,6 +328,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.95
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitMedical
|
||||
|
||||
@@ -349,6 +360,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.75
|
||||
sprintModifier: 0.75
|
||||
- type: HeldSpeedModifier
|
||||
- type: Item
|
||||
size: Normal
|
||||
- type: Tag
|
||||
@@ -387,6 +399,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSecurityRed
|
||||
|
||||
@@ -417,6 +430,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.85
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitLuxury
|
||||
|
||||
@@ -451,6 +465,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSyndie
|
||||
|
||||
@@ -498,6 +513,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSyndieElite
|
||||
|
||||
@@ -529,6 +545,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitSyndieCommander
|
||||
|
||||
@@ -560,6 +577,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.65
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitCybersun
|
||||
|
||||
@@ -591,6 +609,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitWizard
|
||||
|
||||
@@ -620,6 +639,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitLing
|
||||
|
||||
@@ -649,6 +669,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.6
|
||||
sprintModifier: 0.6
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitPirateEVA
|
||||
- type: StaticPrice
|
||||
@@ -681,6 +702,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.8
|
||||
sprintModifier: 0.8
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitPirateCap
|
||||
- type: StaticPrice
|
||||
@@ -787,6 +809,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetHardsuitDeathsquad
|
||||
|
||||
@@ -822,6 +845,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 1.0
|
||||
sprintModifier: 1.0
|
||||
- type: HeldSpeedModifier
|
||||
- type: ToggleableClothing
|
||||
clothingPrototype: ClothingHeadHelmetCBURN
|
||||
|
||||
@@ -852,6 +876,7 @@
|
||||
- type: ClothingSpeedModifier
|
||||
walkModifier: 0.9
|
||||
sprintModifier: 0.9
|
||||
- type: HeldSpeedModifier
|
||||
- type: Construction
|
||||
graph: ClownHardsuit
|
||||
node: clownHardsuit
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user