strafe-client/src/script.rs

42 lines
937 B
Rust
Raw Normal View History

2024-09-17 01:54:04 +00:00
use rbx_dom_weak::types::Ref;
2024-09-18 01:00:17 +00:00
#[derive(Debug)]
2024-09-17 01:54:04 +00:00
pub enum Error{
2024-09-18 00:16:57 +00:00
Runner(mlua::Error),
2024-09-17 01:54:04 +00:00
NoScript,
NoSource,
}
2024-09-18 01:00:17 +00:00
impl Error{
pub fn print(self){
match self{
Self::Runner(mlua::Error::RuntimeError(s))=>{
2024-09-18 01:26:30 +00:00
println!("lua error: {s}");
2024-09-18 01:00:17 +00:00
},
other=>println!("{:?}",other),
}
}
}
2024-09-17 01:54:04 +00:00
pub struct Script{
script:Ref,
}
impl Script{
pub const fn new(script:Ref)->Self{
Self{script}
}
pub fn run(&self,context:&mut crate::context::Context)->Result<(),Error>{
// grab source
let source={
let instance=context.dom.get_by_ref(self.script).ok_or(Error::NoScript)?;
match instance.properties.get("Source").ok_or(Error::NoSource)?{
rbx_dom_weak::types::Variant::String(s)=>s.clone(),
_=>Err(Error::NoSource)?,
}
};
// run it lole
2024-09-18 00:16:57 +00:00
let runner=crate::runner::Runner::new().map_err(Error::Runner)?;
runner.set_script(self.script).map_err(Error::Runner)?;
runner.run(source,context).map_err(Error::Runner)
2024-09-17 01:54:04 +00:00
}
}