using System.Linq;
using Content.Server.DoAfter;
using Content.Server.Humanoid;
-using Content.Shared.UserInterface;
using Content.Shared.DoAfter;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings;
public override void Initialize()
{
base.Initialize();
- SubscribeLocalEvent<MagicMirrorComponent, ActivatableUIOpenAttemptEvent>(OnOpenUIAttempt);
Subs.BuiEvents<MagicMirrorComponent>(MagicMirrorUiKey.Key,
subs =>
subs.Event<MagicMirrorRemoveSlotMessage>(OnTryMagicMirrorRemoveSlot);
});
- SubscribeLocalEvent<MagicMirrorComponent, AfterInteractEvent>(OnMagicMirrorInteract);
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorSelectDoAfterEvent>(OnSelectSlotDoAfter);
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorChangeColorDoAfterEvent>(OnChangeColorDoAfter);
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorAddSlotDoAfterEvent>(OnAddSlotDoAfter);
}
- private void OnMagicMirrorInteract(Entity<MagicMirrorComponent> mirror, ref AfterInteractEvent args)
- {
- if (!args.CanReach || args.Target == null)
- return;
-
- if (!_uiSystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User))
- return;
-
- UpdateInterface(mirror.Owner, args.Target.Value, mirror.Comp);
- }
-
- private void OnOpenUIAttempt(EntityUid uid, MagicMirrorComponent mirror, ActivatableUIOpenAttemptEvent args)
- {
- if (!HasComp<HumanoidAppearanceComponent>(args.User))
- args.Cancel();
- }
-
private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, MagicMirrorSelectMessage message)
{
if (component.Target is not { } target)
BreakOnMove = true,
BreakOnHandChange = false,
NeedHand = true
- }, out var doAfterId);
+ },
+ out var doAfterId);
component.DoAfter = doAfterId;
_audio.PlayPvs(component.ChangeHairSound, uid);
BreakOnMove = true,
BreakOnHandChange = false,
NeedHand = true
- }, out var doAfterId);
+ },
+ out var doAfterId);
component.DoAfter = doAfterId;
}
BreakOnDamage = true,
BreakOnHandChange = false,
NeedHand = true
- }, out var doAfterId);
+ },
+ out var doAfterId);
component.DoAfter = doAfterId;
_audio.PlayPvs(component.ChangeHairSound, uid);
BreakOnMove = true,
BreakOnHandChange = false,
NeedHand = true
- }, out var doAfterId);
+ },
+ out var doAfterId);
component.DoAfter = doAfterId;
_audio.PlayPvs(component.ChangeHairSound, uid);
public abstract class SharedMagicMirrorSystem : EntitySystem
{
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
- [Dependency] protected readonly SharedUserInterfaceSystem _uiSystem = default!;
+ [Dependency] protected readonly SharedUserInterfaceSystem UISystem = default!;
public override void Initialize()
{
base.Initialize();
+ SubscribeLocalEvent<MagicMirrorComponent, AfterInteractEvent>(OnMagicMirrorInteract);
SubscribeLocalEvent<MagicMirrorComponent, BeforeActivatableUIOpenEvent>(OnBeforeUIOpen);
SubscribeLocalEvent<MagicMirrorComponent, BoundUserInterfaceCheckRangeEvent>(OnMirrorRangeCheck);
}
+ private void OnMagicMirrorInteract(Entity<MagicMirrorComponent> mirror, ref AfterInteractEvent args)
+ {
+ if (!args.CanReach || args.Target == null)
+ return;
+
+ if (!UISystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User))
+ return;
+
+ UpdateInterface(mirror, args.Target.Value, mirror);
+ }
+
private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args)
{
if (args.Result == BoundUserInterfaceRangeResult.Fail)
private void OnBeforeUIOpen(Entity<MagicMirrorComponent> ent, ref BeforeActivatableUIOpenEvent args)
{
- ent.Comp.Target ??= args.User;
+ if (args.User != ent.Comp.Target && ent.Comp.Target != null)
+ return;
+
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)
? new List<Marking>(hairMarkings)
// TODO: Component states
component.Target = targetUid;
- _uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state);
+ UISystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state);
Dirty(mirrorUid, component);
}
}