roblox_emulator: implement NumberRange

This commit is contained in:
2025-04-22 22:49:57 -07:00
parent 8b7a4ee8c1
commit 62d983ef2a
4 changed files with 51 additions and 0 deletions

View File

@@ -395,6 +395,10 @@ impl mlua::UserData for Instance{
let typed_value=value.as_str().ok_or_else(||mlua::Error::runtime("Expected string"))?;
rbx_types::Variant::String(typed_value.to_owned())
},
rbx_reflection::DataType::Value(rbx_types::VariantType::NumberRange)=>{
let typed_value:&crate::runner::number_range::NumberRange=&*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected NumberRange"))?.borrow()?;
rbx_types::Variant::NumberRange(typed_value.clone().into())
},
rbx_reflection::DataType::Value(rbx_types::VariantType::NumberSequence)=>{
let typed_value:&crate::runner::number_sequence::NumberSequence=&*value.as_userdata().ok_or_else(||mlua::Error::runtime("Expected NumberSequence"))?.borrow()?;
rbx_types::Variant::NumberSequence(typed_value.clone().into())

View File

@@ -11,6 +11,7 @@ mod cframe;
mod vector3;
mod brickcolor;
pub mod instance;
mod number_range;
mod script_signal;
mod color_sequence;
mod number_sequence;

View File

@@ -0,0 +1,45 @@
use super::util::coerce_float32;
#[derive(Clone)]
pub struct NumberRange(rbx_types::NumberRange);
impl NumberRange{
pub const fn new(min:f32,max:f32)->Self{
Self(rbx_types::NumberRange{min,max})
}
}
impl From<NumberRange> for rbx_types::NumberRange{
fn from(value:NumberRange)->rbx_types::NumberRange{
let NumberRange(number_sequence)=value;
number_sequence
}
}
pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table)->Result<(),mlua::Error>{
let table=lua.create_table()?;
table.raw_set("new",
lua.create_function(|_,(min,max):(mlua::Value,mlua::Value)|{
let min=coerce_float32(&min)?;
if max.is_nil(){
Ok(NumberRange::new(min,min))
}else{
let max=coerce_float32(&max)?;
Ok(NumberRange::new(min,max))
}
})?
)?;
globals.set("NumberRange",table)?;
Ok(())
}
impl mlua::UserData for NumberRange{}
impl mlua::FromLua for NumberRange{
fn from_lua(value:mlua::Value,_lua:&mlua::Lua)->Result<Self,mlua::Error>{
match value{
mlua::Value::UserData(ud)=>Ok(ud.borrow::<Self>()?.clone()),
other=>Err(mlua::Error::runtime(format!("Expected {} got {:?}",stringify!(NumberRange),other))),
}
}
}

View File

@@ -42,6 +42,7 @@ fn init(lua:&mlua::Lua)->mlua::Result<()>{
super::vector3::set_globals(lua,&globals)?;
super::cframe::set_globals(lua,&globals)?;
super::instance::instance::set_globals(lua,&globals)?;
super::number_range::set_globals(lua,&globals)?;
super::number_sequence::set_globals(lua,&globals)?;
super::color_sequence::set_globals(lua,&globals)?;