Files
WulaFallenEmpireRW/Source/WulaFallenEmpire/Hediff_EmergencyEnergyRestore.cs
2025-07-21 13:45:52 +08:00

71 lines
2.2 KiB
C#

using RimWorld;
using Verse;
namespace WulaFallenEmpire
{
public class Hediff_EmergencyEnergyRestore : HediffWithComps
{
private float originalEnergyLevel = 0f;
private bool hasStoredOriginalLevel = false;
public override void PostAdd(DamageInfo? dinfo)
{
base.PostAdd(dinfo);
// 存储原始能量水平
var energyNeed = pawn.needs?.TryGetNeed<Need_WulaEnergy>();
if (energyNeed != null)
{
originalEnergyLevel = energyNeed.CurLevel;
hasStoredOriginalLevel = true;
// 立即将能量设置为100%
energyNeed.CurLevel = 1.0f;
if (Prefs.DevMode)
{
Log.Message($"[EmergencyEnergyRestore] Stored original energy: {originalEnergyLevel:F2}, set to 1.0");
}
}
}
public override void PostRemoved()
{
base.PostRemoved();
// 恢复原始能量水平
if (hasStoredOriginalLevel)
{
var energyNeed = pawn.needs?.TryGetNeed<Need_WulaEnergy>();
if (energyNeed != null)
{
energyNeed.CurLevel = originalEnergyLevel;
if (Prefs.DevMode)
{
Log.Message($"[EmergencyEnergyRestore] Restored energy to: {originalEnergyLevel:F2}");
}
}
}
}
public override void Tick()
{
base.Tick();
// 确保能量保持在100%
var energyNeed = pawn.needs?.TryGetNeed<Need_WulaEnergy>();
if (energyNeed != null && energyNeed.CurLevel < 1.0f)
{
energyNeed.CurLevel = 1.0f;
}
}
public override void ExposeData()
{
base.ExposeData();
Scribe_Values.Look(ref originalEnergyLevel, "originalEnergyLevel", 0f);
Scribe_Values.Look(ref hasStoredOriginalLevel, "hasStoredOriginalLevel", false);
}
}
}