using Content.Shared.Interaction;
using Content.Shared.UserInterface;
using Robust.Shared.Serialization;
-using Robust.Shared.Utility;
namespace Content.Shared.MagicMirror;
base.Initialize();
SubscribeLocalEvent<MagicMirrorComponent, AfterInteractEvent>(OnMagicMirrorInteract);
SubscribeLocalEvent<MagicMirrorComponent, BeforeActivatableUIOpenEvent>(OnBeforeUIOpen);
+ SubscribeLocalEvent<MagicMirrorComponent, ActivatableUIOpenAttemptEvent>(OnAttemptOpenUI);
SubscribeLocalEvent<MagicMirrorComponent, BoundUserInterfaceCheckRangeEvent>(OnMirrorRangeCheck);
}
if (!args.CanReach || args.Target == null)
return;
- if (!UISystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User))
- return;
-
UpdateInterface(mirror, args.Target.Value, mirror);
+ UISystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User);
}
private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args)
if (args.Result == BoundUserInterfaceRangeResult.Fail)
return;
- DebugTools.Assert(component.Target != null && Exists(component.Target));
+ if (component.Target == null || !Exists(component.Target))
+ {
+ component.Target = null;
+ args.Result = BoundUserInterfaceRangeResult.Fail;
+ return;
+ }
if (!_interaction.InRangeUnobstructed(uid, component.Target.Value))
args.Result = BoundUserInterfaceRangeResult.Fail;
}
- private void OnBeforeUIOpen(Entity<MagicMirrorComponent> ent, ref BeforeActivatableUIOpenEvent args)
+ private void OnAttemptOpenUI(EntityUid uid, MagicMirrorComponent component, ref ActivatableUIOpenAttemptEvent args)
{
- if (args.User != ent.Comp.Target && ent.Comp.Target != null)
- return;
+ var user = component.Target ?? args.User;
+ if (!HasComp<HumanoidAppearanceComponent>(user))
+ args.Cancel();
+ }
+
+ private void OnBeforeUIOpen(Entity<MagicMirrorComponent> ent, ref BeforeActivatableUIOpenEvent args)
+ {
UpdateInterface(ent, args.User, ent);
}
{
if (!TryComp<HumanoidAppearanceComponent>(targetUid, out var humanoid))
return;
+
component.Target ??= targetUid;
var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings)