engine/render: lua userdata for resources/renderables

master
q3k 2021-04-07 15:17:17 +00:00
parent f0dc1cca3c
commit 6055a034f0
2 changed files with 27 additions and 0 deletions

View File

@ -110,6 +110,7 @@ pub enum Renderable {
Light(ResourceID<Light>),
Mesh(ResourceID<Mesh>, ResourceID<Material>),
}
impl mlua::UserData for Renderable {}
impl Component for Renderable {
fn id(&self) -> ecs::component::ID {
@ -119,3 +120,27 @@ impl Component for Renderable {
Box::new(self.clone())
}
}
struct RenderableBindings;
impl ComponentLuaBindings for RenderableBindings {
fn globals<'a>(&self, lua: &'a mlua::Lua) -> mlua::Table<'a> {
let res = lua.create_table().unwrap();
res.set("new_mesh", lua.create_function(|_, args: (ResourceID<Mesh>, ResourceID<Light>)| {
Ok(1337)
}).unwrap()).unwrap();
res
}
fn idstr(&self) -> &'static str {
"Renderable"
}
fn id(&self) -> ecs::component::ID {
ecs::component::component_id::<Renderable>()
}
fn any_into_dyn<'a>(&self, ud: &'a mlua::AnyUserData) -> Option<Box<dyn Component>> {
match ud.borrow::<Renderable>() {
Ok(v) => Some(Box::new(Renderable::clone(&v))),
Err(_) => None,
}
}
}

View File

@ -80,6 +80,8 @@ pub struct ResourceID<T: Resource> {
phantom: std::marker::PhantomData<T>,
}
impl <T: Resource> mlua::UserData for ResourceID<T> {}
impl <T: Resource> Clone for ResourceID<T> {
fn clone(&self) -> ResourceID<T> {
ResourceID {