--- /dev/null
+using Content.Shared.Actions;
+
+namespace Content.Shared.RepulseAttract.Events;
+
+// Action event to repulse/attract
+// TODO: Give speech support later for wizard
+// TODO: When actions are refactored, give action targeting data (to change between single target, all around, etc)
+public sealed partial class RepulseAttractActionEvent : InstantActionEvent;
using Robust.Shared.Map;
using Robust.Shared.Physics.Components;
using System.Numerics;
+using Content.Shared.RepulseAttract.Events;
using Content.Shared.Weapons.Melee;
namespace Content.Shared.RepulseAttract;
_physicsQuery = GetEntityQuery<PhysicsComponent>();
SubscribeLocalEvent<RepulseAttractComponent, MeleeHitEvent>(OnMeleeAttempt, before: [typeof(UseDelayOnMeleeHitSystem)], after: [typeof(SharedWieldableSystem)]);
+ SubscribeLocalEvent<RepulseAttractComponent, RepulseAttractActionEvent>(OnRepulseAttractAction);
}
+
private void OnMeleeAttempt(Entity<RepulseAttractComponent> ent, ref MeleeHitEvent args)
{
if (_delay.IsDelayed(ent.Owner))
TryRepulseAttract(ent, args.User);
}
+ private void OnRepulseAttractAction(Entity<RepulseAttractComponent> ent, ref RepulseAttractActionEvent args)
+ {
+ if (args.Handled)
+ return;
+
+ var position = _xForm.GetMapCoordinates(args.Performer);
+ args.Handled = TryRepulseAttract(position, args.Performer, ent.Comp.Speed, ent.Comp.Range, ent.Comp.Whitelist, ent.Comp.CollisionMask);
+ }
+
public bool TryRepulseAttract(Entity<RepulseAttractComponent> ent, EntityUid user)
{
var position = _xForm.GetMapCoordinates(ent.Owner);
spellbook-voidapplause-desc = Swap places with the target, doesn't it make you want to do the boogie?
spellbook-force-wall-name = Force Wall
-spellbook-force-wall-desc = Make three walls of pure force that you can pass through, but other's can't.
+spellbook-force-wall-desc = Make three walls of pure force that you can pass through, but others can't.
-spellbook-polymoprh-spider-name = Spider Polymoprh
+spellbook-repulse-name = Repulse
+spellbook-repulse-desc = Tell people to GITTAH`WEIGH and push 'em away from you.
+
+spellbook-polymorph-spider-name = Spider Polymorph
spellbook-polymorph-spider-desc = Transforms you into a spider, man!
spellbook-polymorph-rod-name = Rod Polymorph
WizCoin: 3
categories:
- SpellbookDefensive
+ conditions:
+ - !type:ListingLimitedStockCondition
+ stock: 1
+
+- type: listing
+ id: SpellbookRepulse
+ name: spellbook-repulse-name
+ description: spellbook-repulse-desc
+ productAction: ActionRepulse
+ cost:
+ WizCoin: 2
+ categories:
+ - SpellbookDefensive
+ conditions:
+ - !type:ListingLimitedStockCondition
+ stock: 1
# Utility
- type: listing
id: SpellbookPolymorphSpider
- name: spellbook-polymoprh-spider-name
+ name: spellbook-polymorph-spider-name
description: spellbook-polymorph-spider-desc
productAction: ActionPolymorphWizardSpider
cost:
--- /dev/null
+- type: entity
+ id: ActionRepulse
+ name: Repulse
+ description: Pushes entities away from the user.
+ components:
+ - type: RepulseAttract
+ speed: 10
+ range: 5
+ whitelist:
+ components:
+ - MobMover
+ - Item
+ - type: InstantAction
+ useDelay: 40
+ raiseOnAction: true
+ itemIconStyle: BigAction
+ icon:
+ sprite: Objects/Magic/magicactions.rsi
+ state: repulse
+ event: !type:RepulseAttractActionEvent
},
{
"name": "item_recall"
+ },
+ {
+ "name": "repulse"
}
]
}