|
@@ -28,6 +28,8 @@ extern "C" { |
|
|
#include "core.h" |
|
|
#include "core.h" |
|
|
#include "androidapp.h" |
|
|
#include "androidapp.h" |
|
|
|
|
|
|
|
|
|
|
|
#include "input/input_internal.h" |
|
|
|
|
|
|
|
|
using namespace lol; |
|
|
using namespace lol; |
|
|
|
|
|
|
|
|
namespace lol |
|
|
namespace lol |
|
@@ -95,12 +97,16 @@ public: |
|
|
/* FIXME: we need proper unproject or at least screen space events!! */ |
|
|
/* FIXME: we need proper unproject or at least screen space events!! */ |
|
|
ivec2 m_wanted_resolution; |
|
|
ivec2 m_wanted_resolution; |
|
|
|
|
|
|
|
|
|
|
|
InputDeviceInternal* m_mouse; |
|
|
|
|
|
|
|
|
SavedState m_state; |
|
|
SavedState m_state; |
|
|
|
|
|
|
|
|
private: |
|
|
private: |
|
|
void HandleCommand(int32_t cmd); |
|
|
void HandleCommand(int32_t cmd); |
|
|
int32_t HandleInput(AInputEvent* event); |
|
|
int32_t HandleInput(AInputEvent* event); |
|
|
|
|
|
|
|
|
|
|
|
vec2 m_prev_pos; |
|
|
|
|
|
|
|
|
EGLDisplay m_display; |
|
|
EGLDisplay m_display; |
|
|
EGLSurface m_surface; |
|
|
EGLSurface m_surface; |
|
|
EGLContext m_context; |
|
|
EGLContext m_context; |
|
@@ -209,14 +215,19 @@ int32_t lol::AndroidAppData::HandleInput(AInputEvent* event) |
|
|
AMotionEvent_getY(event, 0)); |
|
|
AMotionEvent_getY(event, 0)); |
|
|
pos = pos * m_wanted_resolution / Video::GetSize(); |
|
|
pos = pos * m_wanted_resolution / Video::GetSize(); |
|
|
pos.y = m_wanted_resolution.y - 1 - pos.y; |
|
|
pos.y = m_wanted_resolution.y - 1 - pos.y; |
|
|
Input::SetMousePos(pos); |
|
|
|
|
|
|
|
|
m_mouse->SetCursor(0, vec2(pos) / vec2(m_wanted_resolution), pos); |
|
|
|
|
|
// Note: 100.0f is an arbitrary value that makes it feel about the same than an xbox controller joystick |
|
|
|
|
|
m_mouse->SetAxis(0, (pos.x - m_prev_pos.x) / m_wanted_resolution.x * 100.f); |
|
|
|
|
|
// Y Axis is also negated to match the usual joystick Y axis (negatives values are for the upper direction) |
|
|
|
|
|
m_mouse->SetAxis(1, (pos.y - m_prev_pos.y) / m_wanted_resolution.y * -100.f); |
|
|
|
|
|
m_prev_pos = pos; |
|
|
switch (AKeyEvent_getAction(event) & AMOTION_EVENT_ACTION_MASK) |
|
|
switch (AKeyEvent_getAction(event) & AMOTION_EVENT_ACTION_MASK) |
|
|
{ |
|
|
{ |
|
|
case AMOTION_EVENT_ACTION_DOWN: |
|
|
case AMOTION_EVENT_ACTION_DOWN: |
|
|
Input::SetMouseButton(0); |
|
|
|
|
|
|
|
|
m_mouse->SetKey(0, true); |
|
|
break; |
|
|
break; |
|
|
case AMOTION_EVENT_ACTION_UP: |
|
|
case AMOTION_EVENT_ACTION_UP: |
|
|
Input::UnsetMouseButton(0); |
|
|
|
|
|
|
|
|
m_mouse->SetKey(0, false); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
return 1; |
|
|
return 1; |
|
@@ -293,6 +304,7 @@ lol::AndroidApp::AndroidApp(char const *title, ivec2 res, float fps) |
|
|
: m_data(g_data) |
|
|
: m_data(g_data) |
|
|
{ |
|
|
{ |
|
|
m_data->m_wanted_resolution = res; |
|
|
m_data->m_wanted_resolution = res; |
|
|
|
|
|
m_data->m_mouse = InputDeviceInternal::CreateStandardMouse(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void lol::AndroidApp::ShowPointer(bool show) |
|
|
void lol::AndroidApp::ShowPointer(bool show) |
|
@@ -302,6 +314,7 @@ void lol::AndroidApp::ShowPointer(bool show) |
|
|
lol::AndroidApp::~AndroidApp() |
|
|
lol::AndroidApp::~AndroidApp() |
|
|
{ |
|
|
{ |
|
|
m_data->DestroyDisplay(); |
|
|
m_data->DestroyDisplay(); |
|
|
|
|
|
/* FIXME: handle m_data->m_mouse */ |
|
|
delete m_data; |
|
|
delete m_data; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|