# GameMaker Runtime

GameMaker Studio 2 Windows 运行时。所有 GMS2 开发者面向的公开函数都定义在：

- [`igp_gms2_windows_runtime.gml`](./igp_gms2_windows_runtime.gml)

## 公开 API

完整参考见 [`API-SHAPE.md`](./API-SHAPE.md)。快速索引：

| 函数 | 用途 |
| --- | --- |
| `igp_init(app_id, options?)` | 初始化 SDK，自动附着本地 desktop session |
| `igp_shutdown()` | 断开并释放资源 |
| `igp_update()` | 每帧调用一次，驱动事件泵 |
| `igp_poll_event()` | 取一条待处理事件；无事件返回 `undefined` |
| `igp_get_state_snapshot()` | 当前状态快照（连接 / desktop 通道 / attach 校验 / 授权 / 待处理事件数） |
| `igp_get_authorization_state()` | 当前授权状态 |
| `igp_request_game_authorization(...)` | 主动请求授权 |
| `igp_get_current_anti_addiction_status()` | 当前防沉迷状态快照 |
| `igp_refresh_anti_addiction_status(...)` | 主动刷新防沉迷状态 |
| `igp_unlock_achievement(...)` | 解锁成就 |
| `igp_report_achievement_progress(...)` | 上报成就进度 |
| `igp_clear_achievements(...)` | 清除当前游戏全部成就 |
| `igp_get_desktop_capabilities(callback)` | 查询 desktop 端能力集 |
| `igp_get_last_error()` | 最近一次错误（`{ code, message }` 或 `undefined`） |

## 默认值

- `desktop_pipe_endpoint` 默认使用内置连接策略；仅特殊调试时手动覆盖
- `desktop_launch_command` 留空时按 Unity 同口径自动发现本地 desktop 可执行路径，并在首次 attach 失败时自动重试拉起

常规接入只需提供 `app_id`；两项 `desktop_*` 配置仅用于调试或特殊发行覆盖。

如果某个构建不启用 IGP SDK，建议在游戏项目里用自己的配置变量控制，不调用 `igp_init(...)`。这样可以保留 runtime 脚本和 DLL，但不启动 IGP 连接、授权、成就或实名认证与防沉迷流程。

## 首期不支持

`room` / `realtime` / 对战相关能力**不在 0.0.1**。相关事件类型也不会产生。

## 如何接入

见 [`../../../samples/gamemaker/windows-auth-achievements/INTEGRATION.md`](../../../samples/gamemaker/windows-auth-achievements/INTEGRATION.md)。

## 边界说明

GML 与原生桥之间的责任划分见 [`../../../docs/architecture/gamemaker-windows-boundary.md`](../../../docs/architecture/gamemaker-windows-boundary.md)。
