runservice

This commit is contained in:
Quaternions 2024-10-17 11:33:20 -07:00
parent 6f0749f827
commit bd38c6f1e4
2 changed files with 29 additions and 4 deletions

View File

@ -377,12 +377,13 @@ static CLASS_FUNCTION_DATABASE:CFD=phf::phf_map!{
"GetService"=>cf!(|lua,_this,service:mlua::String|{ "GetService"=>cf!(|lua,_this,service:mlua::String|{
dom_mut(lua,|dom|{ dom_mut(lua,|dom|{
//dom.root_ref()==this.referent ? //dom.root_ref()==this.referent ?
match &*service.to_str()?{ let service=&*service.to_str()?;
"Lighting"=>{ match service{
let referent=find_first_child_of_class(dom,dom.root(),"Lighting") "Lighting"|"RunService"=>{
let referent=find_first_child_of_class(dom,dom.root(),service)
.map(|instance|instance.referent()) .map(|instance|instance.referent())
.unwrap_or_else(|| .unwrap_or_else(||
dom.insert(dom.root_ref(),InstanceBuilder::new("Lighting")) dom.insert(dom.root_ref(),InstanceBuilder::new(service))
); );
Ok(Instance::new(referent)) Ok(Instance::new(referent))
}, },
@ -504,6 +505,11 @@ type LUD=phf::Map<&'static str,// Class name
> >
>; >;
static LAZY_USER_DATA:LUD=phf::phf_map!{ static LAZY_USER_DATA:LUD=phf::phf_map!{
"RunService"=>phf::phf_map!{
"RenderStepped"=>|lua|{
lua.create_any_userdata(super::script_signal::ScriptSignal::new())
},
},
}; };
#[derive(Default)] #[derive(Default)]
pub struct InstanceValueStore{ pub struct InstanceValueStore{

View File

@ -120,4 +120,23 @@ impl Runnable<'_>{
} }
Ok(()) Ok(())
} }
#[cfg(feature="run-service")]
pub fn run_service_step(&self)->Result<(),mlua::Error>{
let render_stepped=super::instance::dom_mut(&self.lua,|dom|{
let run_service=super::instance::find_first_child_of_class(dom,dom.root(),"RunService").ok_or_else(||mlua::Error::runtime("RunService missing"))?;
super::instance::instance_value_store_mut(&self.lua,|instance_value_store|{
//unwrap because I trust my find_first_child_of_class function to
let mut instance_values=instance_value_store.get_or_create_instance_values(run_service).ok_or_else(||mlua::Error::runtime("RunService InstanceValues missing"))?;
let render_stepped=instance_values.get_or_create_value(&self.lua,"RenderStepped")?;
//let stepped=instance_values.get_or_create_value(&self.lua,"Stepped")?;
//let heartbeat=instance_values.get_or_create_value(&self.lua,"Heartbeat")?;
Ok(render_stepped)
})
})?;
if let Some(render_stepped)=render_stepped{
let signal:&super::script_signal::ScriptSignal=&*render_stepped.borrow()?;
signal.fire(mlua::MultiValue::new());
}
Ok(())
}
} }