diff --git a/lib/roblox_emulator/src/runner/mod.rs b/lib/roblox_emulator/src/runner/mod.rs index 8a8e5ba2..2b178b6c 100644 --- a/lib/roblox_emulator/src/runner/mod.rs +++ b/lib/roblox_emulator/src/runner/mod.rs @@ -3,6 +3,8 @@ mod macros; mod runner; mod r#enum; +mod udim; +mod udim2; mod color3; mod cframe; mod vector3; diff --git a/lib/roblox_emulator/src/runner/runner.rs b/lib/roblox_emulator/src/runner/runner.rs index da6f1317..a180c48a 100644 --- a/lib/roblox_emulator/src/runner/runner.rs +++ b/lib/roblox_emulator/src/runner/runner.rs @@ -35,6 +35,8 @@ fn init(lua:&mlua::Lua)->mlua::Result<()>{ crate::scheduler::set_globals(lua,&globals)?; super::script_signal::set_globals(lua,&globals)?; super::r#enum::set_globals(lua,&globals)?; + super::udim::set_globals(lua,&globals)?; + super::udim2::set_globals(lua,&globals)?; super::color3::set_globals(lua,&globals)?; super::brickcolor::set_globals(lua,&globals)?; super::vector3::set_globals(lua,&globals)?; diff --git a/lib/roblox_emulator/src/runner/udim.rs b/lib/roblox_emulator/src/runner/udim.rs new file mode 100644 index 00000000..25ae58f8 --- /dev/null +++ b/lib/roblox_emulator/src/runner/udim.rs @@ -0,0 +1,34 @@ +#[derive(Clone,Copy)] +pub struct UDim(rbx_types::UDim); +impl UDim{ + pub fn new(scale:f32,offset:i32)->Self{ + UDim(rbx_types::UDim::new(scale,offset)) + } +} +impl From for UDim{ + fn from(value:rbx_types::UDim)->Self{ + Self(value) + } +} + +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(|_,(scale,offset):(f32,i32)| + Ok(UDim::new(scale,offset)) + )? + )?; + + globals.set("UDim",table)?; + + Ok(()) +} + +impl mlua::UserData for UDim{ + fn add_fields>(fields:&mut F){ + fields.add_field_method_get("Scale",|_,UDim(this)|Ok(this.scale)); + fields.add_field_method_get("Offset",|_,UDim(this)|Ok(this.offset)); + } +} +type_from_lua_userdata!(UDim); diff --git a/lib/roblox_emulator/src/runner/udim2.rs b/lib/roblox_emulator/src/runner/udim2.rs new file mode 100644 index 00000000..c45cd7a0 --- /dev/null +++ b/lib/roblox_emulator/src/runner/udim2.rs @@ -0,0 +1,34 @@ +use super::udim::UDim; + +#[derive(Clone,Copy)] +pub struct UDim2(rbx_types::UDim2); +impl UDim2{ + pub fn new(sx:f32,ox:i32,sy:f32,oy:i32)->Self{ + UDim2(rbx_types::UDim2::new( + rbx_types::UDim::new(sx,ox), + rbx_types::UDim::new(sy,oy), + )) + } +} + +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(|_,(sx,ox,sy,oy):(f32,i32,f32,i32)| + Ok(UDim2::new(sx,ox,sy,oy)) + )? + )?; + + globals.set("UDim2",table)?; + + Ok(()) +} + +impl mlua::UserData for UDim2{ + fn add_fields>(fields:&mut F){ + fields.add_field_method_get("X",|_,UDim2(this)|Ok(UDim::from(this.x))); + fields.add_field_method_get("Y",|_,UDim2(this)|Ok(UDim::from(this.y))); + } +} +type_from_lua_userdata!(UDim2);