53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|