Compare commits
5 Commits
136b360590
...
e02e455990
Author | SHA1 | Date | |
---|---|---|---|
e02e455990 | |||
ff9c122470 | |||
eccf7243c4 | |||
b457da64a1 | |||
ed3f9f9b30 |
@ -64,15 +64,55 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table<'_>)->Result<(),mlua::Err
|
|||||||
|
|
||||||
//CFrame.new
|
//CFrame.new
|
||||||
cframe_table.raw_set("new",
|
cframe_table.raw_set("new",
|
||||||
lua.create_function(|ctx,(x,y,z):(f32,f32,f32)|
|
lua.create_function(|_,tuple:(
|
||||||
Ok(ctx.create_userdata(CFrame::point(x,y,z)))
|
mlua::Value,mlua::Value,Option<f32>,
|
||||||
)?
|
Option<f32>,Option<f32>,Option<f32>,
|
||||||
|
Option<f32>,Option<f32>,Option<f32>,
|
||||||
|
Option<f32>,Option<f32>,Option<f32>,
|
||||||
|
)|match tuple{
|
||||||
|
//CFrame.new(pos)
|
||||||
|
(
|
||||||
|
mlua::Value::UserData(ud),mlua::Value::Nil,None,
|
||||||
|
None,None,None,
|
||||||
|
None,None,None,
|
||||||
|
None,None,None,
|
||||||
|
)=>{
|
||||||
|
let v:Vector3=ud.take()?;
|
||||||
|
Ok(CFrame::point(v.0.x,v.0.y,v.0.z))
|
||||||
|
},
|
||||||
|
//TODO: CFrame.new(pos,look)
|
||||||
|
(
|
||||||
|
mlua::Value::UserData(_pos),mlua::Value::UserData(_look),None,
|
||||||
|
None,None,None,
|
||||||
|
None,None,None,
|
||||||
|
None,None,None,
|
||||||
|
)=>Err(mlua::Error::runtime("Not yet implemented")),
|
||||||
|
//CFrame.new(x,y,z)
|
||||||
|
(
|
||||||
|
mlua::Value::Number(x),mlua::Value::Number(y),Some(z),
|
||||||
|
None,None,None,
|
||||||
|
None,None,None,
|
||||||
|
None,None,None,
|
||||||
|
)=>Ok(CFrame::point(x as f32,y as f32,z)),
|
||||||
|
//CFrame.new(x,y,z,xx,yx,zx,xy,yy,zy,xz,yz,zz)
|
||||||
|
(
|
||||||
|
mlua::Value::Number(x),mlua::Value::Number(y),Some(z),
|
||||||
|
Some(xx),Some(yx),Some(zx),
|
||||||
|
Some(xy),Some(yy),Some(zy),
|
||||||
|
Some(xz),Some(yz),Some(zz),
|
||||||
|
)=>Ok(CFrame::new(x as f32,y as f32,z,
|
||||||
|
xx,yx,zx,
|
||||||
|
xy,yy,zy,
|
||||||
|
xz,yz,zz,
|
||||||
|
)),
|
||||||
|
_=>Err(mlua::Error::runtime("Invalid arguments"))
|
||||||
|
})?
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
//CFrame.Angles
|
//CFrame.Angles
|
||||||
cframe_table.raw_set("Angles",
|
cframe_table.raw_set("Angles",
|
||||||
lua.create_function(|ctx,(x,y,z):(f32,f32,f32)|
|
lua.create_function(|_,(x,y,z):(f32,f32,f32)|
|
||||||
Ok(ctx.create_userdata(CFrame::angles(x,y,z)))
|
Ok(CFrame::angles(x,y,z))
|
||||||
)?
|
)?
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
@ -19,13 +19,13 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table<'_>)->Result<(),mlua::Err
|
|||||||
let color3_table=lua.create_table()?;
|
let color3_table=lua.create_table()?;
|
||||||
|
|
||||||
color3_table.raw_set("new",
|
color3_table.raw_set("new",
|
||||||
lua.create_function(|ctx,(r,g,b):(f32,f32,f32)|
|
lua.create_function(|_,(r,g,b):(f32,f32,f32)|
|
||||||
Ok(ctx.create_userdata(Color3::new(r,g,b)))
|
Ok(Color3::new(r,g,b))
|
||||||
)?
|
)?
|
||||||
)?;
|
)?;
|
||||||
color3_table.raw_set("fromRGB",
|
color3_table.raw_set("fromRGB",
|
||||||
lua.create_function(|ctx,(r,g,b):(u8,u8,u8)|
|
lua.create_function(|_,(r,g,b):(u8,u8,u8)|
|
||||||
Ok(ctx.create_userdata(Color3::new(r as f32/255.0,g as f32/255.0,b as f32/255.0)))
|
Ok(Color3::new(r as f32/255.0,g as f32/255.0,b as f32/255.0))
|
||||||
)?
|
)?
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
@ -33,11 +33,36 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table<'_>)->Result<(),mlua::Err
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
fn lerp(lhs:f32,rhs:f32,t:f32)->f32{
|
||||||
|
lhs+(rhs-lhs)*t
|
||||||
|
}
|
||||||
|
|
||||||
impl mlua::UserData for Color3{
|
impl mlua::UserData for Color3{
|
||||||
fn add_fields<'lua,F:mlua::UserDataFields<'lua,Self>>(fields:&mut F){
|
fn add_fields<'lua,F:mlua::UserDataFields<'lua,Self>>(fields:&mut F){
|
||||||
|
fields.add_field_method_get("r",|_,this|Ok(this.r));
|
||||||
|
fields.add_field_method_set("r",|_,this,val|{
|
||||||
|
this.r=val;
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
|
fields.add_field_method_get("g",|_,this|Ok(this.g));
|
||||||
|
fields.add_field_method_set("g",|_,this,val|{
|
||||||
|
this.g=val;
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
|
fields.add_field_method_get("b",|_,this|Ok(this.b));
|
||||||
|
fields.add_field_method_set("b",|_,this,val|{
|
||||||
|
this.b=val;
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
}
|
}
|
||||||
fn add_methods<'lua,M:mlua::UserDataMethods<'lua,Self>>(methods:&mut M){
|
fn add_methods<'lua,M:mlua::UserDataMethods<'lua,Self>>(methods:&mut M){
|
||||||
|
methods.add_method("Lerp",|_,this,(other,t):(Self,f32)|
|
||||||
|
Ok(Color3::new(
|
||||||
|
lerp(this.r,other.r,t),
|
||||||
|
lerp(this.g,other.g,t),
|
||||||
|
lerp(this.b,other.b,t),
|
||||||
|
))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
type_from_lua_userdata!(Color3);
|
type_from_lua_userdata!(Color3);
|
||||||
|
@ -4,6 +4,26 @@ use rbx_dom_weak::{InstanceBuilder,WeakDom};
|
|||||||
|
|
||||||
use super::vector3::Vector3;
|
use super::vector3::Vector3;
|
||||||
|
|
||||||
|
pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table<'_>)->Result<(),mlua::Error>{
|
||||||
|
let instance_table=lua.create_table()?;
|
||||||
|
|
||||||
|
//Instance.new
|
||||||
|
instance_table.raw_set("new",
|
||||||
|
lua.create_function(|lua,(class_name,parent):(mlua::String,Option<Instance>)|{
|
||||||
|
let class_name_str=class_name.to_str()?;
|
||||||
|
let parent=parent.ok_or(mlua::Error::runtime("Nil Parent not yet supported"))?;
|
||||||
|
dom_mut(lua,|dom|{
|
||||||
|
//TODO: Nil instances
|
||||||
|
Ok(Instance::new(dom.insert(parent.referent,InstanceBuilder::new(class_name_str))))
|
||||||
|
})
|
||||||
|
})?
|
||||||
|
)?;
|
||||||
|
|
||||||
|
globals.set("Instance",instance_table)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
// LMAO look at this function!
|
// LMAO look at this function!
|
||||||
fn dom_mut<T>(lua:&mlua::Lua,mut f:impl FnMut(&mut WeakDom)->mlua::Result<T>)->mlua::Result<T>{
|
fn dom_mut<T>(lua:&mlua::Lua,mut f:impl FnMut(&mut WeakDom)->mlua::Result<T>)->mlua::Result<T>{
|
||||||
let mut dom=lua.app_data_mut::<&'static mut WeakDom>().ok_or(mlua::Error::runtime("DataModel missing"))?;
|
let mut dom=lua.app_data_mut::<&'static mut WeakDom>().ok_or(mlua::Error::runtime("DataModel missing"))?;
|
||||||
|
@ -33,6 +33,7 @@ fn init(lua:&mlua::Lua)->mlua::Result<()>{
|
|||||||
super::color3::set_globals(lua,&globals)?;
|
super::color3::set_globals(lua,&globals)?;
|
||||||
super::vector3::set_globals(lua,&globals)?;
|
super::vector3::set_globals(lua,&globals)?;
|
||||||
super::cframe::set_globals(lua,&globals)?;
|
super::cframe::set_globals(lua,&globals)?;
|
||||||
|
super::instance::set_globals(lua,&globals)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,8 @@ pub fn set_globals(lua:&mlua::Lua,globals:&mlua::Table<'_>)->Result<(),mlua::Err
|
|||||||
|
|
||||||
//Vector3.new
|
//Vector3.new
|
||||||
vector3_table.raw_set("new",
|
vector3_table.raw_set("new",
|
||||||
lua.create_function(|ctx,(x,y,z):(f32,f32,f32)|
|
lua.create_function(|_,(x,y,z):(f32,f32,f32)|
|
||||||
Ok(ctx.create_userdata(Vector3::new(x,y,z)))
|
Ok(Vector3::new(x,y,z))
|
||||||
)?
|
)?
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
@ -35,21 +35,21 @@ impl From<rbx_types::Vector3> for Vector3{
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl mlua::UserData for Vector3{
|
impl mlua::UserData for Vector3{
|
||||||
fn add_fields<'lua,F: mlua::UserDataFields<'lua,Self>>(fields: &mut F) {
|
fn add_fields<'lua,F: mlua::UserDataFields<'lua,Self>>(fields: &mut F){
|
||||||
fields.add_field_method_get("magnitude",|_,this| Ok(this.0.length()));
|
fields.add_field_method_get("magnitude",|_,this|Ok(this.0.length()));
|
||||||
fields.add_field_method_get("x",|_,this| Ok(this.0.x));
|
fields.add_field_method_get("x",|_,this|Ok(this.0.x));
|
||||||
fields.add_field_method_set("x",|_,this,val| {
|
fields.add_field_method_set("x",|_,this,val|{
|
||||||
this.0.x = val;
|
this.0.x=val;
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
fields.add_field_method_get("y",|_,this| Ok(this.0.y));
|
fields.add_field_method_get("y",|_,this|Ok(this.0.y));
|
||||||
fields.add_field_method_set("y",|_,this,val| {
|
fields.add_field_method_set("y",|_,this,val|{
|
||||||
this.0.y = val;
|
this.0.y=val;
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
fields.add_field_method_get("z",|_,this| Ok(this.0.z));
|
fields.add_field_method_get("z",|_,this|Ok(this.0.z));
|
||||||
fields.add_field_method_set("z",|_,this,val| {
|
fields.add_field_method_set("z",|_,this,val|{
|
||||||
this.0.z = val;
|
this.0.z=val;
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user