Fix hunger + thirst mispredicts (#36549)
* Fix hunger + thirst mispredicts * Review
This commit is contained in:
@@ -123,6 +123,7 @@ public sealed class HungerSystem : EntitySystem
|
|||||||
entity.Comp.LastAuthoritativeHungerChangeTime = _timing.CurTime;
|
entity.Comp.LastAuthoritativeHungerChangeTime = _timing.CurTime;
|
||||||
entity.Comp.LastAuthoritativeHungerValue = ClampHungerWithinThresholds(entity.Comp, value);
|
entity.Comp.LastAuthoritativeHungerValue = ClampHungerWithinThresholds(entity.Comp, value);
|
||||||
DirtyField(entity.Owner, entity.Comp, nameof(HungerComponent.LastAuthoritativeHungerChangeTime));
|
DirtyField(entity.Owner, entity.Comp, nameof(HungerComponent.LastAuthoritativeHungerChangeTime));
|
||||||
|
DirtyField(entity.Owner, entity.Comp, nameof(HungerComponent.LastAuthoritativeHungerValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateCurrentThreshold(EntityUid uid, HungerComponent? component = null)
|
private void UpdateCurrentThreshold(EntityUid uid, HungerComponent? component = null)
|
||||||
@@ -135,6 +136,7 @@ public sealed class HungerSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
component.CurrentThreshold = calculatedHungerThreshold;
|
component.CurrentThreshold = calculatedHungerThreshold;
|
||||||
|
DirtyField(uid, component, nameof(HungerComponent.CurrentThreshold));
|
||||||
DoHungerThresholdEffects(uid, component);
|
DoHungerThresholdEffects(uid, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,10 +165,12 @@ public sealed class HungerSystem : EntitySystem
|
|||||||
if (component.HungerThresholdDecayModifiers.TryGetValue(component.CurrentThreshold, out var modifier))
|
if (component.HungerThresholdDecayModifiers.TryGetValue(component.CurrentThreshold, out var modifier))
|
||||||
{
|
{
|
||||||
component.ActualDecayRate = component.BaseDecayRate * modifier;
|
component.ActualDecayRate = component.BaseDecayRate * modifier;
|
||||||
|
DirtyField(uid, component, nameof(HungerComponent.ActualDecayRate));
|
||||||
SetAuthoritativeHungerValue((uid, component), GetHunger(component));
|
SetAuthoritativeHungerValue((uid, component), GetHunger(component));
|
||||||
}
|
}
|
||||||
|
|
||||||
component.LastThreshold = component.CurrentThreshold;
|
component.LastThreshold = component.CurrentThreshold;
|
||||||
|
DirtyField(uid, component, nameof(HungerComponent.LastThreshold));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DoContinuousHungerEffects(EntityUid uid, HungerComponent? component = null)
|
private void DoContinuousHungerEffects(EntityUid uid, HungerComponent? component = null)
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ public sealed class ThirstSystem : EntitySystem
|
|||||||
component.CurrentThirst = _random.Next(
|
component.CurrentThirst = _random.Next(
|
||||||
(int) component.ThirstThresholds[ThirstThreshold.Thirsty] + 10,
|
(int) component.ThirstThresholds[ThirstThreshold.Thirsty] + 10,
|
||||||
(int) component.ThirstThresholds[ThirstThreshold.Okay] - 1);
|
(int) component.ThirstThresholds[ThirstThreshold.Okay] - 1);
|
||||||
|
|
||||||
|
DirtyField(uid, component, nameof(ThirstComponent.CurrentThirst));
|
||||||
}
|
}
|
||||||
component.NextUpdateTime = _timing.CurTime;
|
component.NextUpdateTime = _timing.CurTime;
|
||||||
component.CurrentThirstThreshold = GetThirstThreshold(component, component.CurrentThirst);
|
component.CurrentThirstThreshold = GetThirstThreshold(component, component.CurrentThirst);
|
||||||
@@ -56,6 +58,8 @@ public sealed class ThirstSystem : EntitySystem
|
|||||||
// TODO: Check all thresholds make sense and throw if they don't.
|
// TODO: Check all thresholds make sense and throw if they don't.
|
||||||
UpdateEffects(uid, component);
|
UpdateEffects(uid, component);
|
||||||
|
|
||||||
|
DirtyFields(uid, component, null, nameof(ThirstComponent.NextUpdateTime), nameof(ThirstComponent.CurrentThirstThreshold), nameof(ThirstComponent.LastThirstThreshold));
|
||||||
|
|
||||||
TryComp(uid, out MovementSpeedModifierComponent? moveMod);
|
TryComp(uid, out MovementSpeedModifierComponent? moveMod);
|
||||||
_movement.RefreshMovementSpeedModifiers(uid, moveMod);
|
_movement.RefreshMovementSpeedModifiers(uid, moveMod);
|
||||||
}
|
}
|
||||||
@@ -103,7 +107,7 @@ public sealed class ThirstSystem : EntitySystem
|
|||||||
component.ThirstThresholds[ThirstThreshold.OverHydrated]
|
component.ThirstThresholds[ThirstThreshold.OverHydrated]
|
||||||
);
|
);
|
||||||
|
|
||||||
EntityManager.DirtyField(uid, component, nameof(ThirstComponent.CurrentThirst));
|
DirtyField(uid, component, nameof(ThirstComponent.CurrentThirst));
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsMovementThreshold(ThirstThreshold threshold)
|
private bool IsMovementThreshold(ThirstThreshold threshold)
|
||||||
@@ -164,6 +168,9 @@ public sealed class ThirstSystem : EntitySystem
|
|||||||
_alerts.ClearAlertCategory(uid, component.ThirstyCategory);
|
_alerts.ClearAlertCategory(uid, component.ThirstyCategory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DirtyField(uid, component, nameof(ThirstComponent.LastThirstThreshold));
|
||||||
|
DirtyField(uid, component, nameof(ThirstComponent.ActualDecayRate));
|
||||||
|
|
||||||
switch (component.CurrentThirstThreshold)
|
switch (component.CurrentThirstThreshold)
|
||||||
{
|
{
|
||||||
case ThirstThreshold.OverHydrated:
|
case ThirstThreshold.OverHydrated:
|
||||||
|
|||||||
Reference in New Issue
Block a user