This commit is contained in:
2026-01-26 17:16:30 +08:00
parent 8a35af84f3
commit adc513c4eb
11 changed files with 667 additions and 157 deletions

Binary file not shown.

View File

@@ -401,7 +401,7 @@
<li>
<pawnKind>ArachnaeBase_Race_Acidcut</pawnKind>
<count>4</count>
<cooldownTicks>1000</cooldownTicks>
<cooldownTicks>250</cooldownTicks>
</li>
</productionQueue>
</li>
@@ -638,7 +638,7 @@
<li>
<pawnKind>ArachnaeBase_Race_Baneling</pawnKind>
<count>4</count>
<cooldownTicks>600</cooldownTicks>
<cooldownTicks>200</cooldownTicks>
</li>
</productionQueue>
</li>
@@ -1051,7 +1051,7 @@
<li>
<pawnKind>ArachnaeBase_Race_Acidcut</pawnKind>
<count>4</count>
<cooldownTicks>1000</cooldownTicks>
<cooldownTicks>200</cooldownTicks>
</li>
</productionQueue>
</li>
@@ -1238,7 +1238,7 @@
<li>
<pawnKind>ArachnaeBase_Race_Skyhive</pawnKind>
<count>4</count>
<cooldownTicks>800</cooldownTicks>
<cooldownTicks>200</cooldownTicks>
</li>
</productionQueue>
</li>
@@ -1348,7 +1348,7 @@
<li>
<pawnKind>ArachnaeBase_Race_Skyhive</pawnKind>
<count>8</count>
<cooldownTicks>400</cooldownTicks>
<cooldownTicks>200</cooldownTicks>
</li>
</productionQueue>
</li>
@@ -1471,7 +1471,7 @@
<li>
<pawnKind>ArachnaeBase_Race_Empsuicider</pawnKind>
<count>3</count>
<cooldownTicks>500</cooldownTicks>
<cooldownTicks>200</cooldownTicks>
</li>
</productionQueue>
</li>
@@ -1528,15 +1528,10 @@
<comps>
<li Class="ArachnaeSwarm.HediffCompProperties_ProductionQueue">
<productionQueue>
<li>
<pawnKind>ArachnaeBase_Race_Acidcut</pawnKind>
<count>3</count>
<cooldownTicks>500</cooldownTicks>
</li>
<li>
<pawnKind>ArachnaeBase_Race_Locust</pawnKind>
<count>2</count>
<cooldownTicks>700</cooldownTicks>
<count>5</count>
<cooldownTicks>300</cooldownTicks>
</li>
</productionQueue>
</li>

View File

@@ -290,11 +290,6 @@
<trainInstantly>true</trainInstantly>
<setWanted>true</setWanted>
</li>
<li>
<trainable>ARA_Cleaning</trainable>
<trainInstantly>true</trainInstantly>
<setWanted>true</setWanted>
</li>
<li>
<trainable>Haul</trainable>
<trainInstantly>true</trainInstantly>

View File

@@ -61,7 +61,7 @@
</tools>
<costList>
<ARA_InsectJelly>10</ARA_InsectJelly>
<ARA_Gene_Essence>3</ARA_Gene_Essence>
<ARA_Gene_Essence>1</ARA_Gene_Essence>
</costList>
</TerrainDef>
@@ -115,7 +115,8 @@
</building>
<costList>
<ARA_InsectJelly>25</ARA_InsectJelly>
<ARA_InsectJelly>50</ARA_InsectJelly>
<ARA_Gene_Essence>1</ARA_Gene_Essence>
</costList>
@@ -131,6 +132,7 @@
<!-- 虫蜜燃料系统 -->
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
<fuelCapacity>25.0</fuelCapacity>
<initialFuelPercent>1</initialFuelPercent>
<fuelFilter>
<thingDefs>
<li>ARA_InsectJelly</li>
@@ -139,7 +141,7 @@
<fuelGizmoLabel>虫蜜</fuelGizmoLabel>
<showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
<targetFuelLevelConfigurable>true</targetFuelLevelConfigurable>
<initialConfigurableTargetFuelLevel>5</initialConfigurableTargetFuelLevel>
<initialConfigurableTargetFuelLevel>25</initialConfigurableTargetFuelLevel>
<consumeFuelOnlyWhenUsed>true</consumeFuelOnlyWhenUsed>
</li>
<li Class="CompProperties_AffectedByFacilities">
@@ -276,7 +278,7 @@
</building>
<costList>
<ARA_InsectJelly>25</ARA_InsectJelly>
<ARA_InsectJelly>50</ARA_InsectJelly>
</costList>
<comps>
@@ -290,6 +292,7 @@
<!-- 虫蜜燃料系统 -->
<li Class="ArachnaeSwarm.CompProperties_RefuelableNutrition">
<fuelCapacity>25.0</fuelCapacity>
<initialFuelPercent>1</initialFuelPercent>
<fuelFilter>
<thingDefs>
<li>ARA_InsectJelly</li>

View File

@@ -77,7 +77,7 @@
<defName>ARA_RefuelingVat</defName>
<label>精华提取腔</label>
<description>一个特殊的活体建筑,可以置入阿拉克涅虫群的俘虏,使用缓慢而痛苦的方式提取其遗传物质,将其转换为精华素以供虫群使用。\n\n——怎么采集的你别问。</description>
<thingClass>ArachnaeSwarm.Building_CorpseVat</thingClass>
<thingClass>ArachnaeSwarm.Building_RefuelingVat</thingClass>
<containedPawnsSelectable>true</containedPawnsSelectable>
<tickerType>Normal</tickerType>
<descriptionHyperlinks>
@@ -182,7 +182,7 @@
</li>
</comps>
<modExtensions>
<li Class="ArachnaeSwarm.CorpseVatExtension">
<li Class="ArachnaeSwarm.DefModExtension_NutrientVat">
<!-- 在这里配置您的顶部贴图 -->
<topGraphicPath>ArachnaeSwarm/Building/ARA_RefuelingVatTop</topGraphicPath>
<!-- 如果是单张贴图,使用 Graphic_Single -->

