Bevy Scene hook
A proof of concept for adding components ad-hoc within code to entities
spawned through scenes (such as gltf files) in the bevy game engine.
If you don't mind adding such a small dependency to your code rather than copy/pasting the code as a module, you can get it from crates.io.
Usage
[]
= "3.1"
The following snippet of code is extracted from Warlock's Gambit source code.
It loads the scene.glb file when the game starts. When the scene is fully loaded,
the closure passed to with_comp_hook is ran for each entity with a Name component
present in the scene. We add a Graveyard component to the Entity containing the
SceneHook, so that it can later be checked for whether the scene completed loading.
It is possible to name object in glb scenes in blender using the Outliner
dock (the tree view at the top right) and double-clicking object names.
;
;
Change log
1.1.0: Addis_loadedmethod toSceneInstance1.2.0: Add theworldmodule containing aSceneHooktrait that has exclusive world access. Useful if you want access to assets for example.2.0.0: Breaking: bump bevy version to0.7(you should be able to upgrade from1.2.0without changing your code)3.0.0: Breaking: completely rework the crate.- Remove the
worldmodule, as the base hook method has become much more powerful. - Rename
SceneHooktoHook, nowHookhas a unique method to implement. - You don't have to add any system yourself, now you have to add the
HookPluginplugin to your app. - Move the API exclusively to a new
SystemParam:HookingSceneSpawner. Please use that parameter to add and remove scenes that contain hooks. (please tell if you you accidentally spell itHonkingSceneSpawnermore than once :duck:) - Moved the
when_spawnedrun criteria to theis_scene_hookedfunction exposed at the root of the crate, theHookedSceneStatesystem parameter or theSceneLoadedcomponent. Please use any of those three instead ofwhen_spawned. - Now supports passing closures as hooks, instead of having to define a trait each time.
- Now supports adding multiple of the same scene! Doesn't handle hot-reloading, but that's alright since bevy's scene hot-reloading is currently broken anyway :D
- Remove the
3.1.0: makerun_hookssystem public so that it's possible to add it to any stage you want in relation to any other system you want.
Version matrix
| bevy | latest supporting version |
|---|---|
| 0.7 | 3.1.0 |
| 0.6 | 1.2.0 |
License
This library is licensed under Apache 2.0.