This commit is contained in:
Tourswen
2025-12-16 02:29:08 +08:00
parent b17407b53f
commit 4f46620e26
7 changed files with 182 additions and 270 deletions

View File

@@ -181,24 +181,48 @@ namespace ArachnaeSwarm
return builder.ToString().TrimEndNewlines();
}
// 呼叫幼虫
private void CallLarva()
{
// 检查是否已经在孵化中
if (isIncubating)
{
Messages.Message("ARA_EquipmentIncubator.AlreadyIncubating".Translate() + " " + "ARA_EquipmentIncubator.CancelFirst".Translate(),
MessageTypeDefOf.RejectInput);
return;
}
// 检查是否有幼虫在任务中
if (assignedLarva != null)
{
Messages.Message("ARA_EquipmentIncubator.LarvaAlreadyOnWay".Translate(),
MessageTypeDefOf.RejectInput);
return;
}
// 获取当前选择的配置
var config = EquipmentIncubatorData?.SelectedConfig;
if (config == null)
{
Messages.Message("ARA_EquipmentIncubator.NoTargetSelected".Translate(),
MessageTypeDefOf.RejectInput);
return;
}
// 检查研究是否完成
if (!config.IsResearchComplete)
{
if (config.requiredResearch != null)
{
Messages.Message("ARA_EquipmentIncubator.ResearchRequiredFor".Translate(config.thingDef.LabelCap, config.requiredResearch.LabelCap),
MessageTypeDefOf.RejectInput);
}
else
{
Messages.Message("ARA_EquipmentIncubator.ResearchNotCompleted".Translate(),
MessageTypeDefOf.RejectInput);
}
return;
}
// 查找幼虫
var larva = FindLarva();
if (larva == null)
{
@@ -206,17 +230,15 @@ namespace ArachnaeSwarm
MessageTypeDefOf.RejectInput);
return;
}
// 给幼虫分配任务
var job = JobMaker.MakeJob(ARA_JobDefOf.ARA_OperateEquipmentIncubator, this);
job.count = 1;
larva.jobs.TryTakeOrderedJob(job, JobTag.MiscWork);
assignedLarva = larva;
Messages.Message("ARA_EquipmentIncubator.LarvaCalled".Translate() + " " + "ARA_EquipmentIncubator.ArriveShortly".Translate(),
MessageTypeDefOf.PositiveEvent);
}
// 幼虫到达
public void NotifyLarvaArrived(Pawn larva)
{
@@ -475,16 +497,16 @@ namespace ArachnaeSwarm
}
}
}
// 创建切换目标Gizmo - 现在使用装备的图标
private Gizmo CreateTargetSwitchGizmo()
{
var configs = EquipmentIncubatorData?.IncubationConfigs;
if (configs == null || configs.Count == 0) return null;
var props = EquipmentIncubatorData?.props as CompProperties_EquipmentIncubatorData;
var selectedConfig = EquipmentIncubatorData?.SelectedConfig;
var switchButton = new Command_Action
{
defaultLabel = BuildSwitchButtonLabel(selectedConfig, props),
@@ -493,18 +515,65 @@ namespace ArachnaeSwarm
action = ShowSelectionMenu,
hotKey = KeyBindingDefOf.Misc2
};
if (selectedConfig != null && !selectedConfig.IsResearchComplete)
{
if (selectedConfig.requiredResearch != null)
{
switchButton.Disable($"Requires research: {selectedConfig.requiredResearch.LabelCap}");
}
}
// 检查研究是否完成,如果未完成则禁用按钮
//if (selectedConfig != null && !selectedConfig.IsResearchComplete)
//{
// if (selectedConfig.requiredResearch != null)
// {
// switchButton.Disable("ARA_EquipmentIncubator.ResearchRequired".Translate() + " " + selectedConfig.requiredResearch.LabelCap);
// }
// else
// {
// switchButton.Disable("ARA_EquipmentIncubator.ResearchNotCompleted".Translate());
// }
//}
return switchButton;
}
// 改进的BuildSwitchButtonDescription方法
private string BuildSwitchButtonDescription(EquipmentIncubationConfig config, CompProperties_EquipmentIncubatorData props)
{
var builder = new StringBuilder();
builder.AppendLine();
if (config != null)
{
if (config.thingDef != null)
{
builder.AppendLine($"ARA_EquipmentIncubator.ButtonLabel".Translate(config.thingDef.LabelCap));
if (!string.IsNullOrEmpty(config.thingDef.description))
{
builder.AppendLine(config.thingDef.description);
}
}
builder.AppendLine($"ARA_EquipmentIncubator.IncubationTime".Translate(config.DaysRequired));
if (config.requiredResearch != null)
{
if (config.requiredResearch.IsFinished)
{
builder.AppendLine($"ARA_EquipmentIncubator.ResearchCompleted".Translate(config.requiredResearch.LabelCap));
}
else
{
builder.AppendLine($"ARA_EquipmentIncubator.ResearchRequired".Translate(config.requiredResearch.LabelCap));
}
}
else
{
builder.AppendLine("ARA_EquipmentIncubator.NoResearchRequired".Translate());
}
}
builder.AppendLine();
builder.AppendLine("ARA_EquipmentIncubator.ButtonDesc".Translate());
return builder.ToString().TrimEndNewlines();
}
// 获取配置图标 - 现在直接从ThingDef获取
private Texture2D GetConfigIcon(EquipmentIncubationConfig config)
{
@@ -527,42 +596,6 @@ namespace ArachnaeSwarm
}
return (props?.buttonLabel ?? "ARA_EquipmentIncubator.IncubateLabel").Translate("None");
}
private string BuildSwitchButtonDescription(EquipmentIncubationConfig config, CompProperties_EquipmentIncubatorData props)
{
var builder = new StringBuilder();
builder.AppendLine((props?.buttonDesc ?? "ARA_EquipmentIncubator.ButtonDesc").Translate());
builder.AppendLine();
if (config != null)
{
if (config.thingDef != null)
{
builder.AppendLine($"ARA_EquipmentIncubator.ButtonLabel".Translate(config.thingDef.LabelCap));
if (!string.IsNullOrEmpty(config.thingDef.description))
{
builder.AppendLine(config.thingDef.description);
}
}
builder.AppendLine($"ARA_EquipmentIncubator.IncubationTime".Translate(config.DaysRequired));
if (config.requiredResearch != null)
{
if (config.requiredResearch.IsFinished)
builder.AppendLine($"Research: {config.requiredResearch.LabelCap} (Completed)");
else
builder.AppendLine($"Research: {config.requiredResearch.LabelCap} (Required)");
}
}
builder.AppendLine();
builder.AppendLine("ARA_EquipmentIncubator.ButtonDesc".Translate());
return builder.ToString().TrimEndNewlines();
}
private void ShowSelectionMenu()
{
var configs = EquipmentIncubatorData?.IncubationConfigs;
@@ -583,15 +616,15 @@ namespace ArachnaeSwarm
string prefix = (i == currentIndex) ? "✓ " : " ";
// 使用原版FloatMenuOption的构造函数直接传入图标
FloatMenuOption option;
// 获取图标
Texture2D icon = config.thingDef?.uiIcon;
// 尝试获取ThingDef的图标
Texture2D icon = config.thingDef.uiIcon;
// 创建选项
FloatMenuOption option;
if (icon != null)
{
// 使用带有Texture2D图标的构造函数
// 使用带有图标的构造函数
option = new FloatMenuOption(
prefix + label,
() => SwitchToConfig(index),
@@ -611,7 +644,7 @@ namespace ArachnaeSwarm
}
else
{
// 如果没有图标,使用普通构造函数
// 使用普通构造函数
option = new FloatMenuOption(
prefix + label,
() => SwitchToConfig(index)
@@ -626,7 +659,10 @@ namespace ArachnaeSwarm
{
option.Label = prefix + label;
option.Disabled = true;
option.tooltip = description + "\n\n " + "ARA_EquipmentIncubator.ResearchRequired".Translate() + " " + config.requiredResearch.LabelCap;
if (config.requiredResearch != null)
{
option.tooltip = description + "\n\n " + "ARA_EquipmentIncubator.ResearchRequired".Translate() + " " + config.requiredResearch.LabelCap;
}
}
options.Add(option);
@@ -638,7 +674,6 @@ namespace ArachnaeSwarm
(props?.menuTitle ?? "ARA_EquipmentIncubator.MenuTitle").Translate()));
}
}
private void SwitchToConfig(int index)
{
if (EquipmentIncubatorData != null)