用途
Bevy Party 是一个面向 Bevy 0.20 的“类型路由”(thin router)技能,用于本地派对游戏(local party game)的路由。它处理本地迷你游戏切换与共享分数,把领域工作留给其他 Bevy 技能。当你需要为本地派对游戏做路由时加载它。
主要能力
- 本地座位(local seats):以组件形式保存每个座位的索引与分数。
- 共享计分板(shared board):以资源形式保存当前活跃座位、回合数与待计分标志。
- 迷你游戏切换(minigame swaps):以资源保存当前迷你游戏,并在 Hub、Race、Score 之间切换。
- 座位加入:按键后生成新的 LocalSeat,最多 4 个座位。
ECS 结构
- 组件(Component)以纯数据形式保存该类型的每实体标志,本文件不命名新的引擎类型。
- 资源(Resource)保存整局计数器(分数、波次索引、种子),通过 bevy-data-resources 实现。
- 系统在 Update 或来自 bevy-master 的固定时间步上读取这些组件;当后续系统需要看到结果时,用 .chain() 排序。
- 调度:游戏模式变更通过 bevy-state-machines 处理。本文件只注册座位分数与迷你游戏切换。
路由
- bevy-state-machines:迷你游戏模式。
- bevy-input-handling:本地设备,包含手柄。
- bevy-game-loop-time-trial:当迷你游戏需要计时时。
范围与职责划分
本地座位、共享计分板和当前迷你游戏都是纯数据。模式状态机、设备与计时回合保留在上述关联技能中。
职责划分示例:
- 某个座位赢得本回合:由本技能负责 PartyBoard.award_pending,然后清除它;输入设备交给 bevy-input-handling。
- Hub 开启一场竞速:由本技能负责在刚按下的按键上设置 CurrentMinigame;状态机交给 bevy-state-machines。
- 计分模式结束:由本技能负责递增回合与活跃座位,然后返回 Hub;计时器交给 bevy-game-loop-time-trial。
使用方式
依赖:
[dependencies]
bevy = "0.20"
核心代码结构包括:
- LocalSeat 组件(index、score)。
- PartyBoard 资源(active、round、award_pending)。
- award 系统:当 award_pending 为真时,为活跃座位加分并清除标志。
- ScorePlugin:插入 PartyBoard 资源并注册 award 系统。
- Minigame 枚举(Hub、Race、Score)与 CurrentMinigame 资源。
- open_race 系统:在 Hub 状态下按 Digit1 切换到 Race。
- advance_round 系统:在 Score 状态下按 Digit2 递增回合、轮换活跃座位、设置 award_pending 并返回 Hub。
- MinigamePlugin:插入 CurrentMinigame 资源,并用 .chain() 注册 open_race 与 advance_round。
- join_seat 系统:按 KeyJ 生成新座位,最多 4 个。
- JoinPlugin:注册 join_seat 系统。
- main 函数:使用 MinimalPlugins 与 JoinPlugin 启动应用。
适用场景
- 本地多人派对游戏,需要多个本地座位与共享计分。
- 需要在多个迷你游戏之间切换,并维护回合与活跃座位。
- 希望以惯用 ECS 方式(组件 + 资源 + 系统)组织派对游戏状态。
限制与注意事项
- 目标版本为 Bevy 0.20+。
- 核心 ECS 类型包括 Component、Resource、Query、Commands、Startup、Update、Fixed / FixedMain(bevy::time)、.chain()、Plugin、DefaultPlugins、MinimalPlugins。消息与观察者属于归属槽位,其 API 见 bevy-events-messaging。除非用 .chain() 排序冲突系统,否则系统并行运行。
- 借用规则:两个都可变查询同一组件的系统必须排序(.chain())或拆分,使只有一个写入;无关系统保持并行。
- 不要在每个帧为座位加分:计分板标志只奖励一次然后清除,避免活跃座位免费增长。
- 不要在本文件中发明物理、导航、网络或 XR crate;本技能只命名有文档的 Bevy crate 与模块。
- 不要在文档 URL 中固定 /0.20.0/;链接保持最新,0.20 目标只在正文中说明一次。
- 不要可变查询同一组件于两个无序系统。
- 不要发明类型 API;Bevy 代码保持惯用 ECS,只使用有文档的 Bevy API。
- 不要在此选择物理或网络 crate。
参考
- bevy-master 的库固定为 0.20.0,官方页面保持无版本站点。
- 官方文档:Assets(官方资源目录,未选择第三方 crate)、Examples(最新分支的示例树)、ECS(Component、systems、Query、Startup、Update 与 .chain())、Plugins(Plugin、DefaultPlugins、MinimalPlugins 与 add_plugins)。
关联技能
- 前置:bevy-master(ECS 归属与调度)、bevy-ecs-composition(生成与查询形态)。
- 互补:bevy-state-machines(迷你游戏模式)、bevy-input-handling(本地设备,包含手柄)、bevy-game-loop-time-trial(当迷你游戏计时时)。
- 下游/消费者:无。本路由不拥有第二份实现。
- 主技能:bevy-master(Bevy 路由)。