Yoleck is a crate for having a game built with the Bevy game engine act as its own level editor.
- Same executable can launch in either game mode or editor mode, depending on the plugins added to the app.
- Write systems that create entities based on serializable structs - use same systems for both loading the levels and visualizing them in the editor.
- Entity editing is done with egui widgets that edit these structs.
| * Automatic UI generation for components with support for numeric, boolean, string, vector, color, enum, option, list, asset, and entity fields.
| * Entity linking system with automatic UI, filtering, and runtime UUID resolution. Supports drag-and-drop.
- Visual scene gizmo for camera orientation and control.
- Support for external plugins that offer more visual editing.
- One simple such plugin - Vpeol is included in the crate. It provides basic
entity selection, positioning with mouse dragging, and basic camera
control. It has two variants behind feature flags -
vpeol_2dandvpeol_3d.
- One simple such plugin - Vpeol is included in the crate. It provides basic
entity selection, positioning with mouse dragging, and basic camera
control. It has two variants behind feature flags -
- A knobs mechanism for more visual editing.
- Playtest the levels inside the editor.
- Multiple entity selection in the editor with the Shift key.
- Optional console system for displaying logs in the UI |
git clone https://github.com/dexsper/bevy-yoleck-fork
cd bevy-yoleckThen you can run the examples:
-
2D example:
cargo example2d
Or check out the WASM version: https://idanarye.github.io/bevy-yoleck/demos/example2d
Peek.2023-03-27.19-37.mp4
-
3D example:
cargo example3d
Or check out the WASM version: https://idanarye.github.io/bevy-yoleck/demos/example3d
Peek.2023-03-27.19-40.mp4
-
Multi-level example:
cargo doors_to_other_levels
Or check out the WASM version (gameplay only): https://idanarye.github.io/bevy-yoleck/demos/doors_to_other_levels
Peek.2023-11-25.00-49.mp4
Yoleck saves the levels in JSON files that have the .yol extension. A .yol
file's top level is a tuple (actually JSON array) of three values:
- File metadata - e.g. Yoleck version.
- Level data (placeholder - currently an empty object)
- List of entities.
Each entity is a tuple of two values:
- Entity metadata - e.g. its type.
- Entity componments - that's the user defined structs.
The reason tuples are used instead of objects is to ensure ordering - to guarantee the metadata can be read before the data. This is important because the metadata is needed to parse the data.
Yoleck generates another JSON file in the same directory as the .yol files
called index.yoli. The purpose of this file is to let the game know what
level are available to it (in WASM, for example, the asset server cannot look
at a directory's contents). The index file contains a tuple of two values:
- Index metadata - e.g. Yoleck version.
- List of objects, each contain a path to a level file relative to the index file.
| bevy | bevy-yoleck | bevy_egui |
|---|---|---|
| 0.18 | 0.31 | 0.39 |
| 0.17 | 0.30 | 0.38 |
| 0.17 | 0.29 | 0.37 |
| 0.16 | 0.28 | 0.36 |
| 0.16 | 0.27 | 0.35 |
| 0.16 | 0.26 | 0.34 |
| 0.15 | 0.25 | 0.33 |
| 0.15 | 0.24 | 0.32 |
| 0.15 | 0.23 | 0.31 |
| 0.14 | 0.22 | 0.28 |
| 0.13 | 0.21 | 0.27 |
| 0.13 | 0.20 | 0.26 |
| 0.13 | 0.19 | 0.25 |
| 0.12 | 0.18 | 0.24 |
| 0.12 | 0.16, 0.17 | 0.23 |
| 0.11 | 0.15 | 0.22 |
| 0.11 | 0.13 - 0.14 | 0.21 |
| 0.10 | 0.7 - 0.12 | 0.20 |
| 0.9 | 0.5, 0.6 | 0.19 |
| 0.9 | 0.4 | 0.17 |
| 0.8 | 0.3 | 0.15 |
| 0.7 | 0.1, 0.2 | 0.14 |
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.