using Content.Shared.Examine;
using Content.Shared.Power.EntitySystems;
using Content.Shared.Weapons.Melee.Components;
using Content.Shared.Weapons.Melee.Events;
using JetBrains.Annotations;
namespace Content.Shared.Weapons.Melee;
///
/// This system handles showing how many more times a weapon can hit things before the battery is depleted.
///
public sealed partial class MeleeBatteryHitsLeftSystem : EntitySystem
{
[Dependency] private SharedBatterySystem _battery = default!;
[Dependency] private EntityQuery _query = default!;
[SubscribeLocalEvent]
private void OnInit(Entity ent, ref MapInitEvent args)
{
UpdateHitPowerCost(ent.AsNullable());
}
[SubscribeLocalEvent]
private void OnExamined(Entity ent, ref ExaminedEvent args)
{
var count = _battery.GetRemainingUses(ent.Owner, ent.Comp.HitPowerCost);
args.PushMarkup(Loc.GetString(ent.Comp.ExamineText, ("color", ent.Comp.Color), ("count", count)));
}
///
/// Updates how much battery power it costs to hit with this weapon.
///
/// The entity to update for.
[PublicAPI]
public void UpdateHitPowerCost(Entity ent)
{
if (!_query.Resolve(ent, ref ent.Comp, false))
return;
var ev = new ModifyHitPowerCostEvent();
RaiseLocalEvent(ent, ref ev);
ent.Comp.HitPowerCost = ev.Cost;
DirtyField(ent, nameof(MeleeBatteryHitsLeftComponent.HitPowerCost));
}
}