/*
WiiMotion Plus Mouse & MWO Controls
by lednerg [modified by Ranger207 for MWO (I really didn't do anything!)]
Emulates the basic functionality of a Gyration Air Mouse.
Requires GlovePIE version .42 or higher.
Leave the Wiimote on your desk when starting so it can calibrate.
Hold B to move, A = Left-Click, D-Pad Down = Right Click, you can see the rest below.
*IMPORTANT NOTE!* This simply uses key inputs, as there isn't really any joystick support so far in MWO.
That means that when you push the Nunchuk to the left, it's like hitting the A key on your keyboard.
It's either full-speed turning, or no turning. Even if you only push the Nunchuk stick halfway, it will still be full-speed turning.
*/
var.MoveButton = wiimote.B
mouse.LeftButton = wiimote.A
mouse.RightButton = wiimote.Down
mouse.XButton1 = wiimote.Left
mouse.XButton1 = wiimote.Right
key.w = wiimote.Nunchuk.Up
key.a = wiimote.Nunchuk.Left
key.s = wiimote.Nunchuk.Down
key.d = wiimote.Nunchuk.Right
key.z = wiimote.minus
key.h = wiimote.plus
key.r = wiimote.Nunchuk.CButton
key.x = wiimote.Nunchuk.ZButton
key.b = wiimote.Home
var.Speed = 75 // 0 to 100
PIE.FrameRate = 120hz
if wiimote.HasMotionPlus = false then debug = "WiiMotion Plus NOT DETECTED!"
if wiimote.HasMotionPlus = true and var.MoveButton = true {
var.YawSpeed = wiimote.MotionPlus.YawSpeed
var.PitchSpeed = wiimote.MotionPlus.PitchSpeed
if SameValue( Smooth(wiimote.SmoothRoll, 10), wiimote.SmoothRoll, 10) then var.Roll = Smooth(wiimote.SmoothRoll, 10) else var.Roll = wiimote.SmoothRoll
if var.Roll < 0 and var.Roll >= -90 {
var.XYswap = 1 - EnsureMapRange(var.Roll, -90, 0, 0, 1)
var.RightDown = -1
var.TopUp = 1
}
if var.Roll <= 90 and var.Roll >= 0 {
var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 0, 0, 1)
var.RightDown = 1
var.TopUp = 1
}
if var.Roll > 90 and var.Roll <= 180 {
var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 180, 0, 1)
var.RightDown = 1
var.TopUp = -1
}
if var.Roll < -90 and var.Roll >= -180 {
var.XYswap = 1 - EnsureMapRange(var.Roll, -90, -180, 0, 1)
var.RightDown = -1
var.TopUp = -1
}
var.SpeedX = var.TopUp * var.YawSpeed - ( var.TopUp * var.YawSpeed * var.XYswap ) + ( var.RightDown * var.PitchSpeed * var.XYswap )
var.SpeedY = var.TopUp * var.PitchSpeed - ( var.TopUp * var.PitchSpeed * var.XYswap) + ( -var.RightDown * var.YawSpeed * var.XYswap )
mouse.DirectInputX = int(var.MouseX)
mouse.DirectInputY = int(var.MouseY)
var.MouseX = var.MouseX + ( var.SpeedX / (10500000 - EnsureMapRange(var.Speed, 0, 100, 0, 10000000) ) )
var.MouseY = var.MouseY - ( var.SpeedY / (10500000 - EnsureMapRange(var.Speed, 0, 100, 0, 10000000) ) )
/* // for mouse.x and mouse.y instead
mouse.x = var.MouseX
mouse.y = var.MouseY
var.MouseX = var.MouseX + ( var.SpeedX / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )
var.MouseY = var.MouseY - ( var.SpeedY / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )
*/
}
if var.MoveButton = false {
var.MouseX = mouse.DirectInputX
var.MouseY = mouse.DirectInputY
/* // for mouse.x and mouse.y instead
var.MouseX = mouse.x
var.MouseY = mouse.y
*/
}