Files
ArachnaeSwarm/Source/ArachnaeSwarm/Jobs/JobDriver_FollowProducer/ThinkNode_ConditionalNotProducedByMechCarrier.cs
2026-01-28 11:17:26 +08:00

53 lines
1.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 ArachnaeSwarm
{
/// <summary>
/// 反向条件节点:如果单位不是由生产者生产的,则进入此节点
/// 与ThinkNode_ConditionalShouldFollowProducer逻辑相反
/// </summary>
public class ThinkNode_ConditionalNotProducedByMechCarrier : ThinkNode_Conditional
{
public ThinkNode_ConditionalNotProducedByMechCarrier()
{
}
protected override bool Satisfied(Pawn pawn)
{
// 基础检查如果不是生产者生产的返回true
bool isProduced = HasProducer(pawn);
// 如果是生产者生产的,再检查其他条件
if (isProduced)
{
return false; // 是生产者生产的,不满足条件
}
// 不是生产者生产的,满足条件
return true;
}
/// <summary>
/// 检查pawn是否由生产者生产
/// </summary>
private bool HasProducer(Pawn pawn)
{
if (!pawn.Spawned)
return false;
// 检查是否有生产者Comp
CompProducedByMechCarrier producerComp = pawn.TryGetComp<CompProducedByMechCarrier>();
if (producerComp == null || !producerComp.HasValidProducer)
return false;
Thing producer = producerComp.Producer;
if (producer == null || producer.Destroyed)
return false;
return true;
}
}
}