So I have been working with CFrame a bit, just playing around, and I wrote a script so that when W is pressed the character rotates forwards. Everything works without errors, however, when the player has rotated to 90 degrees or-90 degrees, it refuses to rotate farther. I currently have PlatformStand set to true (prevents player from auto-rotating back to original state) and DevComputerMovementMode set to scriptable (so the player doesn't move forward when W is pressed. I also have a BodyForce in the player to cancel out the effects of Roblox gravity. Here is the main part of the script I am having trouble with:
Input.InputBegan:connect(function(InputObject)
if InputObject.KeyCode == Enum.KeyCode.W then
if XRotB == true then --Ignore this statement, it is for later purposes
XRotB = false
end
XRotF = true
while XRotF == true do
wait()
local Matrix = Character.Torso.CFrame
local sx, sy, sz, m00, m01, m02, m10, m11, m12, m20, m21, m22 = Matrix:components()
local Heading = math.atan2(m02, m22)
local Attitude = math.asin(-m12) - 0.025
local Bank = math.atan2(m10, m11)
local PosX = Character.Torso.Position.X
local PosY = Character.Torso.Position.Y
local PosZ = Character.Torso.Position.Z
Character.Torso.CFrame = CFrame.new(PosX, PosY, PosZ) * CFrame.Angles(0, Heading, 0) * CFrame.Angles(Attitude, 0, Bank)
print(math.deg(Attitude))
end
end
end)
Like I said, I am just learning about advanced CFraming so I apologize if it is messy... Again the issue is that the rotation won't pass 90 degrees or-90 degrees, as proven by when I print the math.deg(Attitude). Any suggestions?

1 comment
Never mind.... Basic rules of Trigonometry I neglected to look into.... any value below -1 will produce no value when plugged into the inverse of sine.