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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值