Ah, an interesting problem. This is my area of fun :) Rotations and other applied maths.
local function TopSurfaceFace(pos, lookat, ref)
ref = ref.unit
local FaceVector = (lookat-pos).unit
local XAxis = FaceVector:Cross(ref)
local ZAxis = XAxis:Cross(FaceVector)
print(ZAxis.Y)
if (ZAxis.Y < 0) then
print("Z less than 0")
ZAxis = ZAxis * -1
XAxis = XAxis * -1
end
return CFrame.new(pos.x, pos.y, pos.z,
XAxis.X, FaceVector.X, ZAxis.X,
XAxis.Y, FaceVector.Y, ZAxis.Y,
XAxis.Z, FaceVector.Z, ZAxis.Z
)
end
local Wall = ?
local Torso = ?
local Weld = ?
local BottomSurfacePointsAtWallRotation = (TopSurfaceFace(Torso.Position, (Torso.Position + (Wall.Position - Torso.Position))):toObjectSpace(Weld.Part0.CFrame) |