Files
ProjectKoi-Kalo\Kalo 98a0400c78 WulaFallenEmpireSettings.cs - 添加了 public bool enableDebugLogs = false; 字段和保存配置
 WulaLog.cs - 修改了DebugEnabled属性,仅检查enableDebugLogs设置(不检查DevMode)
 WulaFallenEmpireMod.cs - 在DoSettingsWindowContents中添加了UI复选框,显示"Enable Debug Logs"选项
 替换了所有848个Log.Message/Error/Warning调用为WulaLog.Debug()
2025-12-15 13:05:50 +08:00

85 lines
2.7 KiB
C#

using System.Collections.Generic;
using RimWorld;
using Verse;
namespace WulaFallenEmpire
{
public class MapComponent_SkyfallerDelayed : MapComponent
{
private List<DelayedSkyfaller> scheduledSkyfallers = new List<DelayedSkyfaller>();
public MapComponent_SkyfallerDelayed(Map map) : base(map) { }
public void ScheduleSkyfaller(ThingDef skyfallerDef, IntVec3 targetCell, int delayTicks, Pawn caster = null)
{
scheduledSkyfallers.Add(new DelayedSkyfaller
{
skyfallerDef = skyfallerDef,
targetCell = targetCell,
spawnTick = Find.TickManager.TicksGame + delayTicks,
caster = caster
});
}
public override void MapComponentTick()
{
base.MapComponentTick();
int currentTick = Find.TickManager.TicksGame;
for (int i = scheduledSkyfallers.Count - 1; i >= 0; i--)
{
var skyfaller = scheduledSkyfallers[i];
if (currentTick >= skyfaller.spawnTick)
{
SpawnSkyfaller(skyfaller);
scheduledSkyfallers.RemoveAt(i);
}
}
}
private void SpawnSkyfaller(DelayedSkyfaller delayedSkyfaller)
{
try
{
if (delayedSkyfaller.skyfallerDef == null) return;
if (!delayedSkyfaller.targetCell.IsValid || !delayedSkyfaller.targetCell.InBounds(map)) return;
Skyfaller skyfaller = SkyfallerMaker.MakeSkyfaller(delayedSkyfaller.skyfallerDef);
GenSpawn.Spawn(skyfaller, delayedSkyfaller.targetCell, map);
if (Prefs.DevMode)
{
WulaLog.Debug($"[DelayedSkyfaller] Spawned '{delayedSkyfaller.skyfallerDef.defName}' at {delayedSkyfaller.targetCell}");
}
}
catch (System.Exception ex)
{
WulaLog.Debug($"[DelayedSkyfaller] Error spawning skyfaller: {ex}");
}
}
public override void ExposeData()
{
base.ExposeData();
Scribe_Collections.Look(ref scheduledSkyfallers, "scheduledSkyfallers", LookMode.Deep);
}
}
public class DelayedSkyfaller : IExposable
{
public ThingDef skyfallerDef;
public IntVec3 targetCell;
public int spawnTick;
public Pawn caster;
public void ExposeData()
{
Scribe_Defs.Look(ref skyfallerDef, "skyfallerDef");
Scribe_Values.Look(ref targetCell, "targetCell");
Scribe_Values.Look(ref spawnTick, "spawnTick");
Scribe_References.Look(ref caster, "caster");
}
}
}