2
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user