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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user