Files
WulaFallenEmpireRW/Source/WulaFallenEmpire/Pawn/WULA_AutonomousMech/ThinkNode_ConditionalAutonomousWorkMode.cs
Tourswen f1956d5961 1
2025-12-07 03:07:50 +08:00

71 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using RimWorld;
using Verse;
using Verse.AI;
namespace WulaFallenEmpire
{
public class ThinkNode_ConditionalAutonomousWorkMode : ThinkNode_Conditional
{
public DroneWorkModeDef requiredMode;
protected override bool Satisfied(Pawn pawn)
{
try
{
if (pawn == null || pawn.Dead || pawn.Downed)
return false;
// 检查是否有自主机械组件
var comp = pawn.GetComp<CompAutonomousMech>();
if (comp == null)
return false;
// 检查当前工作模式是否匹配要求
if (comp.CurrentWorkMode != requiredMode)
return false;
// 额外的安全检查确保pawn有工作设置
if (pawn.workSettings == null)
{
Log.Warning($"[WULA] {pawn.LabelShort} has no workSettings in ThinkNode_ConditionalAutonomousWorkMode");
return false;
}
// 检查是否启用了工作
if (!pawn.workSettings.EverWork)
{
Log.Warning($"[WULA] {pawn.LabelShort} has EverWork=false in ThinkNode_ConditionalAutonomousWorkMode");
return false;
}
// 检查是否有工作给予器
var workGivers = pawn.workSettings.WorkGiversInOrderNormal;
if (workGivers == null || workGivers.Count == 0)
{
Log.Warning($"[WULA] {pawn.LabelShort} has no work givers in ThinkNode_ConditionalAutonomousWorkMode");
return false;
}
// 检查是否为机械体且具有机械体能力
if (pawn.RaceProps.IsMechanoid)
{
// 检查是否有操纵能力
var manipulation = pawn.health?.capacities?.GetLevel(PawnCapacityDefOf.Manipulation);
if (manipulation < 0.1f)
{
Log.Warning($"[WULA] {pawn.LabelShort} has insufficient manipulation capacity: {manipulation}");
return false;
}
}
return true;
}
catch (System.Exception ex)
{
Log.Error($"[WULA] Exception in ThinkNode_ConditionalAutonomousWorkMode.Satisfied for pawn {pawn?.LabelShort}: {ex}");
return false;
}
}
}
}