调整价格,绘制外骨骼初稿

This commit is contained in:
Tourswen
2025-10-18 00:10:24 +08:00
parent 0539703a6e
commit eba65611fd
12 changed files with 162 additions and 193 deletions

View File

@@ -1,13 +1,17 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
"WorkspaceRootPath": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\building_comps\\ara_compinteractiveproducer\\compinteractiveproducer.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\\compnutritiontofuelconverter.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\compnutritiontofuelconverter.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_compinteractiveproducer\\compinteractiveproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_compinteractiveproducer\\compinteractiveproducer.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_compinteractiveproducer\\compresearchproducer.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_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:building_comps\\ara_compinteractiveproducer\\compresearchproducer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
@@ -18,21 +22,8 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 2,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "CompResearchProducer.cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"RelativeDocumentMoniker": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"RelativeToolTip": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"ViewState": "AgIAADoBAAAAAAAAAAAkwFIBAAAmAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-17T09:09:18.518Z",
"EditorCaption": ""
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
@@ -40,12 +31,37 @@
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "CompNutritionToFuelConverter.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\CompNutritionToFuelConverter.cs",
"RelativeDocumentMoniker": "Building_Comps\\CompNutritionToFuelConverter.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\CompNutritionToFuelConverter.cs",
"RelativeToolTip": "Building_Comps\\CompNutritionToFuelConverter.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAKEAAAAcAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-17T11:32:00.484Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "CompResearchProducer.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"RelativeDocumentMoniker": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"RelativeToolTip": "Building_Comps\\ARA_CompInteractiveProducer\\CompResearchProducer.cs",
"ViewState": "AgIAADoBAAAAAAAAAAAkwFIBAAAmAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-17T09:09:18.518Z"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "CompInteractiveProducer.cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
"DocumentMoniker": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
"RelativeDocumentMoniker": "Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
"ToolTip": "E:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
"RelativeToolTip": "Building_Comps\\ARA_CompInteractiveProducer\\CompInteractiveProducer.cs",
"ViewState": "AgIAAJMBAAAAAAAAAAAUwNcBAAAyAAAAAAAAAA==",
"ViewState": "AgIAAJYBAAAAAAAAAAAUwKoBAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-10-17T09:00:51.526Z",
"EditorCaption": ""

View File

@@ -1,4 +1,5 @@
using RimWorld;
using System.Collections.Generic;
using Verse;
namespace ArachnaeSwarm
@@ -19,7 +20,7 @@ namespace ArachnaeSwarm
public class CompNutritionToFuelConverter : ThingComp
{
private CompRefuelableNutrition nutritionComp;
private CompRefuelable fuelComp;
private CompProductStorage productStorageComp; // 改为使用 CompProductStorage
public float nutritionProgress = 0f;
public float workProgress = 0f;
@@ -30,15 +31,15 @@ namespace ArachnaeSwarm
{
base.PostSpawnSetup(respawningAfterLoad);
nutritionComp = parent.GetComp<CompRefuelableNutrition>();
fuelComp = parent.GetComp<CompRefuelable>();
productStorageComp = parent.GetComp<CompProductStorage>(); // 改为获取 CompProductStorage
if (nutritionComp == null)
{
Log.Error($"[ArachnaeSwarm] {parent.def.defName} has CompNutritionToFuelConverter but no CompRefuelableNutrition.");
}
if (fuelComp == null)
if (productStorageComp == null)
{
Log.Error($"[ArachnaeSwarm] {parent.def.defName} has CompNutritionToFuelConverter but no CompRefuelable.");
Log.Error($"[ArachnaeSwarm] {parent.def.defName} has CompNutritionToFuelConverter but no CompProductStorage.");
}
}
@@ -60,7 +61,7 @@ namespace ArachnaeSwarm
private void TryProcess()
{
if (fuelComp == null || fuelComp.IsFull)
if (productStorageComp == null || productStorageComp.IsFull)
{
return;
}
@@ -88,27 +89,37 @@ namespace ArachnaeSwarm
{
int unitsToCraft = (int)(workProgress / Props.workAmount);
float fuelToProduce = unitsToCraft * Props.fuelAmount;
float spaceInTank = fuelComp.Props.fuelCapacity - fuelComp.Fuel;
float spaceInStorage = productStorageComp.StorageSpaceRemaining;
if (spaceInTank > 0)
if (spaceInStorage > 0)
{
// Add as much fuel as possible, up to what was produced.
float fuelToAdd = System.Math.Min(fuelToProduce, spaceInTank);
fuelComp.Refuel(fuelToAdd);
// Consume the full cost, regardless of how much was actually added.
nutritionProgress -= unitsToCraft * Props.nutritionCost;
workProgress -= unitsToCraft * Props.workAmount;
// 使用 CompProductStorage 的 API 添加产物
float fuelToAdd = System.Math.Min(fuelToProduce, spaceInStorage);
bool added = productStorageComp.TryAddProduct(fuelToAdd);
if (added)
{
// Consume the full cost, regardless of how much was actually added.
nutritionProgress -= unitsToCraft * Props.nutritionCost;
workProgress -= unitsToCraft * Props.workAmount;
// 记录日志用于调试
Log.Message($"[NutritionToFuel] Added {fuelToAdd} fuel to storage. Remaining space: {productStorageComp.StorageSpaceRemaining}");
}
else
{
Log.Warning($"[NutritionToFuel] Failed to add fuel to storage. Requested: {fuelToAdd}, Space: {spaceInStorage}");
}
}
// If spaceInTank is 0, do nothing and let progress build up.
// If spaceInStorage is 0, do nothing and let progress build up.
}
}
public override string CompInspectStringExtra()
{
if (fuelComp == null) return null;
if (productStorageComp == null) return null;
if (fuelComp.IsFull)
if (productStorageComp.IsFull)
{
return "ARA_NutritionConverter_State_TankFull".Translate();
}
@@ -120,5 +131,46 @@ namespace ArachnaeSwarm
return "ARA_NutritionConverter_Working".Translate(workProgress.ToString("F0"), Props.workAmount);
}
// 新增:调试命令
public override IEnumerable<Gizmo> CompGetGizmosExtra()
{
foreach (var gizmo in base.CompGetGizmosExtra())
{
yield return gizmo;
}
if (DebugSettings.ShowDevGizmos)
{
// 调试命令:显示状态信息
yield return new Command_Action
{
defaultLabel = "DEV: Show Converter Status",
action = delegate
{
string status = $"Nutrition Converter Status:\n" +
$"Nutrition Progress: {nutritionProgress:F1}/{Props.nutritionCost}\n" +
$"Work Progress: {workProgress:F0}/{Props.workAmount}\n" +
$"Product Storage: {productStorageComp?.StorageAmount:F1}/{productStorageComp?.StorageCapacity:F1}\n" +
$"Nutrition Comp: {(nutritionComp != null ? "Found" : "Missing")}\n" +
$"Product Storage Comp: {(productStorageComp != null ? "Found" : "Missing")}";
Messages.Message(status, MessageTypeDefOf.SilentInput);
Log.Message(status);
}
};
// 调试命令:重置进度
yield return new Command_Action
{
defaultLabel = "DEV: Reset Progress",
action = delegate
{
nutritionProgress = 0f;
workProgress = 0f;
Messages.Message("Converter progress reset", MessageTypeDefOf.SilentInput);
}
};
}
}
}
}
}