using System.Collections.Generic; using Content.Shared.GameObjects; namespace Content.Server.GameObjects { /// /// Defines the threshold values for each damage state for any kind of species /// public abstract class DamageTemplates { public abstract List HealthHudThresholds { get; } /// /// Changes the hud state when a threshold is reached /// /// /// public abstract void ChangeHudState(DamageableComponent damage); //public abstract ResistanceSet resistanceset { get; } /// /// Shows allowed states, ordered by priority, closest to last value to have threshold reached is preferred /// public abstract List<(DamageType, int, ThresholdType)> AllowedStates { get; } /// /// Map of ALL POSSIBLE damage states to the threshold enum value that will trigger them, normal state wont be triggered by this value but is a default that is fell back onto /// public static Dictionary StateThresholdMap = new Dictionary() { { ThresholdType.None, new NormalState() }, { ThresholdType.Critical, new CriticalState() }, { ThresholdType.Death, new DeadState() } }; public List DamageThresholds { get { List thresholds = new List(); foreach (var element in AllowedStates) { thresholds.Add(new DamageThreshold(element.Item1, element.Item2, element.Item3)); } return thresholds; } } public ThresholdType CalculateDamageState(DamageableComponent damage) { ThresholdType healthstate = ThresholdType.None; foreach(var element in AllowedStates) { if(damage.CurrentDamage[element.Item1] >= element.Item2) { healthstate = element.Item3; } } return healthstate; } } }