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_bundle(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
sourceimpl 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
world::EntityRef, component::Component,
system::{Commands, Res, EntityCommands}
use bevy_scene_hook::{SceneHook, HookedSceneBundle};
#[derive(Clone)]
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_bundle(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
impl<T, U> AsBindGroupShaderType<U> for T where
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for T where
U: ShaderType,
&'a T: for<'a> Into<U>,
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
Return the T [ShaderType] for self. When used in [AsBindGroup]
derives, it is safe to assume that all images in self exist. Read more
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, 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. Read more
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read more
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. Read more
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. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber to this type, returning a
WithDispatch wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber to this type, returning a
WithDispatch wrapper. Read more