diff --git a/Content.Shared/_CP14/Shuttle/CP14WatershipPaddleComponent.cs b/Content.Shared/_CP14/Shuttle/CP14WatershipPaddleComponent.cs new file mode 100644 index 0000000000..2527ebd823 --- /dev/null +++ b/Content.Shared/_CP14/Shuttle/CP14WatershipPaddleComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Shared._CP14.Shuttle; + +/// +/// +/// +[RegisterComponent, Access(typeof(CP14WatershipSystem))] +public sealed partial class CP14WaterShipPaddleComponent : Component +{ + [DataField] + public float Power = 10f; +} diff --git a/Content.Shared/_CP14/Shuttle/CP14WatershipSystem.cs b/Content.Shared/_CP14/Shuttle/CP14WatershipSystem.cs new file mode 100644 index 0000000000..2d0e9928b2 --- /dev/null +++ b/Content.Shared/_CP14/Shuttle/CP14WatershipSystem.cs @@ -0,0 +1,66 @@ +using Content.Shared.Construction.Components; +using Content.Shared.Construction.EntitySystems; +using Content.Shared.Verbs; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared._CP14.Shuttle; + +public sealed class CP14WatershipSystem : EntitySystem +{ + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + + public override void Initialize() + { + SubscribeLocalEvent>(OnPaddleForward); + SubscribeLocalEvent>(OnPaddleBackward); + } + + private void OnPaddleForward(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + var paddleTransform = Transform(ent); + + if (!paddleTransform.Anchored) + return; + + var verb = new ActivationVerb + { + Text = "Forward", + Priority = 1, + Act = () => Bulb(ent, paddleTransform, 1) + }; + args.Verbs.Add(verb); + } + + private void OnPaddleBackward(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + var paddleTransform = Transform(ent); + + if (!paddleTransform.Anchored) + return; + + var verb = new AlternativeVerb + { + Text = "Backward", + Priority = 2, + Act = () => Bulb(ent, paddleTransform, -1) + }; + args.Verbs.Add(verb); + } + + private void Bulb(Entity ent, TransformComponent paddleTransform, float modifier) + { + if (paddleTransform.GridUid is null) + return; + + var impulseDirection = paddleTransform.LocalRotation.ToVec(); + + _physics.ApplyLinearImpulse(paddleTransform.GridUid.Value, impulseDirection * ent.Comp.Power * modifier, paddleTransform.LocalPosition); + } +} diff --git a/Resources/Prototypes/_CP14/Entities/watershipTEST.yml b/Resources/Prototypes/_CP14/Entities/watershipTEST.yml new file mode 100644 index 0000000000..6a35bdfd80 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/watershipTEST.yml @@ -0,0 +1,59 @@ +- type: entity + name: ship paddle + id: CP14BaseWatershipPaddle + abstract: true + parent: + - BaseStructure + description: bulb bulb + categories: [ ForkFiltered ] + components: + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.05" + density: 190 + mask: + - TableMask + - type: Sprite + sprite: _CP14/Structures/Shuttle/paddle.rsi + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 75 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:SpawnEntitiesBehavior + spawn: + CP14WoodenPlanks1: + min: 2 + max: 4 + - type: Transform + anchored: true + - type: Anchorable + - type: Pullable + - type: CP14WaterShipPaddle + +- type: entity + parent: CP14BaseWatershipPaddle + id: CP14WatershipPaddleLeft + suffix: Left + components: + - type: Sprite + state: wooden_l + +- type: entity + parent: CP14BaseWatershipPaddle + id: CP14WatershipPaddleRight + suffix: Right + components: + - type: Sprite + state: wooden_r \ No newline at end of file diff --git a/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/meta.json b/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/meta.json new file mode 100644 index 0000000000..7d1a6d7a0d --- /dev/null +++ b/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CLA", + "copyright": "Created by TheShuEd (Github) for CrystallPunk14", + "size": { + "x": 96, + "y": 32 + }, + "states": [ + { + "name": "wooden_l" + }, + { + "name": "wooden_r" + } + ] +} diff --git a/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/wooden_l.png b/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/wooden_l.png new file mode 100644 index 0000000000..5d5d31850d Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/wooden_l.png differ diff --git a/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/wooden_r.png b/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/wooden_r.png new file mode 100644 index 0000000000..669175bca8 Binary files /dev/null and b/Resources/Textures/_CP14/Structures/Shuttle/paddle.rsi/wooden_r.png differ