diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index a9797aa..ebf8a25 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/CompGestalt.cs b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/CompGestalt.cs index 5477779..e6302d1 100644 --- a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/CompGestalt.cs +++ b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/CompGestalt.cs @@ -46,6 +46,8 @@ namespace ArachnaeSwarm { Pawn pawn = parent as Pawn; if (pawn == null) return; + Pawn_GestaltTracker tracker = GestaltTracker; + if (tracker == null) return; // 查找所有有 GestaltOverseer 关系的 pawn List relations = pawn.relations.DirectRelations; @@ -56,7 +58,10 @@ namespace ArachnaeSwarm Pawn hiveNode = relation.otherPawn; if (hiveNode != null && hiveNode.IsGestaltNode(GestaltNodeType.HiveNode)) { - GestaltTracker?.AssignPawnToControlGroup(hiveNode); + if (tracker.GetControlGroup(hiveNode) == null) + { + tracker.AssignPawnToControlGroup(hiveNode); + } } } } @@ -76,6 +81,17 @@ namespace ArachnaeSwarm yield return gizmo; } } + + public override void CompTick() + { + base.CompTick(); + + Pawn pawn = parent as Pawn; + if (pawn == null || !pawn.IsGestaltNode(GestaltNodeType.OverlordNode)) + return; + + GestaltTracker?.GameComponentTick(); + } public override void PostExposeData() { diff --git a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/GestaltUtility.cs b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/GestaltUtility.cs index de1d1c0..8718c28 100644 --- a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/GestaltUtility.cs +++ b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/GestaltUtility.cs @@ -9,12 +9,19 @@ namespace ArachnaeSwarm { public static Pawn GetOverlord(this Pawn pawn) { + if (pawn?.relations == null) + return null; + List relations = pawn.relations.DirectRelations; for (int i = 0; i < relations.Count; i++) { if (relations[i].def == ARA_PawnRelationDefOf.ARA_GestaltOverseer) { - return relations[i].otherPawn; + Pawn otherPawn = relations[i].otherPawn; + if (otherPawn != null && otherPawn.IsGestaltNode(GestaltNodeType.OverlordNode)) + { + return otherPawn; + } } } return null; @@ -45,4 +52,4 @@ namespace ArachnaeSwarm } } } -} \ No newline at end of file +} diff --git a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/HediffComp_GestaltNode.cs b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/HediffComp_GestaltNode.cs index 023f31e..7dcb654 100644 --- a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/HediffComp_GestaltNode.cs +++ b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/HediffComp_GestaltNode.cs @@ -43,7 +43,7 @@ namespace ArachnaeSwarm if (tracker == null && NodeType == GestaltNodeType.OverlordNode) { - tracker = new Pawn_GestaltTracker(); + tracker = new Pawn_GestaltTracker(Pawn); } return tracker; } diff --git a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/Pawn_GestaltTracker.cs b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/Pawn_GestaltTracker.cs index 26305ab..6232dc1 100644 --- a/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/Pawn_GestaltTracker.cs +++ b/Source/ArachnaeSwarm/Hediffs/ARA_GestaltNode/Pawn_GestaltTracker.cs @@ -141,7 +141,8 @@ namespace ArachnaeSwarm if (!groupToRemove.AssignedPawns.NullOrEmpty()) { // 将pawn重新分配到其他组 - foreach (Pawn pawn in groupToRemove.AssignedPawns) + List pawnsToReassign = groupToRemove.AssignedPawns.ToList(); + foreach (Pawn pawn in pawnsToReassign) { if (controlGroups.Count > 1) { @@ -153,6 +154,8 @@ namespace ArachnaeSwarm controlGroups.RemoveAt(controlGroups.Count - 1); } } + + Notify_BandwidthChanged(); } public void Notify_BandwidthChanged()