Delta-v/Content.Shared/_RMC14/Examine/Pose/SharedRMCSetPoseSystem.cs

65 lines
1.8 KiB
C#

using Content.Shared.Examine;
using Content.Shared.Mobs;
using Content.Shared.Verbs;
using Robust.Shared.Utility;
namespace Content.Shared._RMC14.Examine.Pose;
public abstract class SharedRMCSetPoseSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<RMCSetPoseComponent, GetVerbsEvent<Verb>>(OnSetPoseGetVerbs);
SubscribeLocalEvent<RMCSetPoseComponent, ExaminedEvent>(OnExamine);
SubscribeLocalEvent<RMCSetPoseComponent, MobStateChangedEvent>(OnMobStateChanged);
}
private void OnSetPoseGetVerbs(Entity<RMCSetPoseComponent> ent, ref GetVerbsEvent<Verb> args)
{
if (!args.CanInteract)
return;
if (args.User != args.Target)
return;
Verb verb = new()
{
Text = Loc.GetString("rmc-set-pose-title"),
Icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/character.svg.192dpi.png")),
Priority = -5,
Act = () => SetPose(ent),
};
args.Verbs.Add(verb);
}
private void OnExamine(Entity<RMCSetPoseComponent> ent, ref ExaminedEvent args)
{
var comp = ent.Comp;
if (comp.Pose.Trim() == string.Empty)
return;
using (args.PushGroup(nameof(RMCSetPoseComponent)))
{
var pose = Loc.GetString("rmc-set-pose-examined", ("ent", ent), ("pose", comp.Pose));
args.PushMarkup(pose, -5);
}
}
private void OnMobStateChanged(Entity<RMCSetPoseComponent> ent, ref MobStateChangedEvent args)
{
if (args.NewMobState == MobState.Alive)
return;
ent.Comp.Pose = string.Empty; // reset the pose on death/crit
Dirty(ent);
}
protected virtual void SetPose(Entity<RMCSetPoseComponent> ent)
{
}
}