Persistent<T extends PersistentContent>
在过去,我们只能通过脚本修改 Storable 的状态,但 Persistent 提供了一组有用的方法,可以轻松控制流程
Persistent 需要一个命名空间的 名称 和 初始状态。具有相同名称的 Persistent 将共享相同的状态
⚠️
命名空间不能是现有的内置命名空间(内置命名空间包括:"game")
type PersisData = {
flag: boolean;
coin: number;
name: string;
// ...
};
const persis = new Persistent<PersisData>("persis", {
flag: false,
coin: 0,
name: "约翰·史密斯",
// ...
});
注意: 存储的内容必须是 可序列化的, NarraLeaf-React 支持的可序列化值包括:
string
number
boolean
object
: 键为string
,值为上述可序列化值array
: 元素为上述可序列化值undefined
null
Date
: 标准的 JavaScript 日期对象
如果脚本内容包含 Persistent,则必须使用 Story 进行注册
story.registerPersistent(persis);
Public Methods
constructor
namespace: string
- 命名空间的名称defaultContent: T
- 初始状态
equals<K extends StringKeyOf<T>>
key: K
- 状态的键value: T[K]
- 状态的值- 返回:
Lambda<boolean>
scene.action([
Condition
.If(persis.equals("name", "约翰·史密斯"), [
character1.say("你好,约翰·史密斯!")
])
]);
notEquals<K extends StringKeyOf<T>>
key: K
- 状态的键value: T[K]
- 状态的值- 返回:
Lambda<boolean>
isTrue<K extends StringKeyOf<T>>
key: K
- 状态的键- 返回:
Lambda<boolean>
scene.action([
Condition
.If(persis.isTrue("flag"), [
character1.say("标志为真")
])
]);
isFalse<K extends StringKeyOf<T>>
key: K
- 状态的键- 返回:
Lambda<boolean>
isNotNull<K extends StringKeyOf<T>>
key: K
- 状态的键- 返回:
Lambda<boolean>
toWords<K extends StringKeyOf<T>>
key: K
- 状态的键- 返回:
Word<DynamicWord>
character.say`你有 ${persis.toWords("coin")} 个硬币`;
get<K extends StringKeyOf<T>>
get
的别名
key: K
- 状态的键- 返回:
Word<DynamicWord>
character.say`你有 ${persis.get("coin")} 个硬币`;
conditional
condition: Lambda<boolean> | LambdaHandler<boolean>
ifTrue: DynamicWordResult
ifFalse: DynamicWordResult
- 返回:
Word
character.say`你的标志是 ${persis.conditional(
persis.isTrue("flag"),
"真",
"假"
)}`;
evaluate<K extends StringKeyOf<T>>
使用 JavaScript 函数评估状态
key: K
- 状态的键fn: (value: T[K]) => boolean
- 用于评估状态的 JavaScript 函数- 返回
Lambda<boolean>
scene.action([
Condition
.If(persis.evaluate("coin", (coin) => coin < 10), [
character1.say`你没有足够的硬币!`
])
]);
链式方法
set<K extends StringKeyOf<T>>
重载 1 / 2
key: K
- 状态的键value: T[K]
- 状态的值
scene.action([
persis.set("coin", 10)
]);
重载 2 / 2
key: K
- 状态的键handler: (value: T[K]) => T[K])
- 用于修改值的处理程序
scene.action([
persis.set("coin", (coin) => coin + 10) // 硬币将增加 10
]);