Skip to content

Commit

Permalink
Immovable Rod changes (space-wizards#26757)
Browse files Browse the repository at this point in the history
  • Loading branch information
keronshb authored Apr 11, 2024
1 parent fc5a90b commit 036abac
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 8 deletions.
13 changes: 13 additions & 0 deletions Content.Server/ImmovableRod/ImmovableRodComponent.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Content.Shared.Damage;
using Robust.Shared.Audio;

namespace Content.Server.ImmovableRod;
Expand Down Expand Up @@ -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;
}
29 changes: 24 additions & 5 deletions Content.Server/ImmovableRod/ImmovableRodSystem.cs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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)
{
Expand Down Expand Up @@ -64,11 +67,11 @@ private void OnMapInit(EntityUid uid, ImmovableRodComponent component, MapInitEv
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;
}
}

Expand All @@ -94,12 +97,28 @@ private void OnCollide(EntityUid uid, ImmovableRodComponent component, ref Start
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;
}
Expand Down
38 changes: 35 additions & 3 deletions Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
state: icon
noRot: false
- type: ImmovableRod
- type: TimedDespawn
lifetime: 30.0
- type: Physics
bodyType: Dynamic
linearDamping: 0
Expand All @@ -36,23 +34,57 @@
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
minSpeed: 1
maxSpeed: 5

- type: entity
parent: ImmovableRod
parent: ImmovableRodDespawn
id: ImmovableRodKeepTiles
suffix: Keep Tiles
components:
- type: ImmovableRod
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
Expand Down

0 comments on commit 036abac

Please sign in to comment.