Rimworld Mod制作教程9 角色想法相关解读

文章目录

1 想法核心机制流程

当一个想法生效,从最底层到生效,所经历的顺序应该为:
Pawn实例的Tick()
->Pawn_NeedsTracker实例的NeedsTrackerTick()
->Need_Mood实例的NeedInterval()
->Need_Seeker父类的NeedInterval()
->Need_Mood实例的CurInstantLevel访问器
->ThoughtHandler实例的TotalMoodOffset()
->ThoughtHandler实例的GetDistinctMoodThoughtGroups()
->ThoughtHandler实例的GetAllMoodThoughts()
->SituationalThoughtHandler实例的AppendMoodThoughts()
->SituationalThoughtHandler实例的CheckRecalculateMoodThoughts()中完成想法实例的创建
->Thought_Situational实例的Active访问器决定当前想法是否满足生效条件
->回到Need_Seeker中设定CurLevel值

至此想法的level值已完成设定,CurLevel会影响各种事情,比如角色在rest_need上的level等级超过最大容量,pawn分配行为时会尝试休息,无视当前的策略方针

2 各部分类介绍

2.1 Pawn_NeedsTracker

我把它称之为需求追踪器
Pawn_NeedsTracker 实例创建时会与pawn绑定,并且按照一个比较sb的过滤规则过滤掉一部分need,Pawn_NeedsTracker 主要负责管理调度pawn身上的所有need,以及对外暴露need相关接口。

2.2 Need_Mood

心情上的需求,继承自Need_Seeker,实现心情相关的需求功能,内部有三个重要参数

 public ThoughtHandler thoughts; //负责处理角色想法相关
 public PawnObserver observer; //负责监视角色的交互来产生 回忆型心情
 public PawnRecentMemory recentMemory; //主要记录最近有没有外出 有没有灯光

2.3 ThoughtHandler

想法处理器,内部把想法分为两类,

public MemoryThoughtHandler memories; //回忆型的想法
public SituationalThoughtHandler situational; //情景型的想法

并且负责处理SocialThoughts社会型想法,就是人与人之间的看法,这个由另一个模块Pawn_RelationsTracker关系追踪器来控制,这里暂且无视。

ThoughtHandler中有个核心的函数public float TotalMoodOffset()
用来计算当前pawn所有生效的非社会型想法 对 心情上的需求 的影响值

2.4 SituationalThought

情景型想法,继承自Thought,主要为这个想法提供了一个理由。

2.5 SituationalThoughtHandler

情景型想法处理器,负责情景型想法的管理,生效,过期相关的判定。

如果这篇文章对你有帮助,点赞收藏支持一下呗!

上一篇:Linsheng-Portable Car Air Compressor: What Benefits?


下一篇:《啤酒厂选址》题解报告