View File

@@ -263,6 +263,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -663,6 +664,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -888,6 +890,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -1248,6 +1251,8 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -1522,6 +1527,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -1792,6 +1798,13 @@
</subNodes>
</li>
<!-- OUR CUSTOM LOGIC INJECTION FOR CLEANING -->
<li Class="ArachnaeSwarm.ThinkNode_ConditionalAnimalShouldDoCleaningWork">
<subNodes>
<li Class="ArachnaeSwarm.JobGiver_Cleaner" />
</subNodes>
</li>
<!-- Trained behavior: Haul-->
<li Class="ThinkNode_ChancePerHour_Constant">
<mtbHours>0.15</mtbHours>
@@ -1825,6 +1838,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -2131,6 +2145,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -2405,6 +2420,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -2679,6 +2695,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>
@@ -2986,6 +3003,7 @@
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_SeekAllowedArea"/>
<!-- Wander near your current position if in hostile map -->
<li Class="ThinkNode_ConditionalAnyEnemyInHostileMap">
<subNodes>

View File

@@ -245,4 +245,19 @@
<ARA_Tooltip_Ready>【就绪】</ARA_Tooltip_Ready>
<ARA_Tooltip_Duration>孵化时间: {0}</ARA_Tooltip_Duration>
<ARA_Tooltip_NoTarget>【未选择目标】\n点击标题选择孵化目标</ARA_Tooltip_NoTarget>
<ARA_Gizmo_AddOrder_Multi>{0}/{1} 选中</ARA_Gizmo_AddOrder_Multi>
<ARA_Gizmo_AddOrderDesc_Multi>为 {0} 个选中的卵设置孵化目标</ARA_Gizmo_AddOrderDesc_Multi>
<ARA_Menu_SelectIncubationTarget_Multi>为 {0} 个卵选择孵化目标</ARA_Menu_SelectIncubationTarget_Multi>
<ARA_Menu_ClearSelection>清除选择</ARA_Menu_ClearSelection>
<ARA_Msg_MultiSelectConfigSet>已为 {0} 个卵设置目标: {1}</ARA_Msg_MultiSelectConfigSet>
<ARA_Msg_MultiSelectConfigCleared>已清除 {0} 个卵的目标</ARA_Msg_MultiSelectConfigCleared>
<ARA_Msg_MultiCallLarva>已为 {0} 个卵呼叫幼虫</ARA_Msg_MultiCallLarva>
<ARA_Msg_MultiCancelIncubation>已取消 {0} 个卵的孵化</ARA_Msg_MultiCancelIncubation>
<ARA_OothecaIncubator.NoValidTargets>没有可用的目标</ARA_OothecaIncubator.NoValidTargets>
<!-- 多选Gizmo -->
<ARA_Gizmo_MultiSelectTitle>多选 ({0}个)</ARA_Gizmo_MultiSelectTitle>
<ARA_Gizmo_MoreBuildings>还有 {0} 个建筑...</ARA_Gizmo_MoreBuildings>
<ARA_Status_Empty>空闲</ARA_Status_Empty>
</LanguageData>

View File

@@ -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|",

View File

@@ -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<Gizmo> 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<Texture2D>.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<Texture2D>.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<Texture2D>.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<Texture2D>.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<Texture2D>.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<Texture2D>.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<Texture2D>.Get("UI/Commands/Cancel", false),
action = CancelIncubation,
action = () => CancelIncubationForMultiSelect(selectedOothecas),
Order = 100f
};
}
}
}
/// <summary>
/// 为多选建筑显示订单菜单
/// </summary>
private void ShowMultiSelectOrderMenu(List<Building_Ootheca> oothecas)
{
if (oothecas == null || oothecas.Count == 0)
return;
// 获取第一个建筑的配置列表(假设所有建筑的配置相同)
var configs = IncubatorData?.IncubationConfigs;
if (configs == null || configs.Count == 0)
return;
List<FloatMenuOption> options = new List<FloatMenuOption>();
// 添加清除选项
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)));
}
/// <summary>
/// 为多个建筑设置配置
/// </summary>
private void SetConfigForMultiSelect(List<Building_Ootheca> 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);
}
}
/// <summary>
/// 为多个建筑清除选择
/// </summary>
private void ClearSelectionForMultiSelect(List<Building_Ootheca> 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);
}
}
/// <summary>
/// 为多个建筑呼叫幼虫
/// </summary>
private void CallLarvaForMultiSelect(List<Building_Ootheca> oothecas)
{
int calledCount = 0;
List<Building_Ootheca> calledOothecas = new List<Building_Ootheca>();
// 按位置排序,确保按顺序呼叫
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);
}
}
/// <summary>
/// 为多个建筑取消孵化
/// </summary>
private void CancelIncubationForMultiSelect(List<Building_Ootheca> 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);
}
}
/// <summary>
/// 安全的呼叫幼虫方法
/// </summary>
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();

View File

@@ -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
{
/// <summary>
/// 统一的双向进度条 Gizmo - 用于所有孵化建筑/组件
/// 支持多选显示
/// </summary>
[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<IOrderGizmoProvider> multiSelectProviders = new List<IOrderGizmoProvider>();
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;