Changed Damage Overlay to check Burn Damage (#34535)
* updated BruteLevel to be PainLevel with burn damage checks in DamageOverlayUiController.cs * dehardcoded pain level by adding damage groups to paindamagegroups to affect * re-added the name for painDamageGroups * fixed overlay default and added minimum limit to component check first * renamed to PainDamageGroups and removed obsolete tag
This commit is contained in:
@@ -67,7 +67,7 @@ public sealed class DamageOverlayUiController : UIController
|
|||||||
{
|
{
|
||||||
_overlay.DeadLevel = 0f;
|
_overlay.DeadLevel = 0f;
|
||||||
_overlay.CritLevel = 0f;
|
_overlay.CritLevel = 0f;
|
||||||
_overlay.BruteLevel = 0f;
|
_overlay.PainLevel = 0f;
|
||||||
_overlay.OxygenLevel = 0f;
|
_overlay.OxygenLevel = 0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,13 +95,22 @@ public sealed class DamageOverlayUiController : UIController
|
|||||||
{
|
{
|
||||||
case MobState.Alive:
|
case MobState.Alive:
|
||||||
{
|
{
|
||||||
if (EntityManager.HasComponent<PainNumbnessComponent>(entity))
|
FixedPoint2 painLevel = 0;
|
||||||
|
_overlay.PainLevel = 0;
|
||||||
|
|
||||||
|
if (!EntityManager.HasComponent<PainNumbnessComponent>(entity))
|
||||||
{
|
{
|
||||||
_overlay.BruteLevel = 0;
|
foreach (var painDamageType in damageable.PainDamageGroups)
|
||||||
}
|
{
|
||||||
else if (damageable.DamagePerGroup.TryGetValue("Brute", out var bruteDamage))
|
damageable.DamagePerGroup.TryGetValue(painDamageType, out var painDamage);
|
||||||
{
|
painLevel += painDamage;
|
||||||
_overlay.BruteLevel = FixedPoint2.Min(1f, bruteDamage / critThreshold).Float();
|
}
|
||||||
|
_overlay.PainLevel = FixedPoint2.Min(1f, painLevel / critThreshold).Float();
|
||||||
|
|
||||||
|
if (_overlay.PainLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
|
||||||
|
{
|
||||||
|
_overlay.PainLevel = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (damageable.DamagePerGroup.TryGetValue("Airloss", out var oxyDamage))
|
if (damageable.DamagePerGroup.TryGetValue("Airloss", out var oxyDamage))
|
||||||
@@ -109,11 +118,6 @@ public sealed class DamageOverlayUiController : UIController
|
|||||||
_overlay.OxygenLevel = FixedPoint2.Min(1f, oxyDamage / critThreshold).Float();
|
_overlay.OxygenLevel = FixedPoint2.Min(1f, oxyDamage / critThreshold).Float();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_overlay.BruteLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
|
|
||||||
{
|
|
||||||
_overlay.BruteLevel = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
_overlay.CritLevel = 0;
|
_overlay.CritLevel = 0;
|
||||||
_overlay.DeadLevel = 0;
|
_overlay.DeadLevel = 0;
|
||||||
break;
|
break;
|
||||||
@@ -125,13 +129,13 @@ public sealed class DamageOverlayUiController : UIController
|
|||||||
return;
|
return;
|
||||||
_overlay.CritLevel = critLevel.Value.Float();
|
_overlay.CritLevel = critLevel.Value.Float();
|
||||||
|
|
||||||
_overlay.BruteLevel = 0;
|
_overlay.PainLevel = 0;
|
||||||
_overlay.DeadLevel = 0;
|
_overlay.DeadLevel = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MobState.Dead:
|
case MobState.Dead:
|
||||||
{
|
{
|
||||||
_overlay.BruteLevel = 0;
|
_overlay.PainLevel = 0;
|
||||||
_overlay.CritLevel = 0;
|
_overlay.CritLevel = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ public sealed class DamageOverlay : Overlay
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the red pulsing overlay
|
/// Handles the red pulsing overlay
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public float BruteLevel = 0f;
|
public float PainLevel = 0f;
|
||||||
|
|
||||||
private float _oldBruteLevel = 0f;
|
private float _oldPainLevel = 0f;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the darkening overlay.
|
/// Handles the darkening overlay.
|
||||||
@@ -92,14 +92,14 @@ public sealed class DamageOverlay : Overlay
|
|||||||
DeadLevel = 0f;
|
DeadLevel = 0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!MathHelper.CloseTo(_oldBruteLevel, BruteLevel, 0.001f))
|
if (!MathHelper.CloseTo(_oldPainLevel, PainLevel, 0.001f))
|
||||||
{
|
{
|
||||||
var diff = BruteLevel - _oldBruteLevel;
|
var diff = PainLevel - _oldPainLevel;
|
||||||
_oldBruteLevel += GetDiff(diff, lastFrameTime);
|
_oldPainLevel += GetDiff(diff, lastFrameTime);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_oldBruteLevel = BruteLevel;
|
_oldPainLevel = PainLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!MathHelper.CloseTo(_oldOxygenLevel, OxygenLevel, 0.001f))
|
if (!MathHelper.CloseTo(_oldOxygenLevel, OxygenLevel, 0.001f))
|
||||||
@@ -135,7 +135,7 @@ public sealed class DamageOverlay : Overlay
|
|||||||
|
|
||||||
// Makes debugging easier don't @ me
|
// Makes debugging easier don't @ me
|
||||||
float level = 0f;
|
float level = 0f;
|
||||||
level = _oldBruteLevel;
|
level = _oldPainLevel;
|
||||||
|
|
||||||
// TODO: Lerping
|
// TODO: Lerping
|
||||||
if (level > 0f && _oldCritLevel <= 0f)
|
if (level > 0f && _oldCritLevel <= 0f)
|
||||||
@@ -165,7 +165,7 @@ public sealed class DamageOverlay : Overlay
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_oldBruteLevel = BruteLevel;
|
_oldPainLevel = PainLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
level = State != MobState.Critical ? _oldOxygenLevel : 1f;
|
level = State != MobState.Critical ? _oldOxygenLevel : 1f;
|
||||||
|
|||||||
@@ -65,6 +65,13 @@ namespace Content.Shared.Damage
|
|||||||
[DataField("radiationDamageTypes")]
|
[DataField("radiationDamageTypes")]
|
||||||
public List<ProtoId<DamageTypePrototype>> RadiationDamageTypeIDs = new() { "Radiation" };
|
public List<ProtoId<DamageTypePrototype>> RadiationDamageTypeIDs = new() { "Radiation" };
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Group types that affect the pain overlay.
|
||||||
|
/// </summary>
|
||||||
|
/// TODO: Add support for adding damage types specifically rather than whole damage groups
|
||||||
|
[DataField]
|
||||||
|
public List<ProtoId<DamageGroupPrototype>> PainDamageGroups = new() { "Brute", "Burn" };
|
||||||
|
|
||||||
[DataField]
|
[DataField]
|
||||||
public Dictionary<MobState, ProtoId<HealthIconPrototype>> HealthIcons = new()
|
public Dictionary<MobState, ProtoId<HealthIconPrototype>> HealthIcons = new()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user