ECS dragdrop (#12973)

* ECS dragdrop

No more excuses.

* AAAAAAAAAAAAAA

* kry

* events

* aaaaaaaaaa

* HUH

* Fix stripping

* aaaaaa

* spoike

* asease

* fix table vaulting

* ded

* rebiew

* aaaaaaaaaaaaa

* drag

* aeaeae

* weh
This commit is contained in:
metalgearsloth
2023-02-14 00:29:34 +11:00
committed by GitHub
parent 4183b5f449
commit c8f89eca60
53 changed files with 936 additions and 1079 deletions

View File

@@ -12,6 +12,8 @@ using Content.Server.MachineLinking.System;
using Content.Server.MachineLinking.Events;
using Content.Server.Cloning.Components;
using Content.Server.Construction;
using Content.Server.Power.EntitySystems;
using Content.Shared.Body.Components;
using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Robust.Server.Containers;
@@ -42,11 +44,26 @@ namespace Content.Server.Medical
SubscribeLocalEvent<MedicalScannerComponent, GetVerbsEvent<InteractionVerb>>(AddInsertOtherVerb);
SubscribeLocalEvent<MedicalScannerComponent, GetVerbsEvent<AlternativeVerb>>(AddAlternativeVerbs);
SubscribeLocalEvent<MedicalScannerComponent, DestructionEventArgs>(OnDestroyed);
SubscribeLocalEvent<MedicalScannerComponent, DragDropEvent>(HandleDragDropOn);
SubscribeLocalEvent<MedicalScannerComponent, DragDropTargetEvent>(OnDragDropOn);
SubscribeLocalEvent<MedicalScannerComponent, PortDisconnectedEvent>(OnPortDisconnected);
SubscribeLocalEvent<MedicalScannerComponent, AnchorStateChangedEvent>(OnAnchorChanged);
SubscribeLocalEvent<MedicalScannerComponent, RefreshPartsEvent>(OnRefreshParts);
SubscribeLocalEvent<MedicalScannerComponent, UpgradeExamineEvent>(OnUpgradeExamine);
SubscribeLocalEvent<MedicalScannerComponent, CanDropTargetEvent>(OnCanDragDropOn);
}
private void OnCanDragDropOn(EntityUid uid, MedicalScannerComponent component, ref CanDropTargetEvent args)
{
args.Handled = true;
args.CanDrop |= CanScannerInsert(uid, args.Dragged, component);
}
public bool CanScannerInsert(EntityUid uid, EntityUid target, MedicalScannerComponent? component = null)
{
if (!Resolve(uid, ref component))
return false;
return HasComp<BodyComponent>(target);
}
private void OnComponentInit(EntityUid uid, MedicalScannerComponent scannerComponent, ComponentInit args)
@@ -58,7 +75,7 @@ namespace Content.Server.Medical
private void OnRelayMovement(EntityUid uid, MedicalScannerComponent scannerComponent, ref ContainerRelayMovementEntityEvent args)
{
if (!_blocker.CanInteract(args.Entity, scannerComponent.Owner))
if (!_blocker.CanInteract(args.Entity, uid))
return;
EjectBody(uid, scannerComponent);
@@ -70,7 +87,7 @@ namespace Content.Server.Medical
!args.CanAccess ||
!args.CanInteract ||
IsOccupied(component) ||
!component.CanInsert(args.Using.Value))
!CanScannerInsert(uid, args.Using.Value, component))
return;
string name = "Unknown";
@@ -79,7 +96,7 @@ namespace Content.Server.Medical
InteractionVerb verb = new()
{
Act = () => InsertBody(component.Owner, args.Target, component),
Act = () => InsertBody(uid, args.Target, component),
Category = VerbCategory.Insert,
Text = name
};
@@ -104,11 +121,11 @@ namespace Content.Server.Medical
// Self-insert verb
if (!IsOccupied(component) &&
component.CanInsert(args.User) &&
CanScannerInsert(uid, args.User, component) &&
_blocker.CanMove(args.User))
{
AlternativeVerb verb = new();
verb.Act = () => InsertBody(component.Owner, args.User, component);
verb.Act = () => InsertBody(uid, args.User, component);
verb.Text = Loc.GetString("medical-scanner-verb-enter");
args.Verbs.Add(verb);
}
@@ -119,7 +136,7 @@ namespace Content.Server.Medical
EjectBody(uid, scannerComponent);
}
private void HandleDragDropOn(EntityUid uid, MedicalScannerComponent scannerComponent, DragDropEvent args)
private void OnDragDropOn(EntityUid uid, MedicalScannerComponent scannerComponent, ref DragDropTargetEvent args)
{
InsertBody(uid, args.Dragged, scannerComponent);
}
@@ -141,9 +158,9 @@ namespace Content.Server.Medical
}
_cloningConsoleSystem.UpdateUserInterface(console);
}
private MedicalScannerStatus GetStatus(MedicalScannerComponent scannerComponent)
private MedicalScannerStatus GetStatus(EntityUid uid, MedicalScannerComponent scannerComponent)
{
if (TryComp<ApcPowerReceiverComponent>(scannerComponent.Owner, out var power) && power.Powered)
if (this.IsPowered(uid, EntityManager))
{
var body = scannerComponent.BodyContainer.ContainedEntity;
if (body == null)
@@ -180,9 +197,9 @@ namespace Content.Server.Medical
private void UpdateAppearance(EntityUid uid, MedicalScannerComponent scannerComponent)
{
if (TryComp<AppearanceComponent>(scannerComponent.Owner, out var appearance))
if (TryComp<AppearanceComponent>(uid, out var appearance))
{
_appearance.SetData(uid, MedicalScannerVisuals.Status, GetStatus(scannerComponent), appearance);
_appearance.SetData(uid, MedicalScannerVisuals.Status, GetStatus(uid, scannerComponent), appearance);
}
}
@@ -210,11 +227,11 @@ namespace Content.Server.Medical
if (scannerComponent.BodyContainer.ContainedEntity != null)
return;
if (!TryComp<MobStateComponent>(user, out var comp))
if (!HasComp<MobStateComponent>(user))
return;
scannerComponent.BodyContainer.Insert(user);
UpdateAppearance(scannerComponent.Owner, scannerComponent);
UpdateAppearance(uid, scannerComponent);
}
public void EjectBody(EntityUid uid, MedicalScannerComponent? scannerComponent)
@@ -222,11 +239,12 @@ namespace Content.Server.Medical
if (!Resolve(uid, ref scannerComponent))
return;
if (scannerComponent.BodyContainer.ContainedEntity is not {Valid: true} contained) return;
if (scannerComponent.BodyContainer.ContainedEntity is not {Valid: true} contained)
return;
scannerComponent.BodyContainer.Remove(contained);
_climbSystem.ForciblySetClimbing(contained, uid);
UpdateAppearance(scannerComponent.Owner, scannerComponent);
UpdateAppearance(uid, scannerComponent);
}
private void OnRefreshParts(EntityUid uid, MedicalScannerComponent component, RefreshPartsEvent args)