Struct bevy_scene_hook::SceneHook
source · pub struct SceneHook { /* private fields */ }Expand description
Add this as a component to any entity to run hook
when the scene is loaded.
You can use it to add your own non-serializable components to entites present in a scene file.
A typical usage is adding animation, physics collision data or marker components to a scene spawned from a file format that do not support it.
Example
use bevy_scene_hook::{SceneHook, HookedSceneBundle};
enum PileType { Drawing }
#[derive(Component)]
struct Pile(PileType);
#[derive(Component)]
struct Card;
fn load_scene(mut cmds: Commands, asset_server: Res<AssetServer>) {
cmds.spawn(HookedSceneBundle {
scene: SceneBundle { scene: asset_server.load("scene.glb#Scene0"), ..default() },
hook: SceneHook::new(|entity, cmds| {
match entity.get::<Name>().map(|t|t.as_str()) {
Some("Pile") => cmds.insert(Pile(PileType::Drawing)),
Some("Card") => cmds.insert(Card),
_ => cmds,
};
}),
});
}Implementations§
source§impl SceneHook
impl SceneHook
sourcepub fn new<F: Fn(&EntityRef<'_>, &mut EntityCommands<'_, '_, '_>) + Send + Sync + 'static>(
hook: F
) -> Self
pub fn new<F: Fn(&EntityRef<'_>, &mut EntityCommands<'_, '_, '_>) + Send + Sync + 'static>( hook: F ) -> Self
Add a hook to a scene, to run for each entities when the scene is loaded.
The hook adds [Component]s or do anything with entity in the spawned
scene refered by EntityRef.
Example
use bevy_scene_hook::{SceneHook, HookedSceneBundle};
#[derive(Clone, Resource)]
struct DeckAssets { player: Handle<DeckData>, oppo: Handle<DeckData> }
fn hook(decks: &DeckAssets, entity: &EntityRef, cmds: &mut EntityCommands) {}
fn load_scene(mut cmds: Commands, decks: Res<DeckAssets>, assets: Res<AssetServer>) {
let decks = decks.clone();
cmds.spawn(HookedSceneBundle {
scene: SceneBundle { scene: assets.load("scene.glb#Scene0"), ..default() },
hook: SceneHook::new(move |entity, cmds| hook(&decks, entity, cmds)),
});
}Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for SceneHook
impl Send for SceneHook
impl Sync for SceneHook
impl Unpin for SceneHook
impl !UnwindSafe for SceneHook
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere C: Component,
fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId) )
unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> Cwhere F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a, Aligned>,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.