]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Prevent brains from walking (#15709)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Sat, 29 Apr 2023 06:35:28 +0000 (18:35 +1200)
committerGitHub <noreply@github.com>
Sat, 29 Apr 2023 06:35:28 +0000 (16:35 +1000)
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
12 files changed:
Content.Server/Body/Systems/BrainSystem.cs
Content.Shared/Body/Systems/SharedBodySystem.Parts.cs
Content.Shared/Movement/Components/MovementBodyPartComponent.cs [new file with mode: 0644]
Resources/Prototypes/Body/Organs/diona.yml
Resources/Prototypes/Body/Organs/human.yml
Resources/Prototypes/Body/Parts/animal.yml
Resources/Prototypes/Body/Parts/diona.yml
Resources/Prototypes/Body/Parts/human.yml
Resources/Prototypes/Body/Parts/reptilian.yml
Resources/Prototypes/Body/Parts/skeleton.yml
Resources/Prototypes/Body/Parts/slime.yml
Resources/Prototypes/Body/Parts/vox.yml

index 52b743eebc2aa5451090a7fc7284cc70432abcb0..97a76a64d1703a862e168d1fcc966747e5df8aec 100644 (file)
@@ -4,12 +4,16 @@ using Content.Server.Mind.Components;
 using Content.Shared.Body.Components;
 using Content.Shared.Body.Events;
 using Content.Shared.Body.Organ;
+using Content.Shared.Body.Part;
 using Content.Shared.Movement.Components;
+using Content.Shared.Movement.Systems;
 
 namespace Content.Server.Body.Systems
 {
     public sealed class BrainSystem : EntitySystem
     {
+        [Dependency] private readonly MovementSpeedModifierSystem _movementSpeed = default!;
+
         public override void Initialize()
         {
             base.Initialize();
@@ -42,7 +46,14 @@ namespace Content.Server.Body.Systems
                 Comp<GhostOnMoveComponent>(newEntity).MustBeDead = true;
 
             // TODO: This is an awful solution.
-            EnsureComp<InputMoverComponent>(newEntity);
+            // Our greatest minds still can't figure out how to allow brains/heads to ghost without giving them the
+            // ability to move first. I hate this with a passion.
+            if (!HasComp<InputMoverComponent>(newEntity))
+            {
+                AddComp<InputMoverComponent>(newEntity);
+                var move = EnsureComp<MovementSpeedModifierComponent>(newEntity);
+                _movementSpeed.ChangeBaseSpeed(newEntity, 0, 0 , 0, move);
+            }
 
             oldMind.Mind?.TransferTo(newEntity);
         }
index 1b446dff92ab57af994a0062d92fabd9e1006ffc..eab2dae602f250c6f6ebc8afdb2d0af26293c55e 100644 (file)
@@ -311,11 +311,11 @@ public partial class SharedBodySystem
         var acceleration = 0f;
         foreach (var leg in allLegs)
         {
-            if (!TryComp<MovementSpeedModifierComponent>(leg, out var legModifier))
+            if (!TryComp<MovementBodyPartComponent>(leg, out var legModifier))
                 continue;
 
-            walkSpeed += legModifier.BaseWalkSpeed;
-            sprintSpeed += legModifier.BaseSprintSpeed;
+            walkSpeed += legModifier.WalkSpeed;
+            sprintSpeed += legModifier.SprintSpeed;
             acceleration += legModifier.Acceleration;
         }
 
diff --git a/Content.Shared/Movement/Components/MovementBodyPartComponent.cs b/Content.Shared/Movement/Components/MovementBodyPartComponent.cs
new file mode 100644 (file)
index 0000000..6f40987
--- /dev/null
@@ -0,0 +1,14 @@
+namespace Content.Shared.Movement.Components;
+
+[RegisterComponent, NetworkedComponent]
+public sealed class MovementBodyPartComponent : Component
+{
+    [DataField("walkSpeed")]
+    public readonly float WalkSpeed = MovementSpeedModifierComponent.DefaultBaseWalkSpeed;
+
+    [DataField("sprintSpeed")]
+    public readonly float SprintSpeed = MovementSpeedModifierComponent.DefaultBaseSprintSpeed;
+
+    [DataField("acceleration")]
+    public float Acceleration = MovementSpeedModifierComponent.DefaultAcceleration;
+}
index c5d5c0cb368222dee53c080702a33a5ade443a3f..b59b1458f88191558e68e1b5f1b78792b99df98b 100644 (file)
       Lung:
         maxVol: 100
         canReact: False
-  - type: MovementSpeedModifier
-    baseWalkSpeed: 0
-    baseSprintSpeed: 0
-  - type: GhostOnMove
   - type: Brain
   - type: Lung #lungs in they head. why they there tho?
   - type: Metabolizer
index e92c426a1cece7d9db57c9924665413642475581..b9d0242f7255580e6fbb894b407fdd61a700a973 100644 (file)
   - type: Input
     context: "ghost"
   - type: InputMover
-  - type: MovementSpeedModifier
-    baseWalkSpeed: 0
-    baseSprintSpeed: 0
-  - type: GhostOnMove
   - type: Brain
 
 - type: entity
index dab65fe25d8613bdcb59e1d9d543ea874ff37cbd..3d90f24e1abec67a1f120c1087dc5010e8ffab97 100644 (file)
@@ -40,7 +40,7 @@
   components:
   - type: BodyPart
     partType: Leg
-  - type: MovementSpeedModifier
+  - type: MovementBodyPart
 
 - type: entity
   id: FeetAnimal
index fb11c0772ae494daa2a1b46e654f8b53e4b6d644..527d56eee5efa1cf19a47f0cc194440deb62e798 100644 (file)
     vital: true
   - type: Input
     context: "ghost"
-  - type: MovementSpeedModifier
-    baseWalkSpeed: 0
-    baseSprintSpeed: 0
-  - type: InputMover
-  - type: GhostOnMove
   - type: Tag
     tags:
       - Head
   - type: BodyPart
     partType: Leg
     symmetry: Left
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 1.5
-    baseSprintSpeed : 3.5
+  - type: MovementBodyPart
+    walkSpeed : 1.5
+    sprintSpeed : 3.5
 
 - type: entity
   id: RightLegDiona
   - type: BodyPart
     partType: Leg
     symmetry: Right
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 1.5
-    baseSprintSpeed : 3.5
+  - type: MovementBodyPart
+    walkSpeed : 1.5
+    sprintSpeed : 3.5
 
 - type: entity
   id: LeftFootDiona
index 175d4c1837c174562557b85ce1ddf4c54103f746..316958dba627284adb0b0f3319b63be65be6c453 100644 (file)
     vital: true
   - type: Input
     context: "ghost"
-  - type: MovementSpeedModifier
-    baseWalkSpeed: 0
-    baseSprintSpeed: 0
-  - type: InputMover
-  - type: GhostOnMove
   - type: Tag
     tags:
       - Head
   - type: BodyPart
     partType: Leg
     symmetry: Left
-  - type: MovementSpeedModifier
+  - type: MovementBodyPart
 
 - type: entity
   id: RightLegHuman
   - type: BodyPart
     partType: Leg
     symmetry: Right
-  - type: MovementSpeedModifier
+  - type: MovementBodyPart
 
 - type: entity
   id: LeftFootHuman
index 3a54af0f6102eb817f857b7926c55fbc14058242..0c17913034bb4ccea74cb69551c57986961ce4a1 100644 (file)
     vital: true
   - type: Input
     context: "ghost"
-  - type: MovementSpeedModifier
-    baseWalkSpeed: 0
-    baseSprintSpeed: 0
-  - type: InputMover
-  - type: GhostOnMove
   - type: Tag
     tags:
       - Head
   - type: BodyPart
     partType: Leg
     symmetry: Left
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 2.7
-    baseSprintSpeed : 4.5
+  - type: MovementBodyPart
+    walkSpeed : 2.7
+    sprintSpeed : 4.5
 
 - type: entity
   id: RightLegReptilian
   - type: BodyPart
     partType: Leg
     symmetry: Right
-  - type: MovementSpeedModifier
-    baseWalkSpeed : 2.7
-    baseSprintSpeed : 4.5
+  - type: MovementBodyPart
+    walkSpeed : 2.7
+    sprintSpeed : 4.5
 
 - type: entity
   id: LeftFootReptilian
index fe4aefa1c4b768000ebc4ffd9ceb83769abbe2b3..2d5d76a039f8ff36471514fcd1f645d3cb561357 100644 (file)
@@ -50,9 +50,6 @@
       partType: Head
     - type: Input
       context: "human"
-    - type: MovementSpeedModifier
-      baseWalkSpeed: 0
-      baseSprintSpeed: 0
     - type: Speech
     - type: SkeletonAccent
     - type: Actions
     - type: BodyPart
       partType: Leg
       symmetry: Left
-    - type: MovementSpeedModifier
+    - type: MovementBodyPart
 
 - type: entity
   id: RightLegSkeleton
     - type: BodyPart
       partType: Leg
       symmetry: Right
-    - type: MovementSpeedModifier
+    - type: MovementBodyPart
 
 - type: entity
   id: LeftFootSkeleton
index f2168e94812cff7e5d86a90ebd33d2e703140784..8f58f0b7eb33415267b9c3debd10f8aa428df66d 100644 (file)
       vital: true
     - type: Input
       context: "ghost"
-    - type: MovementSpeedModifier
-      baseWalkSpeed: 0
-      baseSprintSpeed: 0
-    - type: InputMover
-    - type: GhostOnMove
     - type: Tag
       tags:
         - Head
     - type: BodyPart
       partType: Leg
       symmetry: Left
-    - type: MovementSpeedModifier
+    - type: MovementBodyPart
 
 - type: entity
   id: RightLegSlime
     - type: BodyPart
       partType: Leg
       symmetry: Right
-    - type: MovementSpeedModifier
+    - type: MovementBodyPart
 
 - type: entity
   id: LeftFootSlime
index b38acb6a88e405ee976cca2af86c96802825ee16..c87cbaa67eca35c50f613087ce3598fffc94aaf3 100644 (file)
       vital: true
     - type: Input
       context: "ghost"
-    - type: MovementSpeedModifier
-      baseWalkSpeed: 0
-      baseSprintSpeed: 0
-    - type: InputMover
-    - type: GhostOnMove
     - type: Tag
       tags:
         - Head
     - type: BodyPart
       partType: Leg
       symmetry: Left
-    - type: MovementSpeedModifier
+    - type: MovementBodyPart
 
 - type: entity
   id: RightLegVox
     - type: BodyPart
       partType: Leg
       symmetry: Right
-    - type: MovementSpeedModifier
+    - type: MovementBodyPart
 
 - type: entity
   id: LeftFootVox