Fix magic mirror (#28084)

* Fix magic mirror

* buff magic mirror
This commit is contained in:
Nemanja
2024-05-19 18:35:55 -04:00
committed by GitHub
parent b7eed5c348
commit a30fb2661f
4 changed files with 45 additions and 32 deletions

View File

@@ -7,9 +7,7 @@ using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Markings;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.MagicMirror; using Content.Shared.MagicMirror;
using Robust.Server.GameObjects;
using Robust.Shared.Audio.Systems; using Robust.Shared.Audio.Systems;
using Robust.Shared.Player;
namespace Content.Server.MagicMirror; namespace Content.Server.MagicMirror;
@@ -22,14 +20,14 @@ public sealed class MagicMirrorSystem : SharedMagicMirrorSystem
[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 UserInterfaceSystem _uiSystem = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<MagicMirrorComponent, ActivatableUIOpenAttemptEvent>(OnOpenUIAttempt); SubscribeLocalEvent<MagicMirrorComponent, ActivatableUIOpenAttemptEvent>(OnOpenUIAttempt);
Subs.BuiEvents<MagicMirrorComponent>(MagicMirrorUiKey.Key, subs => Subs.BuiEvents<MagicMirrorComponent>(MagicMirrorUiKey.Key,
subs =>
{ {
subs.Event<BoundUIClosedEvent>(OnUiClosed); subs.Event<BoundUIClosedEvent>(OnUiClosed);
subs.Event<MagicMirrorSelectMessage>(OnMagicMirrorSelect); subs.Event<MagicMirrorSelectMessage>(OnMagicMirrorSelect);
@@ -278,32 +276,6 @@ public sealed class MagicMirrorSystem : SharedMagicMirrorSystem
} }
private void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component)
{
if (!TryComp<HumanoidAppearanceComponent>(targetUid, out var humanoid))
return;
var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings)
? new List<Marking>(hairMarkings)
: new();
var facialHair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.FacialHair, out var facialHairMarkings)
? new List<Marking>(facialHairMarkings)
: new();
var state = new MagicMirrorUiState(
humanoid.Species,
hair,
humanoid.MarkingSet.PointsLeft(MarkingCategories.Hair) + hair.Count,
facialHair,
humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count);
// TODO: Component states
component.Target = targetUid;
_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;

View File

@@ -47,5 +47,5 @@ public sealed partial class MagicMirrorComponent : Component
/// Sound emitted when slots are changed /// Sound emitted when slots are changed
/// </summary> /// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public SoundSpecifier ChangeHairSound = new SoundPathSpecifier("/Audio/Items/scissors.ogg"); public SoundSpecifier? ChangeHairSound = new SoundPathSpecifier("/Audio/Items/scissors.ogg");
} }

View File

@@ -1,6 +1,8 @@
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings; using Content.Shared.Humanoid.Markings;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.UserInterface;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
namespace Content.Shared.MagicMirror; namespace Content.Shared.MagicMirror;
@@ -8,10 +10,12 @@ namespace Content.Shared.MagicMirror;
public abstract class SharedMagicMirrorSystem : EntitySystem public abstract class SharedMagicMirrorSystem : EntitySystem
{ {
[Dependency] private readonly SharedInteractionSystem _interaction = default!; [Dependency] private readonly SharedInteractionSystem _interaction = default!;
[Dependency] protected readonly SharedUserInterfaceSystem _uiSystem = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<MagicMirrorComponent, BeforeActivatableUIOpenEvent>(OnBeforeUIOpen);
SubscribeLocalEvent<MagicMirrorComponent, BoundUserInterfaceCheckRangeEvent>(OnMirrorRangeCheck); SubscribeLocalEvent<MagicMirrorComponent, BoundUserInterfaceCheckRangeEvent>(OnMirrorRangeCheck);
} }
@@ -22,6 +26,38 @@ public abstract class SharedMagicMirrorSystem : EntitySystem
args.Result = BoundUserInterfaceRangeResult.Fail; args.Result = BoundUserInterfaceRangeResult.Fail;
} }
} }
private void OnBeforeUIOpen(Entity<MagicMirrorComponent> ent, ref BeforeActivatableUIOpenEvent args)
{
ent.Comp.Target ??= args.User;
UpdateInterface(ent, args.User, ent);
}
protected void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component)
{
if (!TryComp<HumanoidAppearanceComponent>(targetUid, out var humanoid))
return;
var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings)
? new List<Marking>(hairMarkings)
: new();
var facialHair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.FacialHair, out var facialHairMarkings)
? new List<Marking>(facialHairMarkings)
: new();
var state = new MagicMirrorUiState(
humanoid.Species,
hair,
humanoid.MarkingSet.PointsLeft(MarkingCategories.Hair) + hair.Count,
facialHair,
humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count);
// TODO: Component states
component.Target = targetUid;
_uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state);
Dirty(mirrorUid, component);
}
} }
[Serializable, NetSerializable] [Serializable, NetSerializable]

View File

@@ -11,7 +11,12 @@
- type: Clickable - type: Clickable
- type: Transform - type: Transform
anchored: true anchored: true
- type: MagicMirror - type: MagicMirror #instant and silent
changeHairSound: null
addSlotTime: 0
removeSlotTime: 0
selectSlotTime: 0
changeSlotTime: 0
- type: ActivatableUI - type: ActivatableUI
key: enum.MagicMirrorUiKey.Key key: enum.MagicMirrorUiKey.Key
- type: UserInterface - type: UserInterface