XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
6.15 KB
1.04 KB
README.md

Space Engineers Blueprint Editor

一款面向《Space Engineers(太空工程师)》的 Windows 蓝图查看与编辑工具。项目使用 WinUI 3 和 MVVM 构建,可读取游戏本地、Steam Cloud 与创意工坊缓存中的 .sbc 蓝图,并复用已安装游戏的定义与序列化程序集。

Important

项目仍处于早期开发阶段(当前项目版本为 0.1.0)。编辑或删除蓝图前,请先备份整个蓝图目录;本项目不是 Keen Software House 的官方工具。

文档导航

  • 用户指南:打开、查看、编辑、保存蓝图及常见问题。
  • 开发指南:环境准备、游戏定位、构建、运行与调试。
  • 架构说明:项目分层、启动过程、数据流与扩展点。
  • 贡献指南:提交代码或文档前的约定与检查清单。

主要能力

  • 自动发现 Steam 安装的《Space Engineers》,也可手动指定游戏目录。
  • 浏览本地、Steam Cloud 和创意工坊缓存蓝图,并按名称搜索。
  • 通过文件选择器或拖放打开任意 .sbc 蓝图。
  • 查看作者、文件大小、网格与方块数量、DLC 以及建造所需组件统计。
  • 按网格或方块组浏览方块,并通过属性树编辑基础字段。
  • 在 WebGL 三维视图中选择、移动、旋转、复制或删除方块,并支持撤销/重做。
  • 编辑网格 Skeleton 中的表面角点与面中心,实现装甲钣金形变。
  • 批量切换可破坏性、可编辑性、网格尺寸和轻/重装甲定义。
  • 浏览游戏中的方块、组件、物品和场景定义。
  • 提供中英文界面资源、主题、导航布局和缓存管理设置。

下图概括了应用处理蓝图时涉及的主要数据源:

flowchart LR
    User["用户"] -->|"选择或拖放 .sbc"| UI["WinUI 3 桌面应用"]
    BP["%APPDATA%/SpaceEngineers/Blueprints"] --> UI
    UI --> Loader["GameAssemblyLoader"]
    Loader --> Bin["游戏 Bin64 程序集"]
    UI --> Core["SpaceEngineersCore"]
    Core --> Content["游戏 Content 与定义"]
    Core --> Model["ObjectBuilder 蓝图对象"]
    Model --> Details["详情与材料统计"]
    Model --> Editor["属性、三维与钣金编辑"]
    Editor --> Save["核心序列化与原子替换"]
    Save --> Saved["bp.sbc 与 bp.sbcB5"]

运行要求

  • Windows 10 1809(Build 17763)或更高版本;建议使用 x64,并安装 Microsoft Edge WebView2 Runtime。
  • 已通过 Steam 安装《Space Engineers》。
  • 若从源码构建:Visual Studio 2022 与 .NET 8 SDK,并安装 Windows 应用开发相关组件。

游戏 DLL 不会提交到仓库,也不会复制到应用输出目录。构建和运行时都会直接从已安装游戏的 Bin64 加载它们,因此游戏更新后建议重新构建并做一次基本功能检查。

从源码开始

git clone https://github.com/XFEstudio/SpaceEngineersBlueprintEditorInWinUI.git
cd SpaceEngineersBlueprintEditorInWinUI
dotnet build SpaceEngineersBlueprintEditor.sln -c Debug -p:Platform=x64

若自动检测不到游戏,可显式传入 Bin64

dotnet build SpaceEngineersBlueprintEditor.sln -c Debug -p:Platform=x64 `
  -p:SpaceEngineersBinPath="D:\Games\SpaceEngineers\Bin64"

也可以设置环境变量后重新打开终端:

$env:SPACE_ENGINEERS_ROOT = "D:\Games\SpaceEngineers"
# 或:$env:SPACE_ENGINEERS_BIN = "D:\Games\SpaceEngineers\Bin64"

更完整的环境说明、检测顺序和故障排查见开发指南

快速使用

  1. 启动应用,等待游戏定义加载完成。
  2. .sbc 拖入首页,或从导航栏打开本地、云端、工坊蓝图列表。
  3. 在详情页检查蓝图信息、DLC、网格和组件统计。
  4. 进入编辑器,通过网格、方块组、属性树、三维视图或钣金视图修改内容。
  5. 使用“保存”写回当前 .sbc,或在三维页使用“另存为”创建新文件。

Caution

蓝图列表中的“删除”会直接删除对应蓝图文件夹;保存到已有文件也可能覆盖原内容。请在游戏未写入同一蓝图时操作,并事先保留副本。

蓝图目录

应用按《Space Engineers》的默认用户数据结构读取蓝图:

类型 默认目录
本地蓝图 %APPDATA%\SpaceEngineers\Blueprints\local
Steam Cloud 蓝图 %APPDATA%\SpaceEngineers\Blueprints\cloud
创意工坊缓存 %APPDATA%\SpaceEngineers\Blueprints\workshop\temp\Steam

应用会读取每个蓝图目录中的 bp.sbc 和可选的 thumb.png

项目组成

项目 作用 目标框架
SpaceEngineersBlueprintEditor WinUI 3 主程序、页面、ViewModel 与应用服务 net8.0-windows10.0.22621.0
SpaceEngineersBlueprintEditor.GameAssemblyLoader 查找游戏目录并解析托管/原生依赖 net48;net8.0
SpaceEngineersBlueprintEditor.SpaceEngineersCore 初始化游戏定义、读取 ObjectBuilder、图像与网格转换支持 net48
SpaceEngineersBlueprintEditor.BlueprintConverter 独立的 JSON → .sbc 辅助转换器;主界面当前直接调用核心保存 API net48
SpaceEngineersBlueprintEditor.Installer WPF 安装与升级程序 net8.0-windows
SpaceEngineersBlueprintEditor.Test 开发期控制台试验项目,不是标准 dotnet test 测试套件 net8.0

当前限制

  • 仅支持 Windows;核心逻辑依赖已安装游戏的程序集和内容文件。
  • 主编辑流程面向船舶蓝图中的第一个 ShipBlueprint 定义。
  • 三维视图使用方块定义包围盒而不是游戏模型;占位检测也不能覆盖所有多格方块重叠情形。
  • 网格尺寸与轻/重甲转换只替换能从当前游戏定义中找到配对项的方块,未支持方块会保留并计数。
  • 三维视图的撤销/重做只覆盖该视图中的移动、旋转、复制和删除,不覆盖属性、钣金或批量转换。
  • SE Toolbox 格式导出入口尚未接通完整实现。
  • 核心层为无窗口加载游戏定义而实现了最小平台/渲染桩,未覆盖的游戏接口可能抛出 NotImplementedException
  • 仓库暂未提供可由 dotnet test 发现的自动化测试项目。

技术栈

  • C#、.NET 8 与 .NET Framework 4.8
  • WinUI 3 / Windows App SDK
  • WPF(安装器)
  • CommunityToolkit.Mvvm
  • Space Engineers / VRage ObjectBuilder 与定义系统

参与贡献

欢迎提交 Issue 和 Pull Request。开始前请先阅读贡献指南,并避免提交《Space Engineers》的 DLL、游戏资源或个人蓝图数据。

许可证与声明

本项目以 MIT License 发布。《Space Engineers》及相关名称、资源和程序集的权利归其各自权利人所有;本仓库不分发游戏文件。

LICENSE.txt MIT

MIT License

Copyright (c) 2024 XFEstudio

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

CONTRIBUTING.md

贡献指南

感谢你为 Space Engineers Blueprint Editor 提交改进。项目同时跨越 WinUI 3、WPF、.NET 8、.NET Framework 4.8 和《Space Engineers》游戏 API;较小、目标明确且可复现的变更最容易审查。

开始之前

  1. 阅读 README开发指南架构说明
  2. 搜索已有 Issue,确认问题没有被重复报告。
  3. 对大范围架构调整,先用 Issue 说明目标、兼容性影响和迁移方式。
  4. 准备一个无 Mod、体积小且可公开的测试蓝图,保留原始副本。

报告问题

一个可操作的问题报告应包含:

  • 应用版本或提交哈希。
  • Windows 与《Space Engineers》版本。
  • 游戏安装来源和非默认路径信息;不要粘贴隐私敏感的完整用户名路径。
  • 复现步骤、期望行为和实际行为。
  • 错误文本、相关日志或截图。
  • 蓝图是否使用 DLC、Mod、旧版方块或 Steam Cloud。
  • 若能安全共享,提供最小复现蓝图;提交前清理个人信息。

请勿上传游戏 DLL、Content 资源、Steam 凭据或无权分发的工坊内容。

开发流程

  1. 从最新目标分支创建功能分支。
  2. 只修改解决问题所需的文件,保留工作区中不相关的用户改动。
  3. 遵循现有命名、可空性和 MVVM 模式。
  4. 同时更新受影响的中英文资源和文档。
  5. Debug|x64 下构建并完成相应手工验证。
  6. 提交简洁、可独立理解的 commit。

推荐的基本验证命令:

dotnet build SpaceEngineersBlueprintEditor.sln -c Debug -p:Platform=x64 --nologo

游戏路径配置见开发指南的游戏目录检测章节

代码约定

通用原则

  • 启用并尊重可空引用类型,不用无意义的 ! 隐藏真实问题。
  • 优先使用清晰的类型和方法名;注释解释原因、约束和游戏 API 怪异点。
  • 不在 UI 线程执行蓝图反序列化、定义扫描或图像转换等重任务。
  • 对文件覆盖、递归删除、升级和缓存清理等操作提供明确确认与错误反馈。
  • 新异步流程应考虑异常传播、重复触发和页面离开后的生命周期。
  • 不把本机绝对路径、服务器凭据或个人配置写入源码。

WinUI 与 MVVM

  • 页面状态和命令放在 ViewModel;只有控件事件桥接或窗口句柄等 UI 专属逻辑留在 code-behind。
  • 使用现有 ServiceManager、导航参数服务和消息/加载服务,避免新建平行的全局状态系统。
  • 用户可见文本必须本地化。XAML 优先使用 x:Uid,C# 使用现有 GetLocalized() 方式。
  • 大集合使用延迟加载或增量处理,避免在主线程一次性反射完整蓝图树。

游戏 API 与核心层

  • 必须在首次使用游戏类型前初始化 GameAssemblyLoader
  • 游戏程序集引用保持 Private=false,不要复制或提交 Bin64 DLL。
  • SpaceEngineersCore 面向 net48;使用新 C# 特性前确认目标框架所需的编译器辅助类型。
  • 对未知、Mod 或版本不匹配的定义采用可诊断的降级行为,不要静默生成无效方块。
  • 修改 InnerModel 平台/渲染桩时,只实现调用路径需要的最小语义,并记录触发原因。

文件与保存

  • 所有保存操作都应尽量使用同目录临时文件和原子替换。
  • 保留或明确处理游戏的 sbcB5 备份语义。
  • 只反序列化本应用生成的带类型 JSON;不要把 TypeNameHandling 用于不受信任输入。
  • 测试删除、覆盖或迁移逻辑时使用临时目录,不使用真实玩家蓝图目录。

三维与钣金编辑

  • 修改三维消息协议时同步更新 C# 场景模型、ViewModel、WebView2 桥接和本地 HTML。
  • 本地 WebView 资源不得引入远程脚本;保持虚拟主机映射和消息输入边界清晰。
  • 变换方块时同步维护方块组等坐标引用,并验证多格方块占位。
  • Skeleton 偏移必须限制在游戏可编码范围,中性 Bone 应移除而不是重复写入。
  • 明确撤销/重做覆盖范围,不要让界面暗示未记录的操作可以撤销。

文档约定

  • Markdown 使用相对链接,确保 GitHub 仓库和本地查看都能工作。
  • Mermaid 使用 GitHub 支持的语法;节点中包含空格、括号或标点时使用引号。
  • 功能说明以已经接入 UI 且可验证的行为为准,实验代码要标注状态。
  • 构建命令使用 PowerShell 示例,并说明 x64 与游戏路径要求。
  • 改动功能、路径、项目结构或限制时,同步更新 README 和对应专题文档。

验证清单

根据改动范围完成以下项目:

  • 解决方案 Debug|x64 构建无错误。
  • 没有新增或提交游戏 DLL、个人蓝图、缓存、binobj 或本机配置。
  • 应用能自动或通过显式路径加载游戏。
  • 受影响的蓝图可读取、另存并在游戏测试世界中验证。
  • 若修改编辑器,三维选择/变换/撤销和钣金 Bone 写入均已用测试副本验证。
  • 对未知定义、缺文件和无效路径有可理解的错误信息。
  • 英文与简体中文资源键同步。
  • Markdown 链接、代码块、表格和 Mermaid 图可渲染。
  • 当前仓库没有标准自动化测试覆盖的部分已说明手工验证方法。

Pull Request 说明

PR 描述请包含:

  • 解决了什么问题,为什么这样实现。
  • 影响的项目和用户流程。
  • 验证环境与验证结果。
  • UI 变更前后截图或短视频。
  • 蓝图格式、保存兼容性、游戏版本或发布布局风险。
  • 尚未解决的问题和后续工作。

尽量避免把重构、依赖升级、格式化和功能修改混在同一个 PR 中。

许可证

提交代码或文档即表示你有权贡献这些内容,并同意其按仓库的 MIT License 分发。