|
|
|
@ -24,6 +24,9 @@ void TouchDpad::init(int32_t pos_x, int32_t pos_y, int32_t pos_r, DpadType dpad_
|
|
|
|
|
this->dead_zone_inner2 = 0;
|
|
|
|
|
|
|
|
|
|
this->dpad_type = dpad_type;
|
|
|
|
|
|
|
|
|
|
this->invert_x = 1;
|
|
|
|
|
this->invert_y = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TouchDpad::setDeadZoneInner(int32_t dead_zone_inner)
|
|
|
|
@ -32,6 +35,16 @@ void TouchDpad::setDeadZoneInner(int32_t dead_zone_inner)
|
|
|
|
|
this->dead_zone_inner2 = dead_zone_inner * dead_zone_inner;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TouchDpad::setInvertX(bool invert_x)
|
|
|
|
|
{
|
|
|
|
|
this->invert_x = invert_x ? -1 : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TouchDpad::setInvertY(bool invert_y)
|
|
|
|
|
{
|
|
|
|
|
this->invert_y = invert_y ? -1 : 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int8_t TouchDpad::touch(int32_t tx, int32_t ty)
|
|
|
|
|
{
|
|
|
|
|
int8_t ret = 2;
|
|
|
|
@ -39,7 +52,7 @@ int8_t TouchDpad::touch(int32_t tx, int32_t ty)
|
|
|
|
|
tx -= pos_x;
|
|
|
|
|
ty -= pos_y;
|
|
|
|
|
|
|
|
|
|
button = 0;
|
|
|
|
|
button = NOT_PRESSED;
|
|
|
|
|
|
|
|
|
|
int32_t t2 = tx * tx + ty * ty;
|
|
|
|
|
|
|
|
|
@ -55,36 +68,44 @@ int8_t TouchDpad::touch(int32_t tx, int32_t ty)
|
|
|
|
|
}
|
|
|
|
|
else // in bounds
|
|
|
|
|
{
|
|
|
|
|
button = 0;
|
|
|
|
|
|
|
|
|
|
switch (dpad_type)
|
|
|
|
|
{
|
|
|
|
|
case DPAD_TYPE_SECTOR4:
|
|
|
|
|
button |= (ty < tx);
|
|
|
|
|
button |= (ty < -tx) << 1;
|
|
|
|
|
|
|
|
|
|
if (button == 0b11) button = 0b10;
|
|
|
|
|
else if (button == 0b10) button = 0b11;
|
|
|
|
|
button |= (invert_y * ty > invert_x * -tx);
|
|
|
|
|
button |= (invert_y * ty > invert_x * tx) << 1;
|
|
|
|
|
|
|
|
|
|
++button;
|
|
|
|
|
switch (button)
|
|
|
|
|
{
|
|
|
|
|
case 0b00: button = 0; break;
|
|
|
|
|
case 0b01: button = 2; break;
|
|
|
|
|
case 0b11: button = 4; break;
|
|
|
|
|
case 0b10: button = 6; break;
|
|
|
|
|
|
|
|
|
|
default: button = NOT_PRESSED; break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case DPAD_TYPE_SECTOR8:
|
|
|
|
|
button |= (ty < tx * k2);
|
|
|
|
|
button |= (ty < tx * k1) << 1;
|
|
|
|
|
button |= (ty < -tx * k1) << 2;
|
|
|
|
|
button |= (ty < -tx * k2) << 3;
|
|
|
|
|
button |= (invert_y * ty > invert_x * -tx * k2);
|
|
|
|
|
button |= (invert_y * ty > invert_x * -tx * k1) << 1;
|
|
|
|
|
button |= (invert_y * ty > invert_x * tx * k1) << 2;
|
|
|
|
|
button |= (invert_y * ty > invert_x * tx * k2) << 3;
|
|
|
|
|
|
|
|
|
|
switch (button)
|
|
|
|
|
{
|
|
|
|
|
case 0: button = 1; break;
|
|
|
|
|
case 1: button = 5; break; // 1 & 2
|
|
|
|
|
case 0: button = 0; break;
|
|
|
|
|
case 1: button = 1; break;
|
|
|
|
|
case 3: button = 2; break;
|
|
|
|
|
case 7: button = 6; break; // 2 & 3
|
|
|
|
|
case 15: button = 3; break;
|
|
|
|
|
case 14: button = 7; break; // 3 & 4
|
|
|
|
|
case 12: button = 4; break;
|
|
|
|
|
case 8: button = 8; break; // 4 & 1
|
|
|
|
|
default: button = 9; break; // error
|
|
|
|
|
case 7: button = 3; break;
|
|
|
|
|
case 15: button = 4; break;
|
|
|
|
|
case 14: button = 5; break;
|
|
|
|
|
case 12: button = 6; break;
|
|
|
|
|
case 8: button = 7; break;
|
|
|
|
|
|
|
|
|
|
default: button = NOT_PRESSED; break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|