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();
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);
}
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;
}
--- /dev/null
+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;
+}
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
- type: Input
context: "ghost"
- type: InputMover
- - type: MovementSpeedModifier
- baseWalkSpeed: 0
- baseSprintSpeed: 0
- - type: GhostOnMove
- type: Brain
- type: entity
components:
- type: BodyPart
partType: Leg
- - type: MovementSpeedModifier
+ - type: MovementBodyPart
- type: entity
id: FeetAnimal
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
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
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
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
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
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