Makes IR dots rotate accordingly when EmuWiiMote rolling is performed, this function should be able to fix Issue 1740, but needs verification yet.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4657 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
d02426a8e9
commit
80601f70c5
|
@ -442,6 +442,8 @@ int Shake[] = {0, 0};
|
||||||
std::vector<u8> yhist(15, 0);
|
std::vector<u8> yhist(15, 0);
|
||||||
int KbDegree;
|
int KbDegree;
|
||||||
|
|
||||||
|
int Roll, Pitch;
|
||||||
|
|
||||||
// Single shake of all three directions
|
// Single shake of all three directions
|
||||||
void SingleShake(int &_x, int &_y, int &_z, int wm)
|
void SingleShake(int &_x, int &_y, int &_z, int wm)
|
||||||
{
|
{
|
||||||
|
@ -618,7 +620,8 @@ void Tilt(int &_x, int &_y, int &_z)
|
||||||
if (g_Config.Trigger.Type == g_Config.Trigger.TRIGGER_OFF) return;
|
if (g_Config.Trigger.Type == g_Config.Trigger.TRIGGER_OFF) return;
|
||||||
|
|
||||||
// Set to zero
|
// Set to zero
|
||||||
int Roll = 0, Pitch = 0;
|
Roll = 0;
|
||||||
|
Pitch = 0;
|
||||||
|
|
||||||
// Select input method and return the x, y, x values
|
// Select input method and return the x, y, x values
|
||||||
if (g_Config.Trigger.Type == g_Config.Trigger.KEYBOARD)
|
if (g_Config.Trigger.Type == g_Config.Trigger.KEYBOARD)
|
||||||
|
@ -759,7 +762,26 @@ void FillReportAcc(wm_accel& _acc)
|
||||||
);*/
|
);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rotate IR dot when rolling Wiimote
|
||||||
|
void RotateIR(int _Roll, int& _x, int& _y)
|
||||||
|
{
|
||||||
|
if (_Roll == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// The IR camera resolution is 1024x768
|
||||||
|
float dot_x = _x - 1024 / 2;
|
||||||
|
float dot_y = _y - 768 / 2;
|
||||||
|
|
||||||
|
float radius = sqrt(pow(dot_x, 2)+pow(dot_y, 2));
|
||||||
|
float radian = atan(dot_y / dot_x);
|
||||||
|
|
||||||
|
_x = radius * cos(radian + InputCommon::Deg2Rad(float(_Roll))) + 1024 / 2;
|
||||||
|
_y = radius * sin(radian + InputCommon::Deg2Rad(float(_Roll))) + 768 / 2;
|
||||||
|
|
||||||
|
// Out of sight check
|
||||||
|
if (_x < 0 || _x > 1023) _x = 0xFFFF;
|
||||||
|
if (_y < 0 || _y > 767) _y = 0xFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -829,19 +851,23 @@ void FillReportIR(wm_ir_extended& _ir0, wm_ir_extended& _ir1)
|
||||||
x0, x1, y0, y1, Top, Left, Right, Bottom, SensorBarRadius
|
x0, x1, y0, y1, Top, Left, Right, Bottom, SensorBarRadius
|
||||||
);*/
|
);*/
|
||||||
|
|
||||||
|
|
||||||
// Converted to IR data
|
// Converted to IR data
|
||||||
// The width is 0 to 1023
|
// The width is 0 to 1023
|
||||||
// The height is 0 to 767
|
// The height is 0 to 767
|
||||||
x0 = 1023 - x0;
|
x0 = 1023 - x0;
|
||||||
|
x1 = 1023 - x1;
|
||||||
|
|
||||||
|
RotateIR(Roll, x0, y0);
|
||||||
|
RotateIR(Roll, x1, y1);
|
||||||
|
|
||||||
_ir0.x = x0 & 0xff; _ir0.xHi = x0 >> 8;
|
_ir0.x = x0 & 0xff; _ir0.xHi = x0 >> 8;
|
||||||
_ir0.y = y0 & 0xff; _ir0.yHi = y0 >> 8;
|
_ir0.y = y0 & 0xff; _ir0.yHi = y0 >> 8;
|
||||||
// The size can be between 0 and 15 and is probably not important
|
|
||||||
_ir0.size = 10;
|
|
||||||
|
|
||||||
x1 = 1023 - x1;
|
|
||||||
_ir1.x = x1 & 0xff; _ir1.xHi = x1 >> 8;
|
_ir1.x = x1 & 0xff; _ir1.xHi = x1 >> 8;
|
||||||
_ir1.y = y1 & 0xff; _ir1.yHi = y1 >> 8;
|
_ir1.y = y1 & 0xff; _ir1.yHi = y1 >> 8;
|
||||||
|
|
||||||
|
// The size can be between 0 and 15 and is probably not important
|
||||||
|
_ir0.size = 10;
|
||||||
_ir1.size = 10;
|
_ir1.size = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -882,10 +908,15 @@ void FillReportIRBasic(wm_ir_basic& _ir0, wm_ir_basic& _ir1)
|
||||||
possible objects the only difference is that we don't report any size of
|
possible objects the only difference is that we don't report any size of
|
||||||
the tracked object here */
|
the tracked object here */
|
||||||
x1 = 1023 - x1;
|
x1 = 1023 - x1;
|
||||||
|
x2 = 1023 - x2;
|
||||||
|
|
||||||
|
RotateIR(Roll, x1, y1);
|
||||||
|
RotateIR(Roll, x2, y2);
|
||||||
|
|
||||||
_ir0.x1 = x1 & 0xff; _ir0.x1Hi = (x1 >> 8); // we are dealing with 2 bit values here
|
_ir0.x1 = x1 & 0xff; _ir0.x1Hi = (x1 >> 8); // we are dealing with 2 bit values here
|
||||||
_ir0.y1 = y1 & 0xff; _ir0.y1Hi = (y1 >> 8);
|
_ir0.y1 = y1 & 0xff; _ir0.y1Hi = (y1 >> 8);
|
||||||
|
|
||||||
x2 = 1023 - x2;
|
|
||||||
_ir0.x2 = x2 & 0xff; _ir0.x2Hi = (x2 >> 8);
|
_ir0.x2 = x2 & 0xff; _ir0.x2Hi = (x2 >> 8);
|
||||||
_ir0.y2 = y2 & 0xff; _ir0.y2Hi = (y2 >> 8);
|
_ir0.y2 = y2 & 0xff; _ir0.y2Hi = (y2 >> 8);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue