https://github.com/rustgd/specs-hierarchy
A generic scene graph extension for Specs
https://github.com/rustgd/specs-hierarchy
ecs rust scene-graph
Last synced: 10 months ago
JSON representation
A generic scene graph extension for Specs
- Host: GitHub
- URL: https://github.com/rustgd/specs-hierarchy
- Owner: rustgd
- License: apache-2.0
- Created: 2018-05-08T14:49:15.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-07-22T23:00:38.000Z (almost 6 years ago)
- Last Synced: 2025-06-30T14:52:39.588Z (11 months ago)
- Topics: ecs, rust, scene-graph
- Language: Rust
- Homepage:
- Size: 64.5 KB
- Stars: 37
- Watchers: 8
- Forks: 16
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# `specs-hierarchy`
[![Build Status][bi]][bl] [![Crates.io][ci]][cl] [![Gitter][gi]][gl] ![MIT/Apache][li] [![Docs.rs][di]][dl] ![LoC][lo]
[bi]: https://travis-ci.org/rustgd/specs-hierarchy.svg?branch=master
[bl]: https://travis-ci.org/rustgd/specs-hierarchy
[ci]: https://img.shields.io/crates/v/specs-hierarchy.svg
[cl]: https://crates.io/crates/specs-hierarchy/
[li]: https://img.shields.io/crates/l/specs-hierarchy.svg
[di]: https://docs.rs/specs-hierarchy/badge.svg
[dl]: https://docs.rs/specs-hierarchy/
[gi]: https://badges.gitter.im/slide-rs/specs.svg
[gl]: https://gitter.im/slide-rs/specs
[lo]: https://tokei.rs/b1/github/rustgd/specs-hierarchy?category=code
Scene graph type hierarchy abstraction for use with [`specs`].
Builds up a `Hierarchy` resource, by querying a user supplied `Parent` component.
Requires the component to be `Tracked`.
Will send modification events on an internal `EventChannel`. Note that `Removed` events
does not mean the `Parent` component was removed from the component storage, just that the
`Entity` will no longer be considered to be a part of the `Hierarchy`. This is because the user
may wish to either remove only the component, the complete `Entity`, or something completely
different. When an `Entity` that is a parent gets removed from the hierarchy, the full tree of
children below it will also be removed from the hierarchy.
[`specs`]: https://github.com/slide-rs/specs
## Usage
```toml
# Cargo.toml
[dependencies]
specs-hierarchy = "0.5.1"
```
## Example
```rust
use specs::prelude::{Component, DenseVecStorage, Entity, FlaggedStorage};
use specs_hierarchy::{Hierarchy, Parent as HParent};
/// Component for defining a parent entity.
///
/// The entity with this component *has* a parent, rather than *is* a parent.
#[derive(Debug, Clone, Eq, Ord, PartialEq, PartialOrd)]
pub struct Parent {
/// The parent entity
pub entity: Entity,
}
impl Component for Parent {
type Storage = FlaggedStorage>;
}
impl HParent for Parent {
fn parent_entity(&self) -> Entity {
self.entity
}
}
```
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
## Contribution
We are a community project that welcomes contribution from anyone. If you're interested in helping out, you can contact
us either through GitHub, or via [`gitter`](https://gitter.im/slide-rs/specs).
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.