mirror of
https://github.com/space-wizards/space-station-14.git
synced 2026-02-14 19:29:53 +01:00
Immovable Rod changes (#26757)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
using Content.Shared.Damage;
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Server.ImmovableRod;
|
||||
@@ -36,4 +37,16 @@ public sealed partial class ImmovableRodComponent : Component
|
||||
/// </summary>
|
||||
[DataField("destroyTiles")]
|
||||
public bool DestroyTiles = true;
|
||||
|
||||
/// <summary>
|
||||
/// If true, this will gib & delete bodies
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public bool ShouldGib = true;
|
||||
|
||||
/// <summary>
|
||||
/// Damage done, if not gibbing
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public DamageSpecifier? Damage;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Server.Polymorph.Components;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
@@ -22,6 +23,8 @@ public sealed class ImmovableRodSystem : EntitySystem
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly DamageableSystem _damageable = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
@@ -64,11 +67,11 @@ public sealed class ImmovableRodSystem : EntitySystem
|
||||
var vel = component.DirectionOverride.Degrees switch
|
||||
{
|
||||
0f => _random.NextVector2(component.MinSpeed, component.MaxSpeed),
|
||||
_ => xform.WorldRotation.RotateVec(component.DirectionOverride.ToVec()) * _random.NextFloat(component.MinSpeed, component.MaxSpeed)
|
||||
_ => _transform.GetWorldRotation(uid).RotateVec(component.DirectionOverride.ToVec()) * _random.NextFloat(component.MinSpeed, component.MaxSpeed)
|
||||
};
|
||||
|
||||
_physics.ApplyLinearImpulse(uid, vel, body: phys);
|
||||
xform.LocalRotation = (vel - xform.WorldPosition).ToWorldAngle() + MathHelper.PiOver2;
|
||||
xform.LocalRotation = (vel - _transform.GetWorldPosition(uid)).ToWorldAngle() + MathHelper.PiOver2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +97,28 @@ public sealed class ImmovableRodSystem : EntitySystem
|
||||
return;
|
||||
}
|
||||
|
||||
// gib em
|
||||
// dont delete/hurt self if polymoprhed into a rod
|
||||
if (TryComp<PolymorphedEntityComponent>(uid, out var polymorphed))
|
||||
{
|
||||
if (polymorphed.Parent == ent)
|
||||
return;
|
||||
}
|
||||
|
||||
// gib or damage em
|
||||
if (TryComp<BodyComponent>(ent, out var body))
|
||||
{
|
||||
component.MobCount++;
|
||||
|
||||
_popup.PopupEntity(Loc.GetString("immovable-rod-penetrated-mob", ("rod", uid), ("mob", ent)), uid, PopupType.LargeCaution);
|
||||
|
||||
if (!component.ShouldGib)
|
||||
{
|
||||
if (component.Damage == null || !TryComp<DamageableComponent>(ent, out var damageable))
|
||||
return;
|
||||
|
||||
_damageable.SetDamage(ent, damageable, component.Damage);
|
||||
return;
|
||||
}
|
||||
|
||||
_bodySystem.GibBody(ent, body: body);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
state: icon
|
||||
noRot: false
|
||||
- type: ImmovableRod
|
||||
- type: TimedDespawn
|
||||
lifetime: 30.0
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
linearDamping: 0
|
||||
@@ -36,8 +34,15 @@
|
||||
location: immovable rod
|
||||
|
||||
- type: entity
|
||||
id: ImmovableRodDespawn
|
||||
parent: ImmovableRod
|
||||
components:
|
||||
- type: TimedDespawn
|
||||
lifetime: 30.0
|
||||
|
||||
- type: entity
|
||||
id: ImmovableRodSlow
|
||||
parent: ImmovableRodDespawn
|
||||
suffix: Slow
|
||||
components:
|
||||
- type: ImmovableRod
|
||||
@@ -45,7 +50,7 @@
|
||||
maxSpeed: 5
|
||||
|
||||
- type: entity
|
||||
parent: ImmovableRod
|
||||
parent: ImmovableRodDespawn
|
||||
id: ImmovableRodKeepTiles
|
||||
suffix: Keep Tiles
|
||||
components:
|
||||
@@ -53,6 +58,33 @@
|
||||
destroyTiles: false
|
||||
hitSoundProbability: 1.0
|
||||
|
||||
# For Wizard Polymorph
|
||||
- type: entity
|
||||
parent: ImmovableRod
|
||||
id: ImmovableRodWizard
|
||||
suffix: Wizard
|
||||
components:
|
||||
- type: ImmovableRod
|
||||
minSpeed: 35
|
||||
destroyTiles: false
|
||||
randomizeVelocity: false
|
||||
shouldGib: false
|
||||
damage:
|
||||
types:
|
||||
Blunt: 200
|
||||
- type: MovementIgnoreGravity
|
||||
gravityState: true
|
||||
- type: InputMover
|
||||
- type: MovementSpeedModifier
|
||||
weightlessAcceleration: 5
|
||||
weightlessModifier: 2
|
||||
weightlessFriction: 0
|
||||
friction: 0
|
||||
frictionNoInput: 0
|
||||
- type: CanMoveInAir
|
||||
- type: MovementAlwaysTouching
|
||||
- type: NoSlip
|
||||
|
||||
- type: entity
|
||||
parent: ImmovableRodKeepTiles
|
||||
id: ImmovableRodKeepTilesStill
|
||||
|
||||
Reference in New Issue
Block a user