using System; public class SurvivalState { private const float HungerDrainPerSecond = 0.035f; private const float ThirstDrainPerSecond = 0.055f; private const float PassiveEnergyDrainPerSecond = 0.025f; private const float AutoConsumeThreshold = 35f; public float hunger = 100f; public float thirst = 100f; public float energy = 100f; public float maxHunger = 100f; public float maxThirst = 100f; public float maxEnergy = 100f; public bool isDead = false; public string deathReason = ""; public string currentStatus = ""; public void Update(double delta) { if (isDead) return; hunger = Math.Clamp(hunger - HungerDrainPerSecond * (float)delta, 0f, maxHunger); thirst = Math.Clamp(thirst - ThirstDrainPerSecond * (float)delta, 0f, maxThirst); energy = Math.Clamp(energy - PassiveEnergyDrainPerSecond * (float)delta, 0f, maxEnergy); TryAutoConsumeFood(); TryAutoConsumeWater(); TryAutoConsumeEnergy(); UpdateStatus(); CheckDeath(); } public bool TryConsumeEnergy(float amount) { if (amount <= 0f) return true; if (energy < amount) return false; energy -= amount; return true; } private void TryAutoConsumeFood() { if (hunger > AutoConsumeThreshold) return; if (!GameData.inventory.TryRemoveItem("mushroom", 1)) return; hunger = Math.Clamp(hunger + 35f, 0f, maxHunger); } private void TryAutoConsumeWater() { if (thirst > AutoConsumeThreshold) return; if (!GameData.inventory.TryRemoveItem("water", 1)) return; thirst = Math.Clamp(thirst + 40f, 0f, maxThirst); } private void TryAutoConsumeEnergy() { if (energy > AutoConsumeThreshold) return; if (GameData.inventory.TryRemoveItem("battery_v2", 1)) { energy = Math.Clamp(energy + 70f, 0f, maxEnergy); return; } if (GameData.inventory.TryRemoveItem("battery_v1", 1)) { energy = Math.Clamp(energy + 45f, 0f, maxEnergy); return; } if (GameData.inventory.TryRemoveItem("steam", 1)) { energy = Math.Clamp(energy + 25f, 0f, maxEnergy); } } private void UpdateStatus() { if (hunger <= AutoConsumeThreshold) { currentStatus = "Food supply critical"; return; } if (thirst <= AutoConsumeThreshold) { currentStatus = "Water supply critical"; return; } if (energy <= AutoConsumeThreshold) { currentStatus = "Energy reserves critical"; return; } currentStatus = "Survival stable"; } private void CheckDeath() { if (hunger <= 0f) { KillPlayer("Starved"); return; } if (thirst <= 0f) { KillPlayer("Died of thirst"); return; } if (energy <= 0f) { KillPlayer("Life support lost power"); } } private void KillPlayer(string reason) { isDead = true; deathReason = reason; currentStatus = "Survival failed: " + reason; GameData.canMove = false; } }