一款受 Infinifactory 启发的 3D 方块工厂解谜游戏。
下面是目前最核心的两类可放置方块。工厂方块是解题时用的机关与产线;系统方块是出题时定义「从哪来、要到哪去、中间怎么加工」的规则。有些工厂方块会在运转时自动长出焊接点、钻头之类你看不见的附属部件。
同一种方块往往有变体(比如活塞和阻拦器),按 C 可以切换。
造好后会跟着工厂一起受力;很多机关通电了才会动。
| 方块 | 功能 |
|---|---|
| 平台方块 | 最基础的工厂方块用于连接结构 |
| 传送带 / 反向传送带 | 可以运输皮带上的结构。有时也会让自己移动 |
| 活塞 / 阻拦器 | 通电后会推出其前面的方块! |
| 抬升器 | 使其上方的结构获得悬浮效果 |
| 旋转器 / 逆向旋转器 | 能将结构进行旋转 |
| 焊接器 / 向下焊接器 | 将材料们焊接为一体! |
| 电线 | 用于连接电信号。 |
| 方块识别器 / 向下方块识别器 | 朝向面看到平台、材料或激光时,发出信号 |
| 钻头 | 给结构做雕刻 |
| 激光 | 通电时射出激光摧毁方块,也可用于激活方块识别器 |
| 镜子 | 可以反射激光 |
| 吸盘 | 通电时可牢牢吸住结构 |
- 方块传感器现在只会检测为平台方块和材料方块,而非所有方块。
- 新增吸盘、折射镜、面板灯等功能。方块传感器还会检测激光。
- 方块检测器不会给相邻的用电器供电。方块的可用连接面与模型更匹配。
- 没有计数器。
- 更自由的关卡自定义编辑器
用于制造谜题
| 方块 | 功能 |
|---|---|
| 生成块 | 按设定定时吐出材料 |
| 验收块 | 规定这一关要交什么货才算过 |
| 印花器 / 滚刷器 | 在材料表面盖章,后面的机关能认 |
| 转换器 | 根据面上的标记,把材料变成另一种 |
| 传送入口块 / 传送出口块 | 成对使用,把材料从入口送到出口 |
东西焊在一起之后,材料会跟着一整坨走;工厂机关铺好的连通关系在运行过程中一般不会再变。
模拟核心在独立 crate oif-sim;主 crate 负责表现桥接、UI、场景与 HTTP 调试。回合逻辑收敛到 simulate_turn()(四阶段),输出 TurnOutput;入口不得复制回合逻辑。
flowchart TB
subgraph runtime["主 crate"]
UI["UI 与输入<br/>game/ui · game/systems"]
Render["场景渲染<br/>scene/ · game/world"]
Bridge["表现桥接 + 预取<br/>sim_bridge/"]
HTTP["HTTP 调试<br/>debug_http/"]
end
subgraph core["crates/oif-sim"]
SimTurn["simulate_turn()<br/>四阶段回合"]
Session["SimSession"]
State["WorldBlocks · StructureState · …"]
end
UI --> Bridge
Render --> Bridge
Bridge --> SimTurn
Bridge --> Session
HTTP --> Session
SimTurn --> State
Session --> State
| 模块 | 职责 |
|---|---|
crates/oif-sim |
世界、方块 Meta/Behavior、simulate_turn、无头会话;TurnOutput 含运动 / 激光等纯数据 DTO |
sim_bridge/ |
表现编排 + 预取(present / SimulationWorker / TurnCache);会话类型 re-export 自 oif-sim |
| 运行时 | 入口 | 窗口 | 用途 |
|---|---|---|---|
| 游戏客户端 | cargo run |
有 | 游玩、编辑;预取 + 增量渲染 |
| 无头模拟 | cargo run --bin oif-debug-http |
无 | CI、脚本 |
HTTP 调试可嵌入(--debug-http)或独立无头;共用 debug_http/protocol.rs。详见 docs/report/architecture.md。
# 游戏客户端
cargo run
# 附带 HTTP 调试(默认 127.0.0.1:8765)
cargo run -- --debug-http
# 无头模拟 + HTTP(CI / 脚本)
cargo run --bin oif-debug-httpcargo run 后的参数写在 -- 后面。完整列表也可 cargo run -- --help。
| 参数 | 说明 |
|---|---|
--debug-http |
游戏内嵌 HTTP 调试,监听 127.0.0.1:8765 |
--debug-http=PORT / --debug-http-port PORT |
同上,指定端口 |
--load-save=PATH |
启动后直接加载存档并进入世界(客户端与无头均可用;支持 Puzzle / Solution / Free) |
--config=PATH |
使用指定 config.ron,而不是默认 saves/config.ron |
--language=en / --language=zh-CN |
本次启动覆盖 UI 语言(也接受 zh、chinese 等别名) |
--touch / --virtual-remote |
强制开启虚拟遥感(桌面调试触摸布局) |
-h / --help |
打印启动帮助并退出 |
--load-save 路径示例:
cargo run -- --load-save=Important_Test
cargo run -- --load-save=Important_Test/solutions/Solution1
cargo run -- --load-save=free_sandbox相对路径相对存档根目录;也可传绝对路径(会自动剥掉 saves 前缀)。谜题、解法与自由模式槽位写法见上。
常用组合:
# 桌面强制触摸遥感 + 直接进解法
cargo run -- --touch --load-save=Important_Test/solutions/Solution1
# 游戏内嵌调试 HTTP,自定义端口
cargo run -- --debug-http=9000
# 无头服务加载存档
cargo run --bin oif-debug-http -- --load-save=Important_Test --debug-http=8765环境变量(桌面端):
| 变量 | 说明 |
|---|---|
OPEN_INFINIFACTORY_ASSET_DIR |
覆盖资源目录 |
OPEN_INFINIFACTORY_SAVES_DIR |
覆盖存档目录 |
产物输出至 dist/。src/shared/platform.rs 统一资源与存档路径解析(见上方环境变量)。
| 平台 | 脚本 |
|---|---|
| macOS | scripts/package_macos_app.sh |
| Linux | scripts/package_linux.sh |
| Windows | scripts/package_windows.ps1 |
| Android | scripts/package_android.sh(环境准备) |
| Web | scripts/package_web.sh(输出 dist/web;需 ~/.cargo/bin/trunk) |
核心玩法、工厂与系统方块、增量渲染与 HTTP 调试已贯通;关卡工具和跨平台体验仍在打磨中。
- UI 字体使用 MiSans