From 747d4dcf19327acf62c33f6817a31342ec944f4d Mon Sep 17 00:00:00 2001 From: SeanOMik Date: Mon, 12 Feb 2024 20:04:50 -0500 Subject: [PATCH] scripting: implement querying for resources from lua --- lyra-scripting/src/lua/world.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lyra-scripting/src/lua/world.rs b/lyra-scripting/src/lua/world.rs index 95ec3e8..f1875e5 100644 --- a/lyra-scripting/src/lua/world.rs +++ b/lyra-scripting/src/lua/world.rs @@ -1,4 +1,4 @@ -use std::{sync::Arc, ptr::NonNull, any::Any, ops::Deref}; +use std::{sync::{Arc, RwLock}, ptr::NonNull, any::Any, ops::Deref}; use lyra_ecs::query::dynamic::QueryDynamicType; use lyra_reflect::{TypeRegistry, ReflectWorldExt, RegisteredType}; @@ -6,7 +6,7 @@ use mlua::{AnyUserDataExt, IntoLua, IntoLuaMulti}; use crate::{ScriptWorldPtr, ScriptEntity, ScriptDynamicBundle, ScriptBorrow}; -use super::{ReflectedIterator, DynamicViewIter, FN_NAME_INTERNAL_REFLECT_TYPE, reflect_user_data, ReflectLuaProxy}; +use super::{ReflectedIterator, DynamicViewIter, FN_NAME_INTERNAL_REFLECT_TYPE, reflect_user_data, ReflectLuaProxy, FN_NAME_INTERNAL_REFLECT}; impl<'lua> mlua::FromLua<'lua> for ScriptEntity { fn from_lua(value: mlua::Value<'lua>, _lua: &'lua mlua::Lua) -> mlua::Result { @@ -165,6 +165,24 @@ impl mlua::UserData for ScriptWorldPtr { .call_function::<_, ScriptBorrow>(FN_NAME_INTERNAL_REFLECT_TYPE, ()) .expect("Type does not implement 'reflect_type' properly"); + //if let Some(data) = reflect.data { + /* let res = reflect.reflect_branch.as_resource_unchecked(); + if let Some(res_ptr) = res.reflect_arc(this.as_mut()) { + let reg_type = this.as_ref().get_type::(reflect.reflect_branch.reflect_type_id()) + .unwrap(); + let proxy = reg_type.get_data::() + .expect("Type does not have ReflectLuaProxy as a TypeData"); + + //let res = Arc::new(RwLock::new(data.as_any_box())) + (proxy.fn_as_uservalue_ref)(lua, res_ptr) + .and_then(|ud| ud.into_lua(lua)) + + //Ok(mlua::Value::Nil) + } else { + Ok(mlua::Value::Nil) + } */ + + let res = reflect.reflect_branch.as_resource_unchecked(); if let Some(res_ptr) = res.reflect_ptr(this.as_mut()) { //.expect("Failed to find resource pointer in world!");