Compare commits

...

1 Commits

Author SHA1 Message Date
Ed
73d0ee0ea1 some shitcode 2024-06-27 19:09:50 +03:00
3 changed files with 92 additions and 2 deletions

View File

@@ -0,0 +1,35 @@
using System.Numerics;
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Robust.Shared.Audio;
namespace Content.Shared._CP14.Cliffs;
[RegisterComponent]
public sealed partial class CP14CliffComponent : Component
{
[DataField(required: true)]
public string TriggerFallFixtureId = string.Empty;
[DataField]
public Angle fallDirection = Angle.Zero;
[DataField]
public float LaunchForwardsMultiplier = 2f;
[DataField]
public TimeSpan ParalyzeTime = TimeSpan.FromSeconds(3f);
[DataField]
public DamageSpecifier FallDamage = new()
{
DamageDict = new Dictionary<string, FixedPoint2>
{
{ "Blunt", 15.00 },
},
};
[DataField]
public SoundSpecifier FallSound = new SoundPathSpecifier("/Audio/Effects/slip.ogg");
}

View File

@@ -0,0 +1,41 @@
using Content.Shared.Stunnable;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Map;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Events;
using Robust.Shared.Physics.Systems;
namespace Content.Shared._CP14.Cliffs;
public partial class CP14CliffSystem : EntitySystem
{
[Dependency] private readonly SharedStunSystem _stun = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CP14CliffComponent, StartCollideEvent>(OnStartCollide);
}
private void OnStartCollide(Entity<CP14CliffComponent> cliff, ref StartCollideEvent args)
{
if (cliff.Comp.TriggerFallFixtureId != args.OurFixtureId)
return;
if (!TryComp<PhysicsComponent>(args.OtherEntity, out var physics))
return;
_stun.TryParalyze(args.OtherEntity, cliff.Comp.ParalyzeTime, true);
_audio.PlayPredicted(cliff.Comp.FallSound, args.OtherEntity, args.OtherEntity);
var offset = (Transform(cliff).LocalRotation + cliff.Comp.fallDirection).ToWorldVec();
var targetPos = _transform.GetWorldPosition(cliff) + offset;
_transform.SetWorldPosition(args.OtherEntity, targetPos);
var velocity = physics.LinearVelocity * cliff.Comp.LaunchForwardsMultiplier;
_physics.SetLinearVelocity(args.OtherEntity, velocity, body: physics);
}
}

View File

@@ -16,6 +16,7 @@
- type: Fixtures - type: Fixtures
fixtures: fixtures:
fix1: fix1:
hard: false
shape: shape:
!type:PhysShapeAabb !type:PhysShapeAabb
bounds: "0.49,0.49,-0.49,0.25" bounds: "0.49,0.49,-0.49,0.25"
@@ -24,10 +25,21 @@
- TableMask - TableMask
layer: layer:
- TableLayer - TableLayer
- type: Climbable cliffTrigger:
shape:
!type:PhysShapeAabb
bounds: "0.49,0.59,-0.49,0.35"
density: 1000
mask:
- TableMask
layer:
- TableLayer
- type: CP14Cliff
triggerFallFixtureId: cliffTrigger
angle: 90
- type: entity - type: entity
parent: CP14Cliff parent: BaseStructure
id: CP14CliffCorner id: CP14CliffCorner
components: components:
- type: Sprite - type: Sprite
@@ -37,6 +49,8 @@
- type: Icon - type: Icon
sprite: _CP14/Structures/Walls/Natural/cliffs.rsi sprite: _CP14/Structures/Walls/Natural/cliffs.rsi
state: corner state: corner
- type: Physics
bodyType: Static
- type: Fixtures - type: Fixtures
fixtures: fixtures:
fix1: fix1: