5个版本 (3个重大更改)

0.4.0 2018年12月29日
0.3.0 2018年10月27日
0.2.0 2018年10月15日
0.1.1 2018年10月4日
0.1.0 2018年10月4日

#1561解析器实现

每月30次 下载

MIT/Apache

6MB
980

amethyst-editor-sync

Build Status Join us on Discord MIT/Apache

一个库,允许Amethyst游戏通过IPC与编辑器通信。此项目与Electron编辑器一起开发,但旨在足够通用,以促进其他编辑器前端的发展。

设置和用法

以下是如何设置Amethyst游戏以与编辑器通信的示例

extern crate amethyst;
extern crate amethyst_editor_sync;
extern crate serde;
extern crate tap;

use amethyst::prelude::*;
use amethyst::ecs::prelude::*;
use amethyst_editor_sync::*;
use serde::*;
use tap::*;

fn main() -> Result<(), amethyst::Error> {
    // Create a `SyncEditorBundle` which will register all necessary systems to serialize and send
    // data to the editor.
    let editor_bundle = SyncEditorBundle::new()
        // Register the default types from the engine.
        .tap(SyncEditorBundle::sync_default_types)
        // Register the components and resources specified above.
        .tap(|bundle| sync_components!(bundle, Foo))
        .tap(|bundle| sync_resources!(bundle, BarResource));

    let _game_data = GameDataBuilder::default()
        .with_bundle(editor_bundle)?;
    Ok(())
}

// Make sure you enable serialization for your custom components and resources!
#[derive(Serialize, Deserialize)]
struct Foo {
    bar: usize,
    baz: String,
}

impl Component for Foo {
    type Storage = DenseVecStorage<Self>;
}

#[derive(Serialize, Deserialize)]
struct BarResource {
    bar: usize,
}

一旦使用amethyst-editor-sync设置好您的游戏,它将自动连接到您机器上运行的任何编辑器实例。设置完成后,您可以使用Electron编辑器进行可视化。

动机和哲学

本项目的目标是提供一个功能性的80%解决方案,用于从Amethyst游戏向编辑器/可视化工具发送任意状态数据的问题。它不尝试执行任何魔法来检测用户定义的组件,而是要求开发者明确列出他们希望在编辑器中看到的所有组件。这会在设置编辑器支持时引入相当多的样板代码,但意味着我们有一个今天可以工作的功能解决方案。目标是该项目将作为占位符,直到我们可以制定一个更少的样板代码解决方案来注册用户定义的组件。

该项目还基于多进程架构,游戏独立于编辑器运行,并通过IPC进行通信。这是一个故意的设计选择,以提高编辑器的鲁棒性:如果游戏崩溃,它不能崩溃或损坏编辑器。

贡献

您需要安装稳定版本的Rust,可以通过rustup进行安装。安装最新的稳定工具链(如果您还没有安装稳定工具链),然后克隆仓库。您可以通过运行以下命令来测试pong示例:cargo run --example pong。如果您需要测试编辑器中的功能,可以使用Electron编辑器

对于任何功能请求,请打开GitHub问题跟踪器中的问题。拉取请求也非常受欢迎 ❤️

所有贡献者都应遵循Rust行为准则

状态

该项目处于非常早期的发展阶段,应被视为实验性的。

目前它支持通过UDP与编辑器应用程序通信。整个世界状态被序列化为JSON字符串,并在每一帧广播到编辑器。它目前支持向编辑器发送任意组件和资源,并且可以为任何实现Serialize的组件或资源这样做。但是,用户必须手动为在编辑器中可视化的每个组件和资源类型设置同步。

目标是支持通过IPC进行通信,以最小化开销,并使用二进制协议来加快序列化和提高吞吐量。当前的架构允许并行序列化每个组件/资源类型,因此我们应该继续保持这一特性。

依赖关系

~36–48MB
~657K SLoC