|
|
|
@ -2,20 +2,18 @@
|
|
|
|
|
|
|
|
|
|
#include <math.h>
|
|
|
|
|
|
|
|
|
|
void TouchMouseJoystick::init(int32_t pos_x, int32_t pos_y, int32_t pos_r, int16_t usb_x, int16_t usb_y, int16_t usb_r)
|
|
|
|
|
void TouchMouseJoystick::init(int32_t pos_x, int32_t pos_y, int32_t pos_r)
|
|
|
|
|
{
|
|
|
|
|
TouchJoystick::init(pos_x, pos_y, pos_r, usb_x, usb_y, usb_r);
|
|
|
|
|
TouchJoystick::init(pos_x, pos_y, pos_r);
|
|
|
|
|
|
|
|
|
|
this->control_type = CT_MOUSE_JOYSTICK;
|
|
|
|
|
|
|
|
|
|
this->sensitivity = this->pos2usb;
|
|
|
|
|
this->sensitivity = this->pos2unit;
|
|
|
|
|
|
|
|
|
|
this->trackball_friction = 0;
|
|
|
|
|
this->trackball_vel_x = 0;
|
|
|
|
|
this->trackball_vel_y = 0;
|
|
|
|
|
|
|
|
|
|
this->usb_r2 = usb_r * usb_r;
|
|
|
|
|
|
|
|
|
|
this->min_delta = 0;
|
|
|
|
|
this->min_delta2 = 0;
|
|
|
|
|
|
|
|
|
@ -33,7 +31,7 @@ void TouchMouseJoystick::reset()
|
|
|
|
|
|
|
|
|
|
void TouchMouseJoystick::setSensitivity(float sensitivity)
|
|
|
|
|
{
|
|
|
|
|
this->sensitivity = this->pos2usb * sensitivity;
|
|
|
|
|
this->sensitivity = this->pos2unit * sensitivity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TouchMouseJoystick::setTrackballFriction(float trackball_friction)
|
|
|
|
@ -58,8 +56,8 @@ TouchMouseJoystick::TouchState TouchMouseJoystick::touch(int8_t fid, int32_t tx,
|
|
|
|
|
tx -= pos_x;
|
|
|
|
|
ty -= pos_y;
|
|
|
|
|
|
|
|
|
|
x = usb_x;
|
|
|
|
|
y = usb_y;
|
|
|
|
|
x = 0;
|
|
|
|
|
y = 0;
|
|
|
|
|
|
|
|
|
|
int32_t t2 = tx * tx + ty * ty;
|
|
|
|
|
|
|
|
|
@ -91,9 +89,9 @@ TouchMouseJoystick::TouchState TouchMouseJoystick::touch(int8_t fid, int32_t tx,
|
|
|
|
|
dy = dy * factor;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if (d2 > usb_r2)
|
|
|
|
|
if (d2 > 1.f)
|
|
|
|
|
{
|
|
|
|
|
float factor = usb_r / sqrt(d2);
|
|
|
|
|
float factor = 1.f / sqrt(d2);
|
|
|
|
|
|
|
|
|
|
dx = dx * factor;
|
|
|
|
|
dy = dy * factor;
|
|
|
|
@ -105,8 +103,8 @@ TouchMouseJoystick::TouchState TouchMouseJoystick::touch(int8_t fid, int32_t tx,
|
|
|
|
|
trackball_vel_x = dx / (dt * 1000.f);
|
|
|
|
|
trackball_vel_y = dy / (dt * 1000.f);
|
|
|
|
|
|
|
|
|
|
x = dx + usb_x;
|
|
|
|
|
y = dy + usb_y;
|
|
|
|
|
x = dx;
|
|
|
|
|
y = dy;
|
|
|
|
|
}
|
|
|
|
|
else // in bounds outside of outer dead zone - edge spin
|
|
|
|
|
{
|
|
|
|
@ -114,15 +112,15 @@ TouchMouseJoystick::TouchState TouchMouseJoystick::touch(int8_t fid, int32_t tx,
|
|
|
|
|
|
|
|
|
|
float len = sqrt(t2);
|
|
|
|
|
|
|
|
|
|
x = (tx * dead_zone_outer / len) * pos2usb + usb_x;
|
|
|
|
|
y = (ty * dead_zone_outer / len) * pos2usb + usb_y;
|
|
|
|
|
x = (tx * dead_zone_outer / len) * pos2unit;
|
|
|
|
|
y = (ty * dead_zone_outer / len) * pos2unit;
|
|
|
|
|
|
|
|
|
|
trackball_vel_x = 0;
|
|
|
|
|
trackball_vel_y = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (invert_x) x = 2 * usb_x - x;
|
|
|
|
|
if (invert_y) y = 2 * usb_y - y;
|
|
|
|
|
if (invert_x) x = -x;
|
|
|
|
|
if (invert_y) y = -y;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return touching;
|
|
|
|
@ -142,18 +140,18 @@ void TouchMouseJoystick::updateTrackball(uint32_t time)
|
|
|
|
|
|
|
|
|
|
float x1 = dx + trackball_vel_x * dt - trackball_friction * dt2 * dir;
|
|
|
|
|
|
|
|
|
|
if ((dir * x1) > usb_r)
|
|
|
|
|
if ((dir * x1) > 1.f)
|
|
|
|
|
{
|
|
|
|
|
x1 = dir * usb_r;
|
|
|
|
|
x1 = dir;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((dir * x1) > 0)
|
|
|
|
|
{
|
|
|
|
|
x = x1 + usb_x;
|
|
|
|
|
x = x1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
x = usb_x;
|
|
|
|
|
x = 0;
|
|
|
|
|
dx = 0;
|
|
|
|
|
trackball_vel_x = 0;
|
|
|
|
|
}
|
|
|
|
@ -168,18 +166,18 @@ void TouchMouseJoystick::updateTrackball(uint32_t time)
|
|
|
|
|
|
|
|
|
|
float y1 = dy + trackball_vel_y * dt - trackball_friction * dt2 * dir;
|
|
|
|
|
|
|
|
|
|
if ((dir * y1) > usb_r)
|
|
|
|
|
if ((dir * y1) > 1.f)
|
|
|
|
|
{
|
|
|
|
|
y1 = dir * usb_r;
|
|
|
|
|
y1 = dir;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((dir * y1) > 0)
|
|
|
|
|
{
|
|
|
|
|
y = y1 + usb_y;
|
|
|
|
|
y = y1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
y = usb_y;
|
|
|
|
|
y = 0;
|
|
|
|
|
dy = 0;
|
|
|
|
|
trackball_vel_y = 0;
|
|
|
|
|
}
|
|
|
|
|