engine/render: lua userdata for resources/renderables
parent
f0dc1cca3c
commit
6055a034f0
|
@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue