diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll
index 9311a00..426b9e4 100644
Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ
diff --git a/1.6/1.6/Defs/JobDefs/ARA_Jobs.xml b/1.6/1.6/Defs/JobDefs/ARA_Jobs.xml
new file mode 100644
index 0000000..d75811e
--- /dev/null
+++ b/1.6/1.6/Defs/JobDefs/ARA_Jobs.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ ARA_IncubateJob
+ ArachnaeSwarm.JobDriver_Incubate
+ incubating TargetA.
+
+
+
\ No newline at end of file
diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml
index f5c49aa..8ba7ec0 100644
--- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml
+++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ArachnaeSwarm_Keys.xml
@@ -2,5 +2,6 @@
孵化 {0}
+ 未孵化,需要阿拉克涅女皇种交互
\ No newline at end of file
diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
index 06bdd65..943fcf2 100644
--- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
+++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
@@ -70,6 +70,7 @@
+
diff --git a/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs b/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs
index 14ae742..efef87f 100644
--- a/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs
+++ b/Source/ArachnaeSwarm/CompProperties_SpawnPawnFromList.cs
@@ -11,6 +11,7 @@ namespace ArachnaeSwarm
public List whitelist;
public int delay = 0;
public bool destroyOnSpawn = false;
+ public IntRange spawnCount = new IntRange(1, 1);
public Type lordJob;
public CompProperties_SpawnPawnFromList()
diff --git a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs
index d12c483..07027e4 100644
--- a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs
+++ b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs
@@ -1,16 +1,18 @@
using System.Collections.Generic;
using Verse;
using RimWorld;
+using Verse.AI;
using Verse.AI.Group;
namespace ArachnaeSwarm
{
public class CompSpawnPawnFromList : ThingComp
{
- private CompProperties_SpawnPawnFromList Props => (CompProperties_SpawnPawnFromList)props;
+ public CompProperties_SpawnPawnFromList Props => (CompProperties_SpawnPawnFromList)props;
private int spawnUntilTick = -1;
private PawnKindDef spawningPawnKind;
+ private PawnKindDef selectedPawnKind;
public override IEnumerable CompFloatMenuOptions(Pawn selPawn)
{
@@ -30,15 +32,17 @@ namespace ArachnaeSwarm
{
yield return new FloatMenuOption("ARA_Incubate".Translate(pawnKind.label), () =>
{
- StartDelayedSpawn(pawnKind);
+ Job job = JobMaker.MakeJob(DefDatabase.GetNamed("ARA_IncubateJob"), parent);
+ selectedPawnKind = pawnKind;
+ selPawn.jobs.TryTakeOrderedJob(job);
});
}
}
}
- private void StartDelayedSpawn(PawnKindDef pawnKind)
+ public void StartIncubation()
{
- spawningPawnKind = pawnKind;
+ spawningPawnKind = selectedPawnKind;
spawnUntilTick = Find.TickManager.TicksGame + Props.delay;
}
@@ -115,9 +119,16 @@ namespace ArachnaeSwarm
if (spawnUntilTick > 0)
{
int remainingTicks = spawnUntilTick - Find.TickManager.TicksGame;
- return $"Spawning in: {remainingTicks.ToStringTicksToPeriod()}";
+ if (remainingTicks > 0)
+ {
+ return "Spawning {0} in: {1}".Translate(spawningPawnKind.label, remainingTicks.ToStringTicksToPeriod());
+ }
}
- return base.CompInspectStringExtra();
+ else
+ {
+ return "ARA_NeedsInteraction".Translate();
+ }
+ return null;
}
public override void PostExposeData()
diff --git a/Source/ArachnaeSwarm/JobDriver_Incubate.cs b/Source/ArachnaeSwarm/JobDriver_Incubate.cs
new file mode 100644
index 0000000..4dfaf70
--- /dev/null
+++ b/Source/ArachnaeSwarm/JobDriver_Incubate.cs
@@ -0,0 +1,36 @@
+using System.Collections.Generic;
+using Verse;
+using Verse.AI;
+
+namespace ArachnaeSwarm
+{
+ public class JobDriver_Incubate : JobDriver
+ {
+ private const TargetIndex EggSacInd = TargetIndex.A;
+ private const TargetIndex PawnKindInd = TargetIndex.B;
+
+ public override bool TryMakePreToilReservations(bool errorOnFailed)
+ {
+ return pawn.Reserve(job.GetTarget(EggSacInd), job, 1, -1, null, errorOnFailed);
+ }
+
+ protected override IEnumerable MakeNewToils()
+ {
+ this.FailOnDespawnedNullOrForbidden(EggSacInd);
+
+ yield return Toils_Goto.GotoThing(EggSacInd, PathEndMode.Touch);
+
+ Toil incubate = new Toil();
+ incubate.initAction = () =>
+ {
+ CompSpawnPawnFromList comp = job.GetTarget(EggSacInd).Thing.TryGetComp();
+ if (comp != null)
+ {
+ comp.StartIncubation();
+ }
+ };
+ incubate.defaultCompleteMode = ToilCompleteMode.Instant;
+ yield return incubate;
+ }
+ }
+}
\ No newline at end of file