Basic Android touch support (rotation only) (Refs #173)
This commit is contained in:
parent
519dab3855
commit
c9d9c83617
2 changed files with 46 additions and 14 deletions
|
|
@ -1134,20 +1134,49 @@ int32_t VulkanExampleBase::handleAppInput(struct android_app* app, AInputEvent*
|
||||||
VulkanExampleBase* vulkanExample = reinterpret_cast<VulkanExampleBase*>(app->userData);
|
VulkanExampleBase* vulkanExample = reinterpret_cast<VulkanExampleBase*>(app->userData);
|
||||||
if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION)
|
if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION)
|
||||||
{
|
{
|
||||||
if (AInputEvent_getSource(event) == AINPUT_SOURCE_JOYSTICK)
|
int32_t eventSource = AInputEvent_getSource(event);
|
||||||
{
|
switch (eventSource) {
|
||||||
// Left thumbstick
|
case AINPUT_SOURCE_JOYSTICK: {
|
||||||
vulkanExample->gamePadState.axisLeft.x = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_X, 0);
|
// Left thumbstick
|
||||||
vulkanExample->gamePadState.axisLeft.y = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_Y, 0);
|
vulkanExample->gamePadState.axisLeft.x = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_X, 0);
|
||||||
// Right thumbstick
|
vulkanExample->gamePadState.axisLeft.y = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_Y, 0);
|
||||||
vulkanExample->gamePadState.axisRight.x = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_Z, 0);
|
// Right thumbstick
|
||||||
vulkanExample->gamePadState.axisRight.y = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_RZ, 0);
|
vulkanExample->gamePadState.axisRight.x = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_Z, 0);
|
||||||
|
vulkanExample->gamePadState.axisRight.y = AMotionEvent_getAxisValue(event, AMOTION_EVENT_AXIS_RZ, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case AINPUT_SOURCE_TOUCHSCREEN: {
|
||||||
|
int32_t action = AMotionEvent_getAction(event);
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case AMOTION_EVENT_ACTION_DOWN: {
|
||||||
|
vulkanExample->touchPos.x = AMotionEvent_getX(event, 0);
|
||||||
|
vulkanExample->touchPos.y = AMotionEvent_getY(event, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case AMOTION_EVENT_ACTION_MOVE: {
|
||||||
|
int32_t eventX = AMotionEvent_getX(event, 0);
|
||||||
|
int32_t eventY = AMotionEvent_getY(event, 0);
|
||||||
|
|
||||||
|
vulkanExample->camera.rotate(glm::vec3(0.0f, 1.0f, 0.0f));
|
||||||
|
vulkanExample->rotation.x += (float)(vulkanExample->touchPos.y - eventY) * vulkanExample->rotationSpeed * 0.5f;
|
||||||
|
vulkanExample->rotation.y -= (float)(vulkanExample->touchPos.x - eventX) * vulkanExample->rotationSpeed * 0.5f;
|
||||||
|
vulkanExample->viewChanged();
|
||||||
|
|
||||||
|
vulkanExample->touchPos.x = eventX;
|
||||||
|
vulkanExample->touchPos.y = eventY;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// todo : touch input
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_KEY)
|
if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_KEY)
|
||||||
|
|
|
||||||
|
|
@ -197,7 +197,10 @@ public:
|
||||||
#elif defined(__ANDROID__)
|
#elif defined(__ANDROID__)
|
||||||
// true if application has focused, false if moved to background
|
// true if application has focused, false if moved to background
|
||||||
bool focused = false;
|
bool focused = false;
|
||||||
|
struct TouchPos {
|
||||||
|
int32_t x;
|
||||||
|
int32_t y;
|
||||||
|
} touchPos;
|
||||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||||
wl_display *display = nullptr;
|
wl_display *display = nullptr;
|
||||||
wl_registry *registry = nullptr;
|
wl_registry *registry = nullptr;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue