From 52a6c4f4dab4bd6e1126b8f62ad4120d35e7e433 Mon Sep 17 00:00:00 2001 From: Filip Tibell Date: Wed, 23 Aug 2023 12:07:16 -0500 Subject: [PATCH] Revert #85 to fix SIGSEGV --- src/roblox/datatypes/types/cframe.rs | 38 +++++++++++----------------- tests/roblox/datatypes/CFrame.luau | 8 ------ 2 files changed, 15 insertions(+), 31 deletions(-) diff --git a/src/roblox/datatypes/types/cframe.rs b/src/roblox/datatypes/types/cframe.rs index 3c6a550..9f3a36c 100644 --- a/src/roblox/datatypes/types/cframe.rs +++ b/src/roblox/datatypes/types/cframe.rs @@ -2,7 +2,7 @@ use core::fmt; use std::ops; use glam::{EulerRot, Mat4, Quat, Vec3}; -use mlua::{prelude::*, Variadic}; +use mlua::prelude::*; use rbx_dom_weak::types::{CFrame as DomCFrame, Matrix3 as DomMatrix3, Vector3 as DomVector3}; use super::{super::*, Vector3}; @@ -210,46 +210,38 @@ impl LuaUserData for CFrame { translation, ))) }); - methods.add_method( - "ToWorldSpace", - |_, this, rhs: Variadic>| { - Ok(Variadic::from_iter(rhs.into_iter().map(|cf| *this * *cf))) - }, - ); - methods.add_method( - "ToObjectSpace", - |_, this, rhs: Variadic>| { - let inverse = this.inverse(); - Ok(Variadic::from_iter(rhs.into_iter().map(|cf| inverse * *cf))) - }, - ); + methods.add_method("ToWorldSpace", |_, this, rhs: LuaUserDataRef| { + Ok(*this * *rhs) + }); + methods.add_method("ToObjectSpace", |_, this, rhs: LuaUserDataRef| { + let inverse = this.inverse(); + Ok(inverse * *rhs) + }); methods.add_method( "PointToWorldSpace", - |_, this, rhs: Variadic>| { - Ok(Variadic::from_iter(rhs.into_iter().map(|v3| *this * *v3))) - }, + |_, this, rhs: LuaUserDataRef| Ok(*this * *rhs), ); methods.add_method( "PointToObjectSpace", - |_, this, rhs: Variadic>| { + |_, this, rhs: LuaUserDataRef| { let inverse = this.inverse(); - Ok(Variadic::from_iter(rhs.into_iter().map(|v3| inverse * *v3))) + Ok(inverse * *rhs) }, ); methods.add_method( "VectorToWorldSpace", - |_, this, rhs: Variadic>| { + |_, this, rhs: LuaUserDataRef| { let result = *this - Vector3(this.position()); - Ok(Variadic::from_iter(rhs.into_iter().map(|v3| result * *v3))) + Ok(result * *rhs) }, ); methods.add_method( "VectorToObjectSpace", - |_, this, rhs: Variadic>| { + |_, this, rhs: LuaUserDataRef| { let inverse = this.inverse(); let result = inverse - Vector3(inverse.position()); - Ok(Variadic::from_iter(rhs.into_iter().map(|v3| result * *v3))) + Ok(result * *rhs) }, ); #[rustfmt::skip] diff --git a/tests/roblox/datatypes/CFrame.luau b/tests/roblox/datatypes/CFrame.luau index fc3e4e0..6ac32e0 100644 --- a/tests/roblox/datatypes/CFrame.luau +++ b/tests/roblox/datatypes/CFrame.luau @@ -99,18 +99,10 @@ assertEq( -- World & object space conversions --- FIXME: ToWorldSpace and/or ToObjectSpace are causing SIGTRAP? What the heck? -if true then - return -end - local offset = CFrame.new(0, 0, -5) assert(offset:ToWorldSpace(offset).Z == offset.Z * 2) assert(offset:ToObjectSpace(offset).Z == 0) -assert(select("#", offset:ToWorldSpace(offset, offset, offset)) == 3) -assert(select("#", offset:ToObjectSpace(offset, offset, offset)) == 3) - local world = CFrame.fromOrientation(0, math.rad(90), 0) * CFrame.new(0, 0, -5) local world2 = CFrame.fromOrientation(0, -math.rad(90), 0) * CFrame.new(0, 0, -5) assertEq(CFrame.identity:ToObjectSpace(world), world)