# Room Lifecycle Sample

这个 sample 专门覆盖房间生命周期，不和 `StarterDemo` 混在一起。

它面向的问题是：

- 游戏开发者应该在什么阶段监听什么事件
- 什么时候调用 `ready`
- 怎样触发 `start game / finish game / rematch / leave room`
- 一局结束后不重启游戏，运行中换地图时怎么接 `onMapChanged`
- 玩家加入、离开、房主转移、队伍变化这些事件怎么接

## 建议场景配置

在同一个场景对象上挂：

- `IGPRuntimeManager`
- `IGPEventManager`
- `IGPRoomLifecycleSample`

## 当前覆盖的生命周期阶段

- desktop 启动后 bootstrap 到 hosted room
- room joined
- room updated
- map changed
- player joined
- player left
- host transferred
- team changed / initialized / status updated
- ready
- game started
- game ended
- rematch
- leave room

## 可直接调用的方法

- `RefreshRoom()`
- `SetReady(bool isReady = true)`
- `StartGame()`
- `FinishGame()`
- `RequestRematch()`
- `LeaveRoom()`
- `ChangeTeam()`

## 推荐验证顺序

1. 通过 Curio desktop 启动游戏。
2. 确认 `Room joined` 日志出现。
3. 观察自动 refresh 后的 `Room updated` 日志。
4. 调用 `SetReady()`。
5. 由 host 调用 `StartGame()`。
6. 观察 `Game started` 日志。
7. 游戏结束后调用 `FinishGame()`。
8. 调用 `RequestRematch()`。
9. 如果 desktop / lobby 支持同房间换地图，选择新地图后观察 `Map changed` 日志。
10. 最后调用 `LeaveRoom()`。

## 与 Quickstart 的区别

- `StarterDemo` 关注“最短接入路径”
- `RoomLifecycle` 关注“房间从加入到离开的完整阶段”

后续抽 `core` / `bridge` 时，房间生命周期 contract 会优先参考这个 sample。
