Mobstate Refactor (#13389)

Refactors mobstate and moves mob health thresholds to their own component

Co-authored-by: DrSmugleaf <drsmugleaf@gmail.com>
This commit is contained in:
Jezithyr
2023-01-13 16:57:10 -08:00
committed by GitHub
parent 97e4c477bd
commit eeb5b17b34
148 changed files with 1517 additions and 1290 deletions

View File

@@ -1,8 +1,8 @@
using Content.Server.Mind.Components;
using Content.Server.Revenant.Components;
using Content.Shared.Examine;
using Content.Shared.MobState;
using Content.Shared.MobState.Components;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared.Revenant.Components;
using Robust.Shared.Random;
@@ -20,13 +20,18 @@ public sealed class EssenceSystem : EntitySystem
{
base.Initialize();
SubscribeLocalEvent<EssenceComponent, ComponentStartup>(UpdateEssenceAmount);
SubscribeLocalEvent<EssenceComponent, MobStateChangedEvent>(UpdateEssenceAmount);
SubscribeLocalEvent<EssenceComponent, MindAddedMessage>(UpdateEssenceAmount);
SubscribeLocalEvent<EssenceComponent, MindRemovedMessage>(UpdateEssenceAmount);
SubscribeLocalEvent<EssenceComponent, ComponentStartup>(OnEssenceEventReceived);
SubscribeLocalEvent<EssenceComponent, MobStateChangedEvent>(OnMobstateChanged);
SubscribeLocalEvent<EssenceComponent, MindAddedMessage>(OnEssenceEventReceived);
SubscribeLocalEvent<EssenceComponent, MindRemovedMessage>(OnEssenceEventReceived);
SubscribeLocalEvent<EssenceComponent, ExaminedEvent>(OnExamine);
}
private void OnMobstateChanged(EntityUid uid, EssenceComponent component, MobStateChangedEvent args)
{
UpdateEssenceAmount(uid, component);
}
private void OnExamine(EntityUid uid, EssenceComponent component, ExaminedEvent args)
{
if (!component.SearchComplete || !HasComp<RevenantComponent>(args.Examiner))
@@ -49,23 +54,28 @@ public sealed class EssenceSystem : EntitySystem
args.PushMarkup(Loc.GetString(message, ("target", uid)));
}
private void UpdateEssenceAmount(EntityUid uid, EssenceComponent component, EntityEventArgs args)
private void OnEssenceEventReceived(EntityUid uid, EssenceComponent component, EntityEventArgs args)
{
UpdateEssenceAmount(uid, component);
}
private void UpdateEssenceAmount(EntityUid uid, EssenceComponent component)
{
if (!TryComp<MobStateComponent>(uid, out var mob))
return;
switch (mob.CurrentState)
{
case DamageState.Alive:
case MobState.Alive:
if (TryComp<MindComponent>(uid, out var mind) && mind.Mind != null)
component.EssenceAmount = _random.NextFloat(75f, 100f);
else
component.EssenceAmount = _random.NextFloat(45f, 70f);
break;
case DamageState.Critical:
case MobState.Critical:
component.EssenceAmount = _random.NextFloat(35f, 50f);
break;
case DamageState.Dead:
case MobState.Dead:
component.EssenceAmount = _random.NextFloat(15f, 20f);
break;
}