11
This commit is contained in:
Binary file not shown.
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Binary file not shown.
@@ -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|",
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user