forked from StrafesNET/strafe-project
roblox_emulator: implement NumberRange
This commit is contained in:
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
|
||||
45
lib/roblox_emulator/src/runner/number_range.rs
Normal file
45
lib/roblox_emulator/src/runner/number_range.rs
Normal 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))),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user