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.
§Access to World
A variant of SceneHook
exists with access to the scene Entity
and the &World
,
check crate::reload::Hook
if you need such features.
§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
.
§Access to World
A variant of SceneHook
exists with access to the scene Entity
and the &World
,
check crate::reload::Hook
if you need such features.
§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§
Source§impl Component for SceneHook
impl Component for SceneHook
Source§type Storage = TableStorage
type Storage = TableStorage
A marker type indicating the storage type used for this component.
This must be either
TableStorage
or SparseStorage
.Auto Trait Implementations§
impl Freeze for SceneHook
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
Source§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) -> C
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§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.Source§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.