diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index a73e712..54bcdbf 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/EvolutionDefs/ARA_Evolution.xml b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml index 0e2a17a..31c3503 100644 --- a/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml +++ b/1.6/1.6/Defs/EvolutionDefs/ARA_Evolution.xml @@ -401,7 +401,7 @@
  • ArachnaeBase_Race_Acidcut 4 - 1000 + 250
  • @@ -638,7 +638,7 @@
  • ArachnaeBase_Race_Baneling 4 - 600 + 200
  • @@ -1051,7 +1051,7 @@
  • ArachnaeBase_Race_Acidcut 4 - 1000 + 200
  • @@ -1238,7 +1238,7 @@
  • ArachnaeBase_Race_Skyhive 4 - 800 + 200
  • @@ -1348,7 +1348,7 @@
  • ArachnaeBase_Race_Skyhive 8 - 400 + 200
  • @@ -1471,7 +1471,7 @@
  • ArachnaeBase_Race_Empsuicider 3 - 500 + 200
  • @@ -1528,15 +1528,10 @@
  • -
  • - ArachnaeBase_Race_Acidcut - 3 - 500 -
  • ArachnaeBase_Race_Locust - 2 - 700 + 5 + 300
  • diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml index 5179525..13ffd01 100644 --- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml +++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceBaseSwarm.xml @@ -290,11 +290,6 @@ true true -
  • - ARA_Cleaning - true - true -
  • Haul true diff --git a/1.6/1.6/Defs/Thing_building/ARA_Ootheca.xml b/1.6/1.6/Defs/Thing_building/ARA_Ootheca.xml index 1a4b2f1..ae29c16 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_Ootheca.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_Ootheca.xml @@ -61,7 +61,7 @@ 10 - 3 + 1 @@ -115,7 +115,8 @@ - 25 + 50 + 1 @@ -131,6 +132,7 @@
  • 25.0 + 1
  • ARA_InsectJelly
  • @@ -139,7 +141,7 @@ 虫蜜 true true - 5 + 25 true
  • @@ -276,7 +278,7 @@ - 25 + 50 @@ -290,6 +292,7 @@
  • 25.0 + 1
  • ARA_InsectJelly
  • diff --git a/1.6/1.6/Defs/Thing_building/ARA_Vat.xml b/1.6/1.6/Defs/Thing_building/ARA_Vat.xml index df67c59..8ae2512 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_Vat.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_Vat.xml @@ -77,7 +77,7 @@ ARA_RefuelingVat 一个特殊的活体建筑,可以置入阿拉克涅虫群的俘虏,使用缓慢而痛苦的方式提取其遗传物质,将其转换为精华素以供虫群使用。\n\n——怎么采集的你别问。 - ArachnaeSwarm.Building_CorpseVat + ArachnaeSwarm.Building_RefuelingVat true Normal @@ -182,7 +182,7 @@
    -
  • +
  • ArachnaeSwarm/Building/ARA_RefuelingVatTop diff --git a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml index a8133aa..ee3927b 100644 --- a/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml +++ b/1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml @@ -263,6 +263,7 @@
  • Idle +
  • @@ -663,6 +664,7 @@
  • Idle +
  • @@ -888,6 +890,7 @@
  • Idle +
  • @@ -1248,6 +1251,8 @@
  • Idle +
  • +
  • @@ -1522,6 +1527,7 @@
  • Idle +
  • @@ -1792,6 +1798,13 @@
  • + +
  • + +
  • + +
  • +
  • 0.15 @@ -1825,6 +1838,7 @@
  • Idle +
  • @@ -2131,6 +2145,7 @@
  • Idle +
  • @@ -2405,6 +2420,7 @@
  • Idle +
  • @@ -2679,6 +2695,7 @@
  • Idle +
  • @@ -2986,6 +3003,7 @@
  • Idle +
  • diff --git a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ARA_Building_Ootheca.xml b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ARA_Building_Ootheca.xml index 2811907..e306ce4 100644 --- a/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ARA_Building_Ootheca.xml +++ b/1.6/1.6/Languages/ChineseSimplified (简体中文)/Keyed/ARA_Building_Ootheca.xml @@ -245,4 +245,19 @@ 【就绪】 孵化时间: {0} 【未选择目标】\n点击标题选择孵化目标 + + {0}/{1} 选中 + 为 {0} 个选中的卵设置孵化目标 + 为 {0} 个卵选择孵化目标 + 清除选择 + 已为 {0} 个卵设置目标: {1} + 已清除 {0} 个卵的目标 + 已为 {0} 个卵呼叫幼虫 + 已取消 {0} 个卵的孵化 + 没有可用的目标 + + + 多选 ({0}个) + 还有 {0} 个建筑... + 空闲 diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo index 109b496..e9c2625 100644 Binary files a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo and b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/.suo differ diff --git a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json index 48d2466..320b115 100644 --- a/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json +++ b/Source/ArachnaeSwarm/.vs/ArachnaeSwarm/v17/DocumentLayout.json @@ -1,45 +1,69 @@ { "Version": 1, - "WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", + "WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_corpsevat\\building_corpsevat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_corpsevat\\building_corpsevat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_corpsevat\\corpsevatextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_corpsevat\\corpsevatextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, - { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|e:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_ootheca\\building_ootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_ootheca\\building_ootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\building_ootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_plant\\jobgiver_grower.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\ara_configurablemutant\\necrotictransformationutility.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_configurablemutant\\necrotictransformationutility.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_nodeswarmlifetime\\compnodeswarmlifetime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_nodeswarmlifetime\\compnodeswarmlifetime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_ootheca\\gizmo_queuedincubationprogress.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\gizmo_queuedincubationprogress.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_ootheca\\gizmo_pawnprogressbar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\gizmo_pawnprogressbar.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_ootheca\\gizmo_neutronflux.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_ootheca\\gizmo_neutronflux.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_equipmentootheca\\building_equipmentootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_equipmentootheca\\building_equipmentootheca.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\buildings\\building_corpsevat\\building_corpsevat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_corpsevat\\building_corpsevat.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\buildings\\building_corpsevat\\corpsevatextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:buildings\\building_corpsevat\\corpsevatextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_plant\\jobgiver_grower.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_plant\\jobgiver_grower.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_clean\\jobgiver_cleaner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\jobs\\jobdriver_clean\\jobgiver_cleaner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:jobs\\jobdriver_clean\\jobgiver_cleaner.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\abilities\\ara_huggingface\\hediff_possession.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\abilities\\ara_huggingface\\hediff_possession.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_huggingface\\hediff_possession.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\abilities\\ara_huggingface\\compabilityeffect_possess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\abilities\\ara_huggingface\\compabilityeffect_possess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_huggingface\\compabilityeffect_possess.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\building_comps\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_buildingterrainspawn\\compdelayedterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_hediffterrainspawn\\compproperties_hediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_hediffterrainspawn\\compproperties_hediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hediffterrainspawn\\compproperties_hediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, { - "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_hediffterrainspawn\\comphediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\hediffs\\ara_hediffterrainspawn\\comphediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hediffterrainspawn\\comphediffterrainspawn.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" } ], @@ -50,45 +74,123 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 2, + "SelectedChildIndex": 6, "Children": [ + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "NecroticTransformationUtility.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ConfigurableMutant\\NecroticTransformationUtility.cs", + "RelativeDocumentMoniker": "Hediffs\\ARA_ConfigurableMutant\\NecroticTransformationUtility.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_ConfigurableMutant\\NecroticTransformationUtility.cs", + "RelativeToolTip": "Hediffs\\ARA_ConfigurableMutant\\NecroticTransformationUtility.cs", + "ViewState": "AgIAAA8AAAAAAAAAAAAtwCIAAAAcAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-26T08:44:42.184Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "CompNodeSwarmLifetime.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "RelativeDocumentMoniker": "Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "RelativeToolTip": "Pawn_Comps\\ARA_NodeSwarmLifetime\\CompNodeSwarmLifetime.cs", + "ViewState": "AgIAADYAAAAAAAAAAAAtwEoAAAAbAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-26T08:44:35.266Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "Gizmo_QueuedIncubationProgress.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Gizmo_QueuedIncubationProgress.cs", + "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\Gizmo_QueuedIncubationProgress.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Gizmo_QueuedIncubationProgress.cs", + "RelativeToolTip": "Buildings\\Building_Ootheca\\Gizmo_QueuedIncubationProgress.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAuAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-26T08:11:04.23Z", + "EditorCaption": "" + }, { "$type": "Bookmark", "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}" }, { "$type": "Document", - "DocumentIndex": 1, - "Title": "CorpseVatExtension.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", - "RelativeDocumentMoniker": "Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", - "RelativeToolTip": "Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", - "ViewState": "AgIAAAAAAAAAAAAAAADwvx0AAAAoAAAAAAAAAA==", + "DocumentIndex": 4, + "Title": "Gizmo_PawnProgressBar.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Gizmo_PawnProgressBar.cs", + "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\Gizmo_PawnProgressBar.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Gizmo_PawnProgressBar.cs", + "RelativeToolTip": "Buildings\\Building_Ootheca\\Gizmo_PawnProgressBar.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAmAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-01-23T10:25:01.777Z", + "WhenOpened": "2026-01-26T08:12:03.772Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "Gizmo_NeutronFlux.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Gizmo_NeutronFlux.cs", + "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\Gizmo_NeutronFlux.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Gizmo_NeutronFlux.cs", + "RelativeToolTip": "Buildings\\Building_Ootheca\\Gizmo_NeutronFlux.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAiAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-26T08:11:53.324Z", "EditorCaption": "" }, { "$type": "Document", "DocumentIndex": 0, + "Title": "Building_Ootheca.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", + "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\Building_Ootheca.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", + "RelativeToolTip": "Buildings\\Building_Ootheca\\Building_Ootheca.cs", + "ViewState": "AgIAABEBAAAAAAAAAAAswCoBAAAkAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-23T08:31:14.555Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "Building_EquipmentOotheca.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "RelativeDocumentMoniker": "Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "RelativeToolTip": "Buildings\\Building_EquipmentOotheca\\Building_EquipmentOotheca.cs", + "ViewState": "AgIAAEIBAAAAAAAAAAAAAEMBAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-26T07:52:41.869Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, "Title": "Building_CorpseVat.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\Building_CorpseVat.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\Building_CorpseVat.cs", "RelativeDocumentMoniker": "Buildings\\Building_CorpseVat\\Building_CorpseVat.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\Building_CorpseVat.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\Building_CorpseVat.cs", "RelativeToolTip": "Buildings\\Building_CorpseVat\\Building_CorpseVat.cs", - "ViewState": "AgIAAKAAAAAAAAAAAAAlwMkAAABLAAAAAAAAAA==", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAASAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2026-01-23T10:24:46.264Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 9, "Title": "JobGiver_Grower.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Plant\\JobGiver_Grower.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Plant\\JobGiver_Grower.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_Plant\\JobGiver_Grower.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Plant\\JobGiver_Grower.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Plant\\JobGiver_Grower.cs", "RelativeToolTip": "Jobs\\JobDriver_Plant\\JobGiver_Grower.cs", "ViewState": "AgIAAFMAAAAAAAAAAAAQwGkAAAANAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -96,11 +198,11 @@ }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 11, "Title": "Hediff_Possession.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\Hediff_Possession.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\Hediff_Possession.cs", "RelativeDocumentMoniker": "Abilities\\ARA_HuggingFace\\Hediff_Possession.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\Hediff_Possession.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\Hediff_Possession.cs", "RelativeToolTip": "Abilities\\ARA_HuggingFace\\Hediff_Possession.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -108,11 +210,11 @@ }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 12, "Title": "CompAbilityEffect_Possess.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs", "RelativeDocumentMoniker": "Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs", "RelativeToolTip": "Abilities\\ARA_HuggingFace\\CompAbilityEffect_Possess.cs", "ViewState": "AgIAAHcAAAAAAAAAAAAAAIkAAAA5AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -120,24 +222,23 @@ }, { "$type": "Document", - "DocumentIndex": 2, - "Title": "Building_Ootheca.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", - "RelativeDocumentMoniker": "Buildings\\Building_Ootheca\\Building_Ootheca.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_Ootheca\\Building_Ootheca.cs", - "RelativeToolTip": "Buildings\\Building_Ootheca\\Building_Ootheca.cs", - "ViewState": "AgIAABoBAAAAAAAAAAAvwEUBAAAIAAAAAAAAAA==", + "DocumentIndex": 8, + "Title": "CorpseVatExtension.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", + "RelativeDocumentMoniker": "Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", + "RelativeToolTip": "Buildings\\Building_CorpseVat\\CorpseVatExtension.cs", + "ViewState": "AgIAAAAAAAAAAAAAAADwvx0AAAAoAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2026-01-23T08:31:14.555Z", - "EditorCaption": "" + "WhenOpened": "2026-01-23T10:25:01.777Z" }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 13, "Title": "CompDelayedTerrainSpawn.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", "RelativeDocumentMoniker": "Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", "RelativeToolTip": "Building_Comps\\ARA_BuildingTerrainSpawn\\CompDelayedTerrainSpawn.cs", "ViewState": "AgIAAFEAAAAAAAAAAAAAAF8AAAA+AAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -145,11 +246,11 @@ }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 14, "Title": "CompProperties_HediffTerrainSpawn.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompProperties_HediffTerrainSpawn.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompProperties_HediffTerrainSpawn.cs", "RelativeDocumentMoniker": "Hediffs\\ARA_HediffTerrainSpawn\\CompProperties_HediffTerrainSpawn.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompProperties_HediffTerrainSpawn.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompProperties_HediffTerrainSpawn.cs", "RelativeToolTip": "Hediffs\\ARA_HediffTerrainSpawn\\CompProperties_HediffTerrainSpawn.cs", "ViewState": "AgIAAAUAAAAAAAAAAAAtwBkAAAAxAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -157,11 +258,11 @@ }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 10, "Title": "JobGiver_Cleaner.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Clean\\JobGiver_Cleaner.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Clean\\JobGiver_Cleaner.cs", "RelativeDocumentMoniker": "Jobs\\JobDriver_Clean\\JobGiver_Cleaner.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Clean\\JobGiver_Cleaner.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Jobs\\JobDriver_Clean\\JobGiver_Cleaner.cs", "RelativeToolTip": "Jobs\\JobDriver_Clean\\JobGiver_Cleaner.cs", "ViewState": "AgIAAAAAAAAAAAAAAAAAABYAAABwAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", @@ -169,11 +270,11 @@ }, { "$type": "Document", - "DocumentIndex": 9, + "DocumentIndex": 15, "Title": "CompHediffTerrainSpawn.cs", - "DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", + "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", "RelativeDocumentMoniker": "Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", - "ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", + "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", "RelativeToolTip": "Hediffs\\ARA_HediffTerrainSpawn\\CompHediffTerrainSpawn.cs", "ViewState": "AgIAAKIAAAAAAAAAAAAawLQAAAAMAAAAAAAAAA==", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", diff --git a/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs b/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs index 786d289..13521dc 100644 --- a/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs +++ b/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Building_Ootheca.cs @@ -212,26 +212,6 @@ namespace ArachnaeSwarm // 如果选择了多个,检查是否有其他卵已经启动召唤 if (selectedOothecas.Count > 1) { - // 检查是否有其他卵已经分配了幼虫 - foreach (var ootheca in selectedOothecas) - { - if (ootheca != this && ootheca.assignedLarva != null) - { - // 已经有其他卵开始召唤幼虫了,跳过 - return; - } - } - - // 检查是否有其他卵已经处于孵化状态 - foreach (var ootheca in selectedOothecas) - { - if (ootheca != this && ootheca.isIncubating) - { - // 已经有其他卵在孵化了,跳过 - return; - } - } - // 如果是同时按下gizmo,我们希望只有一个卵响应 // 我们可以使用一个简单的规则:只让最近选择的一个卵响应 // 这里我们选择第一个(可能是玩家最后点击的,取决于选择顺序) @@ -311,6 +291,10 @@ namespace ArachnaeSwarm { if (pawn.def.defName == "ArachnaeBase_Race_Larva" && !pawn.Downed && !pawn.Dead) { + if (pawn.CurJobDef.defName == "ARA_OperateIncubator") + { + continue; + } if (Position.DistanceTo(pawn.Position) <= searchRadius) return pawn; } @@ -575,92 +559,285 @@ namespace ArachnaeSwarm } return sb.ToString().TrimEndNewlines(); } - public override IEnumerable GetGizmos() { - foreach (var gizmo in base.GetGizmos()) - { - if (gizmo is Command_Action cmd && cmd.defaultLabel != null) - { - string label = cmd.defaultLabel.ToString(); - if (label.Contains("拆除") || label.Contains("Deconstruct") || label.Contains("半径") || label.Contains("Radius")) - continue; - } - - // 强制将基础组件(如 Refuelable)甚至默认排序为 -100 的东西移到后面 - if (gizmo.Order >= -100f && gizmo.Order <= 0f) - { - gizmo.Order = -90f; - } - - yield return gizmo; - } + // 首先获取选中的同类建筑 + var selectedOothecas = GetSelectedOothecas(); + bool isMultiSelect = selectedOothecas.Count > 1; if (Faction == Faction.OfPlayer) { - yield return new Gizmo_PawnProgressBar(this); - yield return new Gizmo_NeutronFlux(this); - - var config = IncubatorData?.SelectedConfig; - - // 添加订单按钮(未孵化且未选目标,或已选目标但支持切换) - if (!isIncubating && assignedLarva == null) + // 在多选时,只在第一个建筑上显示进度条和通量条 + if (!isMultiSelect || (isMultiSelect && selectedOothecas.First() == this)) { - yield return new Command_Action - { - defaultLabel = "ARA_Gizmo_AddOrder".Translate(config != null ? 1 : 0, 1), - defaultDesc = "ARA_Gizmo_AddOrderDesc_Pawn".Translate(), - icon = ContentFinder.Get("ArachnaeSwarm/UI/Commands/ARA_NodeSwarmIcon", false), - action = () => IncubatorData?.ShowFloatMenu(), - Order = 100f - }; + yield return new Gizmo_PawnProgressBar(this); + yield return new Gizmo_NeutronFlux(this); } - // 呼叫幼虫按钮逻辑 + var config = IncubatorData?.SelectedConfig; + + // 添加订单按钮(多选时合并) + if (!isIncubating && assignedLarva == null) + { + // 多选时,只在第一个建筑上显示 + if (!isMultiSelect || (isMultiSelect && selectedOothecas.First() == this)) + { + // 计算多选时的计数 + int selectedCount = selectedOothecas.Count(o => !o.isIncubating && o.assignedLarva == null); + int selectedWithConfig = selectedOothecas.Count(o => + !o.isIncubating && o.assignedLarva == null && o.IncubatorData?.SelectedConfig != null); + + string label = isMultiSelect + ? $"ARA_Gizmo_AddOrder_Multi".Translate(selectedWithConfig, selectedCount) + : "ARA_Gizmo_AddOrder".Translate(config != null ? 1 : 0, 1); + + string desc = isMultiSelect + ? "ARA_Gizmo_AddOrderDesc_Multi".Translate(selectedCount) + : "ARA_Gizmo_AddOrderDesc_Pawn".Translate(); + + yield return new Command_Action + { + defaultLabel = label, + defaultDesc = desc, + icon = ContentFinder.Get("ArachnaeSwarm/UI/Commands/ARA_NodeSwarmIcon", false), + action = () => ShowMultiSelectOrderMenu(selectedOothecas), + Order = 100f + }; + } + } + // 呼叫幼虫按钮逻辑(多选时同样处理) if (!isIncubating && config != null && config.IsResearchComplete) { if (assignedLarva == null) { - // 无幼虫,可以呼叫 - yield return new Command_Action + // 多选时只在第一个建筑上显示,但会为所有符合条件的建筑呼叫幼虫 + if (!isMultiSelect || (isMultiSelect && selectedOothecas.First() == this)) { - defaultLabel = "ARA_Gizmo_CallLarva".Translate(), - defaultDesc = BuildCallLarvaDescription(config), - icon = ContentFinder.Get("ArachnaeSwarm/UI/Commands/ARA_CallLarva", false), - action = CallLarva, - Order = 100f - }; + yield return new Command_Action + { + defaultLabel = "ARA_Gizmo_CallLarva".Translate(), + defaultDesc = BuildCallLarvaDescription(config), + icon = ContentFinder.Get("ArachnaeSwarm/UI/Commands/ARA_CallLarva", false), + action = () => CallLarvaForMultiSelect(selectedOothecas), + Order = 100f + }; + } } else { // 幼虫在路上或工作中 - string statusText = larvaOperateTicksRemaining > 0 - ? "ARA_Gizmo_LarvaActivating".Translate() + string statusText = larvaOperateTicksRemaining > 0 + ? "ARA_Gizmo_LarvaActivating".Translate() : "ARA_Gizmo_LarvaOnTheWay".Translate(); - yield return new Command_Action + + if (!isMultiSelect || (isMultiSelect && selectedOothecas.First() == this)) { - defaultLabel = statusText, - defaultDesc = "ARA_Gizmo_LarvaWorkingDesc".Translate(0), - icon = ContentFinder.Get("ArachnaeSwarm/UI/Commands/ARA_CallLarva", false), - Disabled = true, - Order = 100f - }; + yield return new Command_Action + { + defaultLabel = statusText, + defaultDesc = "ARA_Gizmo_LarvaWorkingDesc".Translate(0), + icon = ContentFinder.Get("ArachnaeSwarm/UI/Commands/ARA_CallLarva", false), + Disabled = true, + Order = 100f + }; + } } } - - if (isIncubating) + // 取消孵化按钮 + if (isIncubating && (!isMultiSelect || (isMultiSelect && selectedOothecas.First() == this))) { yield return new Command_Action { defaultLabel = "ARA_OothecaIncubator.CancelIncubation".Translate(), icon = ContentFinder.Get("UI/Commands/Cancel", false), - action = CancelIncubation, + action = () => CancelIncubationForMultiSelect(selectedOothecas), Order = 100f }; } } } + /// + /// 为多选建筑显示订单菜单 + /// + private void ShowMultiSelectOrderMenu(List oothecas) + { + if (oothecas == null || oothecas.Count == 0) + return; + // 获取第一个建筑的配置列表(假设所有建筑的配置相同) + var configs = IncubatorData?.IncubationConfigs; + if (configs == null || configs.Count == 0) + return; + + List options = new List(); + + // 添加清除选项 + options.Add(new FloatMenuOption( + "ARA_Menu_ClearSelection".Translate(), + () => ClearSelectionForMultiSelect(oothecas), + MenuOptionPriority.High + )); + + options.Add(new FloatMenuOption( + "--------------------", + null + )); + + // 添加配置选项 + for (int i = 0; i < configs.Count; i++) + { + var cfg = configs[i]; + int index = i; + + string label = cfg.pawnKind.LabelCap; + + if (cfg.requiredResearch != null && !cfg.requiredResearch.IsFinished) + { + label += " (" + "ARA_Menu_RequiresResearch".Translate(cfg.requiredResearch.LabelCap) + ")"; + options.Add(new FloatMenuOption(label, null)); + } + else + { + label += " (" + "ARA_Menu_Days".Translate(cfg.daysRequired.ToString("F1")) + ")"; + options.Add(new FloatMenuOption( + label, + () => SetConfigForMultiSelect(oothecas, index, cfg) + )); + } + } + + Find.WindowStack.Add(new FloatMenu(options, "ARA_Menu_SelectIncubationTarget_Multi".Translate(oothecas.Count))); + } + /// + /// 为多个建筑设置配置 + /// + private void SetConfigForMultiSelect(List oothecas, int configIndex, IncubationConfig config) + { + int successCount = 0; + + foreach (var ootheca in oothecas) + { + // 只对未孵化的建筑设置 + if (!ootheca.isIncubating && ootheca.assignedLarva == null) + { + ootheca.IncubatorData?.SwitchToConfig(configIndex); + successCount++; + } + } + + if (successCount > 0) + { + Messages.Message("ARA_Msg_MultiSelectConfigSet".Translate(successCount, config.pawnKind.LabelCap), + MessageTypeDefOf.PositiveEvent); + } + } + /// + /// 为多个建筑清除选择 + /// + private void ClearSelectionForMultiSelect(List oothecas) + { + int clearedCount = 0; + + foreach (var ootheca in oothecas) + { + if (!ootheca.isIncubating && ootheca.assignedLarva == null) + { + ootheca.IncubatorData?.SwitchToConfig(-1); + clearedCount++; + } + } + + if (clearedCount > 0) + { + Messages.Message("ARA_Msg_MultiSelectConfigCleared".Translate(clearedCount), + MessageTypeDefOf.NeutralEvent); + } + } + /// + /// 为多个建筑呼叫幼虫 + /// + private void CallLarvaForMultiSelect(List oothecas) + { + int calledCount = 0; + List calledOothecas = new List(); + + // 按位置排序,确保按顺序呼叫 + var sortedOothecas = oothecas + .Where(o => !o.isIncubating && o.assignedLarva == null && o.IncubatorData?.SelectedConfig != null) + .OrderBy(o => o.Position.x).ThenBy(o => o.Position.z) + .ToList(); + + foreach (var ootheca in sortedOothecas) + { + // 确保不会为同一个建筑多次呼叫 + if (ootheca.CallLarvaIfPossible()) + { + calledOothecas.Add(ootheca); + calledCount++; + + // 可以添加延迟,避免同时呼叫多个幼虫 + // 但保持简单,让它们同时尝试 + } + } + + if (calledCount > 0) + { + Messages.Message("ARA_Msg_MultiCallLarva".Translate(calledCount), + MessageTypeDefOf.PositiveEvent); + } + else + { + Messages.Message("ARA_OothecaIncubator.NoValidTargets".Translate(), + MessageTypeDefOf.RejectInput); + } + } + /// + /// 为多个建筑取消孵化 + /// + private void CancelIncubationForMultiSelect(List oothecas) + { + int cancelledCount = 0; + + foreach (var ootheca in oothecas) + { + if (ootheca.isIncubating) + { + ootheca.CancelIncubation(); + cancelledCount++; + } + } + + if (cancelledCount > 0) + { + Messages.Message("ARA_Msg_MultiCancelIncubation".Translate(cancelledCount), + MessageTypeDefOf.NeutralEvent); + } + } + /// + /// 安全的呼叫幼虫方法 + /// + public bool CallLarvaIfPossible() + { + // 检查是否已经有幼虫在操作或正在孵化 + if (isIncubating || assignedLarva != null) return false; + + // 检查是否有配置 + if (IncubatorData?.SelectedConfig == null) return false; + + // 检查研究是否完成 + if (!IncubatorData.SelectedConfig.IsResearchComplete) return false; + + var larva = FindLarva(); + if (larva == null) + { + return false; + } + + var job = JobMaker.MakeJob(ARA_JobDefOf.ARA_OperateIncubator, this); + larva.jobs.TryTakeOrderedJob(job, JobTag.MiscWork); + assignedLarva = larva; + return true; + } public override void ExposeData() { base.ExposeData(); diff --git a/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Gizmo_PawnProgressBar.cs b/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Gizmo_PawnProgressBar.cs index 14ea652..5444d56 100644 --- a/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Gizmo_PawnProgressBar.cs +++ b/Source/ArachnaeSwarm/Buildings/Building_Ootheca/Gizmo_PawnProgressBar.cs @@ -1,5 +1,7 @@ +// 修改 Gizmo_PawnProgressBar.cs using RimWorld; using System.Collections.Generic; +using System.Linq; using UnityEngine; using Verse; @@ -7,6 +9,7 @@ namespace ArachnaeSwarm { /// /// 统一的双向进度条 Gizmo - 用于所有孵化建筑/组件 + /// 支持多选显示 /// [StaticConstructorOnStartup] public class Gizmo_PawnProgressBar : Gizmo @@ -22,16 +25,219 @@ namespace ArachnaeSwarm private static readonly Texture2D EmptyBarTex = SolidColorMaterials.NewSolidColorTexture(new Color(0.1f, 0.1f, 0.1f, 0.5f)); private readonly IOrderGizmoProvider provider; + private readonly Thing parentThing; + + // 多选相关 + private bool isMultiSelect = false; + private List multiSelectProviders = new List(); public Gizmo_PawnProgressBar(IOrderGizmoProvider provider) { this.provider = provider; + this.parentThing = provider as Thing; this.Order = -140f; + + // 检查是否是多个建筑被选中 + UpdateMultiSelectInfo(); + } + + private void UpdateMultiSelectInfo() + { + if (Find.Selector == null || parentThing == null) + return; + + // 获取选中的同类建筑 + var selectedThings = Find.Selector.SelectedObjects + .Where(obj => obj is Thing thing && + thing.def == parentThing.def && + thing.Faction == Faction.OfPlayer) + .ToList(); + + isMultiSelect = selectedThings.Count > 1; + + if (isMultiSelect) + { + multiSelectProviders.Clear(); + foreach (var thing in selectedThings) + { + if (thing is IOrderGizmoProvider provider) + { + multiSelectProviders.Add(provider); + } + } + } } public override float GetWidth(float maxWidth) => Mathf.Min(Width, maxWidth); public override GizmoResult GizmoOnGUI(Vector2 topLeft, float maxWidth, GizmoRenderParms parms) + { + // 更新多选信息 + UpdateMultiSelectInfo(); + + if (isMultiSelect) + { + return DrawMultiSelectGizmo(topLeft, maxWidth); + } + else + { + return DrawSingleSelectGizmo(topLeft, maxWidth); + } + } + + private GizmoResult DrawMultiSelectGizmo(Vector2 topLeft, float maxWidth) + { + // 计算显示多少个建筑的进度 + int displayCount = Mathf.Min(multiSelectProviders.Count, 4); // 最多显示4个 + + // 计算高度 + float contentHeight = Padding * 2 + Text.LineHeight + Spacing; // 标题 + contentHeight += displayCount * (BarHeight + Spacing + 14f); // 每个建筑的进度条 + float totalHeight = Mathf.Max(75f, contentHeight); + + Rect rect = new Rect(topLeft.x, topLeft.y - (totalHeight - 75f), GetWidth(maxWidth), totalHeight); + Widgets.DrawWindowBackground(rect); + + Rect innerRect = rect.ContractedBy(Padding); + float curY = innerRect.y; + + // === 多选标题区域 === + Text.Font = GameFont.Small; + Rect titleRect = new Rect(innerRect.x, curY, innerRect.width, Text.LineHeight); + + string title = "ARA_Gizmo_MultiSelectTitle".Translate(multiSelectProviders.Count); + GUI.color = new Color(0.7f, 0.9f, 1f); + Widgets.Label(titleRect, title); + GUI.color = Color.white; + + curY += Text.LineHeight + Spacing; + + // === 显示每个建筑的进度 === + for (int i = 0; i < displayCount; i++) + { + var currentProvider = multiSelectProviders[i]; + var orders = currentProvider.GetOrdersForGizmo(); + + if (orders.Count > 0) + { + // 建筑标签 + Text.Font = GameFont.Tiny; + Rect buildingLabelRect = new Rect(innerRect.x, curY, innerRect.width, 12f); + string buildingLabel = $"{i+1}. {(currentProvider as Thing)?.LabelCap ?? "Unknown"}"; + Widgets.Label(buildingLabelRect, buildingLabel); + curY += 12f; + + // 显示第一个订单 + var order = orders[0]; + Rect orderRect = new Rect(innerRect.x, curY, innerRect.width, BarHeight + 14f); + DrawMultiSelectOrderItem(orderRect, order, currentProvider, i); + curY += BarHeight + 14f + Spacing; + } + else + { + // 无订单状态 + Text.Font = GameFont.Tiny; + Rect emptyRect = new Rect(innerRect.x, curY, innerRect.width, 20f); + GUI.color = new Color(0.7f, 0.7f, 0.7f); + Widgets.Label(emptyRect, "ARA_Status_Empty".Translate()); + GUI.color = Color.white; + curY += 20f + Spacing; + } + + // 添加分隔线 + if (i < displayCount - 1) + { + Widgets.DrawLineHorizontal(innerRect.x, curY - Spacing/2, innerRect.width); + curY += 2f; + } + } + + // 如果有更多建筑,显示提示 + if (multiSelectProviders.Count > displayCount) + { + Text.Font = GameFont.Tiny; + Rect moreRect = new Rect(innerRect.x, curY, innerRect.width, 14f); + GUI.color = new Color(0.5f, 0.5f, 0.5f); + Widgets.Label(moreRect, "ARA_Gizmo_MoreBuildings".Translate(multiSelectProviders.Count - displayCount)); + GUI.color = Color.white; + } + + Text.Font = GameFont.Small; + return new GizmoResult(GizmoState.Clear); + } + + private void DrawMultiSelectOrderItem(Rect rect, PawnOrderDisplayInfo order, IOrderGizmoProvider provider, int index) + { + float labelHeight = 14f; + + // 标签行 + Text.Font = GameFont.Tiny; + Rect labelRect = new Rect(rect.x, rect.y, rect.width - 20f, labelHeight); + + GUI.color = Color.white; + Widgets.Label(labelRect, $"{order.label} {order.progress.ToStringPercent("F0")}"); + + // 取消按钮(针对单个建筑) + Rect cancelRect = new Rect(rect.xMax - 16f, rect.y, 16f, labelHeight); + if (Widgets.ButtonText(cancelRect, "×", false)) + { + provider.RemoveOrderByIndex(0); + } + + // 进度条 + Rect barRect = new Rect(rect.x, rect.y + labelHeight, rect.width, BarHeight); + + if (order.status == OrderStatus.Incubating) + { + // 双向进度条:品质向左,进度向右 + float midX = barRect.x + barRect.width / 2f; + float halfWidth = barRect.width / 2f; + + // 背景 + GUI.DrawTexture(barRect, EmptyBarTex); + + // 品质进度(向左) + float qualityWidth = halfWidth * order.qualityProgress; + Rect qualityRect = new Rect(midX - qualityWidth, barRect.y, qualityWidth, barRect.height); + GUI.DrawTexture(qualityRect, QualityBarTex); + + // 生产进度(向右) + float progressWidth = halfWidth * order.progress; + Rect progressRect = new Rect(midX, barRect.y, progressWidth, barRect.height); + GUI.DrawTexture(progressRect, ProgressBarTex); + + // 中线 + Widgets.DrawLineVertical(midX, barRect.y, barRect.height); + + // 百分比文字 + Text.Font = GameFont.Tiny; + Text.Anchor = TextAnchor.MiddleLeft; + GUI.color = new Color(0.8f, 0.9f, 1f); + Widgets.Label(new Rect(barRect.x + 2f, barRect.y, halfWidth - 4f, barRect.height), + order.qualityProgress.ToStringPercent("F0")); + + Text.Anchor = TextAnchor.MiddleRight; + GUI.color = new Color(0.8f, 1f, 0.8f); + Widgets.Label(new Rect(midX + 2f, barRect.y, halfWidth - 4f, barRect.height), + order.progress.ToStringPercent("F0")); + + Text.Anchor = TextAnchor.UpperLeft; + GUI.color = Color.white; + } + else + { + // 等待幼虫状态:显示等待指示 + GUI.DrawTexture(barRect, EmptyBarTex); + Text.Font = GameFont.Tiny; + Text.Anchor = TextAnchor.MiddleCenter; + GUI.color = new Color(0.8f, 0.6f, 0.2f); + Widgets.Label(barRect, "ARA_Status_WaitingForLarva".Translate()); + GUI.color = Color.white; + Text.Anchor = TextAnchor.UpperLeft; + } + } + + private GizmoResult DrawSingleSelectGizmo(Vector2 topLeft, float maxWidth) { var orders = provider.GetOrdersForGizmo(); int orderCount = orders.Count;