Vertical Slice Experimental.
Project has only started, there are frequent API changes, bugs, non-implemented features.
Good moment to add contribution and influence how Editor shapes up.
- highly and easily extensible level editor
- allow differently skilled people combine resources together into interactive elements
- Editor should be user-friendly
- easier for users familiar with Unity Editor, for this it should provide similar features when possible but not limited to them
- Editor should provide convenient access to editing assets and/or redirect into external apps
-
Editor UX happens through features
- Each feature provides specific UX solution with optional extensibility
-
On top level UX features are represented by window views
For more details see Contribution
- PrebuildStage - generates code for other stages
- DevStage - modifying app and editor code
- AuthoringStage - using running editor to configure assets
- BuildStage - converting app code & resources into shippable Build product
- RuntimeStage - app running
- prebuild - generator folder
- separate program that runs even before anything compiles
- editor, *_editor - editor folders
- editor is top level package with dependencies on everything else
- app folder - game code
- app package should not have any editor dependencies
- engine - core dependency for app and editor
- builds folder - build results with runnable application
- external - external dependencies folder
- library - cached compiled resources files
- odin-imgui - for Editor's interface rendering
- vendor:raylib - for Editor's window creation and graphics rendering
-
menu bar - customizable via @(menu_item=...) on proc
-
union serialization (#no_nil unions only)
-
Asset Pipeline - asset importer/loader
-
inspector view - edit selected object in scene
-
project inspector - preview and edit selected asset in project
-
hierarchy view - shows scene tree
-
project view - left pane is folder tree, right pane is selected folder contents
-
console view
-
scene view - view and edit scene contents
-
custom drawers
- custom property drawers - via @(property_drawer=...) on proc
- custom decorator drawers - via field tags
decor:procName(arg=value)
- Component menu - via @(component={menu="menu/path"}) on struct
- adds to Component menu bar and Add Component button popup
- if no menu path specified, type name is used
-
allow components to be outside engine package (in app package)
-
icons in hierarchy (nested scene, variant scene)
-
each camera has int order and render_commands buffer
-
Cameras scan scene trees for renderers to add render commands to commands buffers
- transforms have render layer field for camera culling
- then render commands buffer is applied
-
Scene view picking - click on a sprite/object in the Scene view to set it as the hierarchy selection
-
scene view gizmos
- scene view toolbar (move, rotate, scale)
-
png - Texture2D with N Sprites
-
ping reference object similar to Unity
- in scene
- in project
-
transform:
- use bit set + procs, instead of direct bool change
- consider making transform regular component (required or optional), node will hold all components
-
improve default types inspector UX
-
Asset search / filter in Project View A single text input that filters the visible files by name substring
-
run app with currently open scene state
-
improve transform context menu in hierarchy
- fix copy/paste/duplicate bugs
-
come up with more TODO and Considered features
-
clear clipboard completely on each copy call
-
keep improving memory guide
- must be explained simply as if for someone new to memory handling
-
Node graph editor for different use-cases
-
Task tracking with backlog, todo, etc.
-
decide shaders and rendering pipeline
-
some kind of type defaults fill only what json serialized data doesn't cover
-
doc generation
-
multiple views of same type support, with lock toggle
-
popup manager
- show serialized or in-memory asset inspector as popup with custom title
- override property drawer for custom popup look
- show serialized or in-memory asset inspector as popup with custom title
-
convert tween_free to cleanup_T
-
generalized serialization of Owned and Ref
-
generic Handle resolve and reset Handle when resolve fails
-
App buttons Bar
- ?Frame Step, Pause buttons
-
ability to switch Value/Ref field in inspector where valid
-
Run configurations - dropdown to select config that runs game (release/debug, etc.) when press Play
-
Ability to observe and edit app during its runtime
- maybe create app_world:^World in user context, load main scene into it and switch views into working with app_world, not editor world
-
Dirty flags for modified data
-
file watcher for rebuilding and asset updates
-
Convert resource into usable format at buildStage or runtimeStage
-
consider SceneFile to hold serialize blobs instead of real types

