将TaskManager脚本从gdscript / Godot迁移到bevy and rust

问题描述

我正在构建一个城市建筑游戏原型,在这个原型中,我让村民同时执行许多不同的任务,例如搬运东西,建造,收获。为此,我创建了一个TaskManager单例脚本,其中包含任务积压数组和一个活动任务数组,可以根据优先级选择从积压到活动的任务,在活动列表上运行每个任务的相应run_task()方法,并在完成后将其删除。我仍在学习生锈和弯曲,但是从我的阅读中,我无法像在godot中那样真正地在弯曲中形成单身。在这种情况下,我有什么选择?抱歉,如果不是这个问题的地方,但是我很难找到有关这种与引擎和铁锈有关的信息。

解决方法

除非我误解了您的需求,否则可以使用“资源”来完成。来自Bevy book

...但是大多数应用程序也将需要某种“全球唯一”数据。在Bevy ECS中,我们使用资源表示全球唯一的数据。

使用方式:

App::build()
    .add_resource(TaskManager{ ... })
    .add_system(process_tasks.system())
    ...
fn process_tasks(manager: Res<TaskManager>,...) {
    ...
}