Crates.io | shipyard_scenegraph |
lib.rs | shipyard_scenegraph |
version | 0.6.1 |
source | src |
created_at | 2020-03-03 20:03:05.194352 |
updated_at | 2023-10-19 16:51:32.41346 |
description | Scenegraph for Entity Component System |
homepage | |
repository | https://github.com/dakom/shipyard-scenegraph |
max_upload_size | |
id | 215104 |
size | 93,530 |
Scenegraph crate for shipyard ECS
Builds on and re-exports shipyard-hierarchy
Generic over the specific number types and interop with third-party math libraries (option to bring your own math)
for now - point directly at the repo... latest updates aren't on crates.io since they depend on shipyard master branch
There are robust examples in the tests. The live demo is purposefully kept to a minimum 2d example, rather than eyecandy, in order to make it easy to learn from too.
In all cases:
First, decide on your math library - out of the box is a very small native lib, as well as interop with nalgebra
f64. Enable the appropriate feature (e.g. native_math
or nalgebra_math
).
Use shipyard_scenegraph::prelude::*
everywhere
Call shipyard_scenegraph::init::init_scenegraph()
to create the root node
To add entities to the tree, borrow SceneGraphStoragesMut
and then call spawn_child_*()
on that.
To update things - mutably borrow Translation
, Rotation
, Scale
, and Origin
. There's a helper view for updating single entities too (TrsStoragesMut
). Alternatively - work with LocalTransform directly (but note that it currently does not backpropogate. see https://github.com/dakom/shipyard-scenegraph/issues/22)
Run local_transform_sys
and world_transform_sys
systems (i.e. once per renderer or physics tick), and all the Local and World transforms will be propogated.
immutably borrow WorldTransform
and render
Components:
Systems:
Custom Views:
Aliases are provided for the supported math interop libs and these concrete types are in the prelude.
Core tests: cargo test --features native_math -- --nocapture
Nalgebra compat tests: cargo test --features nalgebra_math -- --nocapture
A minimal and efficient math library is included via the native_math
feature, and it's good enough for little demos - however, it's very minimal with only the operations needed to handle basic transform stuff (matrix multiplication, rotation from quaternion, etc.)
If you're using nalgebra, you can enable the nalgebra_math
feature to get that as the underlying types.
Other libraries can be added very easily.
If using multiple math libs within scenegraph for some reason, don't import from the prelude, rather import from the math module directly (this is very uncommon - not even done in tests)
Since this builds on shipyard-hierarchy, the same methods for traversing and updating the hierarchy are available.
Scenegraph gives the Parent and Child components a tag struct SceneGraph
and shouldn't conflict with any other hierarchies, even in the same world.