* #272 add bordered panel for effects bar * #272 avoid mouse overlapping tooltip when near edges, change tooltip colors to match mockups * #272 WIP defining status effect states as YML and sending them as encoded integers * #272 refactor to use new alert system * #272 refactor to use new alert system * #272 fix various bugs with new alert system and update alerts to have color * #272 WIP * #272 rename status effects to alerts * #272 WIP reworking alert internals to avoid code dup and eliminate enum * #272 refactor alerts to use categories and fix various bugs * #272 more alert bugfixes * #272 alert ordering * #272 callback-based approach for alert clicks * #272 add debug commands for alerts * #272 utilize new GridContainer capabilities for sizing of alerts tab * #272 scale alerts height based on window size * #272 fix tooltip flicker * #272 transparent alert panel * #272 adjust styles to match injazz mockups more, add cooldown info in tooltip * #272 adjust styles to match injazz mockups more, add cooldown info in tooltip * #272 alert prototype tests * #272 alert manager tests * #272 alert order tests * #272 simple unit test for alerts component * #272 integration test for alerts * #272 rework alerts to use enums instead of id / category * #272 various cleanups for PR * #272 use byte for more compact alert messages * #272 rename StatusEffects folder to Alerts, add missing NetSerializable
72 lines
2.3 KiB
C#
72 lines
2.3 KiB
C#
using System.Collections.Generic;
|
|
using Content.Shared.Alert;
|
|
using Content.Shared.GameObjects.Components.Damage;
|
|
using Content.Shared.GameObjects.Components.Mobs;
|
|
using Content.Shared.GameObjects.Components.Mobs.State;
|
|
using Robust.Shared.GameObjects;
|
|
|
|
namespace Content.Server.GameObjects.Components.Mobs.State
|
|
{
|
|
[RegisterComponent]
|
|
[ComponentReference(typeof(SharedMobStateManagerComponent))]
|
|
public class MobStateManagerComponent : SharedMobStateManagerComponent
|
|
{
|
|
private readonly Dictionary<DamageState, IMobState> _behavior = new Dictionary<DamageState, IMobState>
|
|
{
|
|
{DamageState.Alive, new NormalState()},
|
|
{DamageState.Critical, new CriticalState()},
|
|
{DamageState.Dead, new DeadState()}
|
|
};
|
|
|
|
private DamageState _currentDamageState;
|
|
|
|
protected override IReadOnlyDictionary<DamageState, IMobState> Behavior => _behavior;
|
|
|
|
public override IMobState CurrentMobState { get; protected set; }
|
|
|
|
public override DamageState CurrentDamageState
|
|
{
|
|
get => _currentDamageState;
|
|
protected set
|
|
{
|
|
if (_currentDamageState == value)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_currentDamageState != DamageState.Invalid)
|
|
{
|
|
CurrentMobState.ExitState(Owner);
|
|
}
|
|
|
|
_currentDamageState = value;
|
|
CurrentMobState = Behavior[CurrentDamageState];
|
|
CurrentMobState.EnterState(Owner);
|
|
|
|
Dirty();
|
|
}
|
|
}
|
|
|
|
public override void OnRemove()
|
|
{
|
|
// TODO: Might want to add an OnRemove() to IMobState since those are where these components are being used
|
|
base.OnRemove();
|
|
|
|
if (Owner.TryGetComponent(out ServerAlertsComponent status))
|
|
{
|
|
status.ClearAlert(AlertType.HumanHealth);
|
|
}
|
|
|
|
if (Owner.TryGetComponent(out ServerOverlayEffectsComponent overlay))
|
|
{
|
|
overlay.ClearOverlays();
|
|
}
|
|
}
|
|
|
|
public override ComponentState GetComponentState()
|
|
{
|
|
return new MobStateManagerComponentState(CurrentDamageState);
|
|
}
|
|
}
|
|
}
|