zc
This commit is contained in:
@@ -1,15 +1,15 @@
|
||||
using System.Collections.Generic;
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using System.Collections.Generic;
|
||||
|
||||
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
|
||||
@@ -20,14 +20,12 @@ namespace WulaFallenEmpire
|
||||
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];
|
||||
@@ -38,16 +36,20 @@ namespace WulaFallenEmpire
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void SpawnSkyfaller(DelayedSkyfaller delayedSkyfaller)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (delayedSkyfaller.skyfallerDef != null && delayedSkyfaller.targetCell.IsValid && delayedSkyfaller.targetCell.InBounds(map))
|
||||
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)
|
||||
{
|
||||
Skyfaller skyfaller = SkyfallerMaker.MakeSkyfaller(delayedSkyfaller.skyfallerDef);
|
||||
GenSpawn.Spawn(skyfaller, delayedSkyfaller.targetCell, map);
|
||||
Log.Message($"[DelayedSkyfaller] Spawned skyfaller at {delayedSkyfaller.targetCell}");
|
||||
Log.Message($"[DelayedSkyfaller] Spawned '{delayedSkyfaller.skyfallerDef.defName}' at {delayedSkyfaller.targetCell}");
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
@@ -55,21 +57,21 @@ namespace WulaFallenEmpire
|
||||
Log.Error($"[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");
|
||||
@@ -79,3 +81,4 @@ namespace WulaFallenEmpire
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user