diff --git a/luau/tests/Vector.lua b/luau/tests/Vector.lua index ac99efa..389a4ec 100644 --- a/luau/tests/Vector.lua +++ b/luau/tests/Vector.lua @@ -22,4 +22,16 @@ print("Vector2.NEG_ZERO=",InspectVectorTable(Vector2.NEG_ZERO)) print("Vector2.NEG_ONE=",InspectVectorTable(Vector2.NEG_ONE)) print("Vector2.NEG_X=",InspectVectorTable(Vector2.NEG_X)) print("Vector2.NEG_Y=",InspectVectorTable(Vector2.NEG_Y)) +print("Vector3.ZERO=",InspectVectorTable(Vector3.ZERO)) +print("Vector3.ONE=",InspectVectorTable(Vector3.ONE)) +print("Vector3.NEG_ZERO=",InspectVectorTable(Vector3.NEG_ZERO)) +print("Vector3.NEG_ONE=",InspectVectorTable(Vector3.NEG_ONE)) +print("Vector3.NEG_X=",InspectVectorTable(Vector3.NEG_X)) +print("Vector3.NEG_Y=",InspectVectorTable(Vector3.NEG_Y)) +print("Vector4.ZERO=",InspectVectorTable(Vector4.ZERO)) +print("Vector4.ONE=",InspectVectorTable(Vector4.ONE)) +print("Vector4.NEG_ZERO=",InspectVectorTable(Vector4.NEG_ZERO)) +print("Vector4.NEG_ONE=",InspectVectorTable(Vector4.NEG_ONE)) +print("Vector4.NEG_X=",InspectVectorTable(Vector4.NEG_X)) +print("Vector4.NEG_Y=",InspectVectorTable(Vector4.NEG_Y)) print("-----------------") \ No newline at end of file diff --git a/src/luau.rs b/src/luau.rs index c5d2195..baa4045 100644 --- a/src/luau.rs +++ b/src/luau.rs @@ -29,6 +29,7 @@ trait Luavm { impl Luavm for StrafeluaGlobals { fn vector2(&self) -> Table { + //In a better world, this can all be a macro let zero = Vec2::ZERO; let one = Vec2::ONE; let neg_zero = Vec2::ZERO; @@ -69,24 +70,64 @@ impl Luavm for StrafeluaGlobals { field_vector2.set("NEG_X", vector2_neg_x).unwrap(); field_vector2.set("NEG_Y", vector2_neg_y).unwrap(); - let new_vector2 = self.vm.create_function(|this: &Luau, (x,y): (f32,f32)| { + field_vector2.set("new", self.vm.create_function(|this: &Luau, (x,y): (f32,f32)| { let glam_vec = Vec2::new(x,y); let vec2 = this.create_table().unwrap(); vec2.set("x", glam_vec.x).unwrap(); vec2.set("y", glam_vec.y).unwrap(); Ok(vec2) - }).unwrap(); - field_vector2.set("new", new_vector2).unwrap(); + }).unwrap()).unwrap(); return field_vector2 } fn vector3(&self) -> Table { - let zero = Vec3::ZERO; - let one = Vec3::ONE; + let zero = Vec3::ZERO; + let one = Vec3::ONE; + let neg_zero = Vec3::ZERO; + let neg_one = Vec3::NEG_ONE; + let neg_x = Vec3::NEG_X; + let neg_y = Vec3::NEG_Y; + let field_vector3 = self.vm.create_table().unwrap(); - let vector3_one = self.vm.create_table().unwrap(); + + let vector3_one = self.vm.create_table().unwrap(); + vector3_one.set("x", one.x).unwrap(); + vector3_one.set("y", one.y).unwrap(); + vector3_one.set("z", one.z).unwrap(); + + let vector3_zero = self.vm.create_table().unwrap(); + vector3_zero.set("x", zero.x).unwrap(); + vector3_zero.set("y", zero.y).unwrap(); + vector3_zero.set("z", zero.z).unwrap(); + + let vector3_neg_zero = self.vm.create_table().unwrap(); + vector3_neg_zero.set("x", neg_zero.x).unwrap(); + vector3_neg_zero.set("y", neg_zero.y).unwrap(); + vector3_neg_zero.set("z", neg_zero.z).unwrap(); + + let vector3_neg_one = self.vm.create_table().unwrap(); + vector3_neg_one.set("x", neg_one.x).unwrap(); + vector3_neg_one.set("y", neg_one.y).unwrap(); + vector3_neg_one.set("z", neg_one.z).unwrap(); + + let vector3_neg_x = self.vm.create_table().unwrap(); + vector3_neg_x.set("x", neg_x.x).unwrap(); + vector3_neg_x.set("y", neg_x.y).unwrap(); + vector3_neg_x.set("z", neg_x.z).unwrap(); + + let vector3_neg_y = self.vm.create_table().unwrap(); + vector3_neg_y.set("x", neg_y.x).unwrap(); + vector3_neg_y.set("y", neg_y.y).unwrap(); + vector3_neg_y.set("y", neg_y.z).unwrap(); + + field_vector3.set("ONE", vector3_one).unwrap(); + field_vector3.set("ZERO", vector3_zero).unwrap(); + field_vector3.set("NEG_ZERO", vector3_neg_zero).unwrap(); + field_vector3.set("NEG_ONE", vector3_neg_one).unwrap(); + field_vector3.set("NEG_X", vector3_neg_x).unwrap(); + field_vector3.set("NEG_Y", vector3_neg_y).unwrap(); let new_vector3 = self.vm.create_function(|this: &Luau, (x,y,z): (f32,f32,f32)| { let glam_vec = Vec3::new(x,y,z); @@ -98,19 +139,61 @@ impl Luavm for StrafeluaGlobals { }).unwrap(); field_vector3.set("new", new_vector3).unwrap(); - vector3_one.set("x", one.x).unwrap(); - vector3_one.set("y", one.y).unwrap(); - vector3_one.set("z", one.z).unwrap(); - field_vector3.set("one", vector3_one).unwrap(); - return field_vector3; } fn vector4(&self) -> Table { - let zero = Vec4::ZERO; - let one = Vec4::ONE; + let zero = Vec4::ZERO; + let one = Vec4::ONE; + let neg_zero = Vec4::ZERO; + let neg_one = Vec4::NEG_ONE; + let neg_x = Vec4::NEG_X; + let neg_y = Vec4::NEG_Y; + let field_vector4 = self.vm.create_table().unwrap(); - let vector4_one = self.vm.create_table().unwrap(); + + let vector4_one = self.vm.create_table().unwrap(); + vector4_one.set("x", one.x).unwrap(); + vector4_one.set("y", one.y).unwrap(); + vector4_one.set("z", one.z).unwrap(); + vector4_one.set("w", one.w).unwrap(); + + let vector4_zero = self.vm.create_table().unwrap(); + vector4_zero.set("x", zero.x).unwrap(); + vector4_zero.set("y", zero.y).unwrap(); + vector4_zero.set("z", zero.z).unwrap(); + vector4_zero.set("w", zero.w).unwrap(); + + let vector4_neg_zero = self.vm.create_table().unwrap(); + vector4_neg_zero.set("x", neg_zero.x).unwrap(); + vector4_neg_zero.set("y", neg_zero.y).unwrap(); + vector4_neg_zero.set("z", neg_zero.z).unwrap(); + vector4_neg_zero.set("w", neg_zero.w).unwrap(); + + let vector4_neg_one = self.vm.create_table().unwrap(); + vector4_neg_one.set("x", neg_one.x).unwrap(); + vector4_neg_one.set("y", neg_one.y).unwrap(); + vector4_neg_one.set("z", neg_one.z).unwrap(); + vector4_neg_one.set("w", neg_one.w).unwrap(); + + let vector4_neg_x = self.vm.create_table().unwrap(); + vector4_neg_x.set("x", neg_x.x).unwrap(); + vector4_neg_x.set("y", neg_x.y).unwrap(); + vector4_neg_x.set("z", neg_x.z).unwrap(); + vector4_neg_x.set("w", neg_x.w).unwrap(); + + let vector4_neg_y = self.vm.create_table().unwrap(); + vector4_neg_y.set("x", neg_y.x).unwrap(); + vector4_neg_y.set("y", neg_y.y).unwrap(); + vector4_neg_y.set("y", neg_y.z).unwrap(); + vector4_neg_y.set("w", neg_y.w).unwrap(); + + field_vector4.set("ONE", vector4_one).unwrap(); + field_vector4.set("ZERO", vector4_zero).unwrap(); + field_vector4.set("NEG_ZERO", vector4_neg_zero).unwrap(); + field_vector4.set("NEG_ONE", vector4_neg_one).unwrap(); + field_vector4.set("NEG_X", vector4_neg_x).unwrap(); + field_vector4.set("NEG_Y", vector4_neg_y).unwrap(); let new_vector4 = self.vm.create_function(|this: &Luau, (x,y,z,w): (f32,f32,f32,f32)| { let glam_vec = Vec4::new(x,y,z,w); @@ -123,12 +206,6 @@ impl Luavm for StrafeluaGlobals { }).unwrap(); field_vector4.set("new", new_vector4).unwrap(); - vector4_one.set("x", one.x).unwrap(); - vector4_one.set("y", one.y).unwrap(); - vector4_one.set("z", one.z).unwrap(); - vector4_one.set("w", one.w).unwrap(); - field_vector4.set("one", vector4_one).unwrap(); - return field_vector4; } diff --git a/src/main.rs b/src/main.rs index 8b15cf9..05535d5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -145,6 +145,18 @@ print("Vector2.NEG_ZERO=",InspectVectorTable(Vector2.NEG_ZERO)) print("Vector2.NEG_ONE=",InspectVectorTable(Vector2.NEG_ONE)) print("Vector2.NEG_X=",InspectVectorTable(Vector2.NEG_X)) print("Vector2.NEG_Y=",InspectVectorTable(Vector2.NEG_Y)) +print("Vector3.ZERO=",InspectVectorTable(Vector3.ZERO)) +print("Vector3.ONE=",InspectVectorTable(Vector3.ONE)) +print("Vector3.NEG_ZERO=",InspectVectorTable(Vector3.NEG_ZERO)) +print("Vector3.NEG_ONE=",InspectVectorTable(Vector3.NEG_ONE)) +print("Vector3.NEG_X=",InspectVectorTable(Vector3.NEG_X)) +print("Vector3.NEG_Y=",InspectVectorTable(Vector3.NEG_Y)) +print("Vector4.ZERO=",InspectVectorTable(Vector4.ZERO)) +print("Vector4.ONE=",InspectVectorTable(Vector4.ONE)) +print("Vector4.NEG_ZERO=",InspectVectorTable(Vector4.NEG_ZERO)) +print("Vector4.NEG_ONE=",InspectVectorTable(Vector4.NEG_ONE)) +print("Vector4.NEG_X=",InspectVectorTable(Vector4.NEG_X)) +print("Vector4.NEG_Y=",InspectVectorTable(Vector4.NEG_Y)) print("-----------------") "#).exec().expect("Lua syntax error!"); //Lua syntax error!: SyntaxError { message: "[string \"src/main.rs:122:18\"]:7: Expected ')' (to close '(' at column 7), got ','", incomplete_input: false }