Fix magic mirror prediction (#27356)

This commit is contained in:
metalgearsloth
2024-04-26 22:37:09 +10:00
committed by GitHub
parent 11227c754c
commit e1a5247770
5 changed files with 36 additions and 20 deletions

View File

@@ -72,9 +72,6 @@ public sealed class MagicMirrorBoundUserInterface : BoundUserInterface
if (!disposing) if (!disposing)
return; return;
if (_window != null)
_window.OnClose -= Close;
_window?.Dispose(); _window?.Dispose();
} }
} }

View File

@@ -0,0 +1,8 @@
using Content.Shared.MagicMirror;
namespace Content.Client.MagicMirror;
public sealed class MagicMirrorSystem : SharedMagicMirrorSystem
{
}

View File

@@ -16,13 +16,12 @@ namespace Content.Server.MagicMirror;
/// <summary> /// <summary>
/// Allows humanoids to change their appearance mid-round. /// Allows humanoids to change their appearance mid-round.
/// </summary> /// </summary>
public sealed class MagicMirrorSystem : EntitySystem public sealed class MagicMirrorSystem : SharedMagicMirrorSystem
{ {
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly DoAfterSystem _doAfterSystem = default!; [Dependency] private readonly DoAfterSystem _doAfterSystem = default!;
[Dependency] private readonly MarkingManager _markings = default!; [Dependency] private readonly MarkingManager _markings = default!;
[Dependency] private readonly HumanoidAppearanceSystem _humanoid = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoid = default!;
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
public override void Initialize() public override void Initialize()
@@ -45,16 +44,6 @@ public sealed class MagicMirrorSystem : EntitySystem
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorChangeColorDoAfterEvent>(OnChangeColorDoAfter); SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorChangeColorDoAfterEvent>(OnChangeColorDoAfter);
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorRemoveSlotDoAfterEvent>(OnRemoveSlotDoAfter); SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorRemoveSlotDoAfterEvent>(OnRemoveSlotDoAfter);
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorAddSlotDoAfterEvent>(OnAddSlotDoAfter); SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorAddSlotDoAfterEvent>(OnAddSlotDoAfter);
SubscribeLocalEvent<MagicMirrorComponent, BoundUserInterfaceCheckRangeEvent>(OnMirrorRangeCheck);
}
private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args)
{
if (!Exists(component.Target) || !_interaction.InRangeUnobstructed(uid, component.Target.Value))
{
args.Result = BoundUserInterfaceRangeResult.Fail;
}
} }
private void OnMagicMirrorInteract(Entity<MagicMirrorComponent> mirror, ref AfterInteractEvent args) private void OnMagicMirrorInteract(Entity<MagicMirrorComponent> mirror, ref AfterInteractEvent args)
@@ -309,12 +298,15 @@ public sealed class MagicMirrorSystem : EntitySystem
facialHair, facialHair,
humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count); humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count);
// TODO: Component states
component.Target = targetUid; component.Target = targetUid;
_uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state); _uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state);
Dirty(mirrorUid, component);
} }
private void OnUiClosed(Entity<MagicMirrorComponent> ent, ref BoundUIClosedEvent args) private void OnUiClosed(Entity<MagicMirrorComponent> ent, ref BoundUIClosedEvent args)
{ {
ent.Comp.Target = null; ent.Comp.Target = null;
Dirty(ent);
} }
} }

View File

@@ -1,13 +1,13 @@
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.Humanoid;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.GameStates;
namespace Content.Server.MagicMirror; namespace Content.Shared.MagicMirror;
/// <summary> /// <summary>
/// Allows humanoids to change their appearance mid-round. /// Allows humanoids to change their appearance mid-round.
/// </summary> /// </summary>
[RegisterComponent] [RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class MagicMirrorComponent : Component public sealed partial class MagicMirrorComponent : Component
{ {
[DataField] [DataField]
@@ -16,7 +16,7 @@ public sealed partial class MagicMirrorComponent : Component
/// <summary> /// <summary>
/// Magic mirror target, used for validating UI messages. /// Magic mirror target, used for validating UI messages.
/// </summary> /// </summary>
[DataField] [DataField, AutoNetworkedField]
public EntityUid? Target; public EntityUid? Target;
/// <summary> /// <summary>

View File

@@ -1,10 +1,29 @@
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Markings;
using Robust.Shared.Player; using Content.Shared.Interaction;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
namespace Content.Shared.MagicMirror; namespace Content.Shared.MagicMirror;
public abstract class SharedMagicMirrorSystem : EntitySystem
{
[Dependency] private readonly SharedInteractionSystem _interaction = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<MagicMirrorComponent, BoundUserInterfaceCheckRangeEvent>(OnMirrorRangeCheck);
}
private void OnMirrorRangeCheck(EntityUid uid, MagicMirrorComponent component, ref BoundUserInterfaceCheckRangeEvent args)
{
if (!Exists(component.Target) || !_interaction.InRangeUnobstructed(uid, component.Target.Value))
{
args.Result = BoundUserInterfaceRangeResult.Fail;
}
}
}
[Serializable, NetSerializable] [Serializable, NetSerializable]
public enum MagicMirrorUiKey : byte public enum MagicMirrorUiKey : byte
{ {