Controller::WasKeyReleasedThisFrame() is now keyboard->key_released() so there is usually no need for a controller. They will completely disappear when joystick axis binding has been ported to InputDevice.legacy
@@ -77,11 +77,6 @@ void BtPhysTest::InitApp() | |||
m_loc_dp = .0f; | |||
#endif //CAT_MODE | |||
m_profile.register_default_keys(); | |||
m_controller = new Controller("Default"); | |||
m_controller->Init(m_profile); | |||
Ticker::Ref(m_controller); | |||
/* Create a camera that matches the settings of XNA BtPhysTest */ | |||
m_camera = new Camera(); | |||
@@ -304,7 +299,6 @@ BtPhysTest::~BtPhysTest() | |||
{ | |||
Scene& scene = Scene::GetScene(); | |||
scene.PopCamera(m_camera); | |||
Ticker::Unref(m_controller); | |||
Ticker::Unref(m_light1); | |||
Ticker::Unref(m_light2); | |||
@@ -401,7 +395,7 @@ void BtPhysTest::tick_game(float seconds) | |||
auto context = Debug::DrawContext::New(Color::white, 1.f); | |||
Debug::DrawGrid(vec3::zero, vec3::axis_x, vec3::axis_y, vec3::axis_z, 10.f); | |||
if (m_controller->WasKeyReleasedThisFrame((int)input::key::SC_Escape)) | |||
if (input::keyboard()->key_released(input::key::SC_Escape)) | |||
Ticker::Shutdown(); | |||
m_loop_value += seconds; | |||
@@ -578,6 +572,8 @@ void BtPhysTest::tick_game(float seconds) | |||
#if USE_CHARACTER | |||
{ | |||
auto keyboard = input::keyboard(); | |||
for (int i = 0; i < m_character_list.count(); i++) | |||
{ | |||
PhysicsObject* PhysObj = m_character_list[i]; | |||
@@ -585,15 +581,15 @@ void BtPhysTest::tick_game(float seconds) | |||
mat4 CtlrMx = Character->GetTransform(); | |||
vec3 movement(0.f); | |||
movement.z = (m_controller->IsKeyPressed(input::key::SC_Right) ? 1.f : 0.f) | |||
- (m_controller->IsKeyPressed(input::key::SC_Left) ? 1.f : 0.f); | |||
movement.x = (m_controller->IsKeyPressed(input::key::SC_Up) ? 1.f : 0.f) | |||
- (m_controller->IsKeyPressed(input::key::SC_Down) ? 1.f : 0.f); | |||
movement.y = (m_controller->IsKeyPressed(input::key::SC_PageUp) ? 1.f : 0.f) | |||
- (m_controller->IsKeyPressed(input::key::SC_PageDown) ? 1.f : 0.f); | |||
movement.z = (keyboard->key(input::key::SC_Right) ? 1.f : 0.f) | |||
- (keyboard->key(input::key::SC_Left) ? 1.f : 0.f); | |||
movement.x = (keyboard->key(input::key::SC_Up) ? 1.f : 0.f) | |||
- (keyboard->key(input::key::SC_Down) ? 1.f : 0.f); | |||
movement.y = (keyboard->key(input::key::SC_PageUp) ? 1.f : 0.f) | |||
- (keyboard->key(input::key::SC_PageDown) ? 1.f : 0.f); | |||
vec3 CharMove = movement * seconds * vec3(4.f, 10.f, 4.f); | |||
if (m_controller->WasKeyReleasedThisFrame(input::key::SC_Space)) | |||
if (input::keyboard()->key_released(input::key::SC_Space)) | |||
Character->Jump(); | |||
Character->SetMovementForFrame(CharMove); | |||
@@ -93,8 +93,6 @@ private: | |||
std::shared_ptr<Shader> m_cat_shader; | |||
CatShaderData* m_cat_sdata; | |||
Camera* m_camera; | |||
Controller* m_controller; | |||
InputProfile m_profile; | |||
Light* m_light1; | |||
Light* m_light2; | |||
int m_init_status; | |||
@@ -28,38 +28,13 @@ public: | |||
{ | |||
m_controller = new Controller("Default"); | |||
# ifdef OLD_SCHOOL | |||
m_controller->SetInputCount(KEY_MAX, AXIS_MAX); | |||
auto keyboard = input::keyboard(); | |||
m_controller->GetKey(KEY_MANUAL_ROTATION).Bind(g_name_keyboard, "Space"); | |||
auto mouse = input::mouse(); | |||
if (mouse) | |||
{ | |||
m_controller->GetKey(KEY_DRAG_MESH).Bind(g_name_mouse, "Left"); | |||
m_controller->GetAxis(AXIS_DRAG_PITCH).Bind(g_name_mouse, "Y"); | |||
m_controller->GetAxis(AXIS_DRAG_YAW).Bind(g_name_mouse, "X"); | |||
} | |||
m_joystick = InputDevice::Get(g_name_joystick(1)); | |||
if (m_joystick) | |||
{ | |||
m_controller->GetAxis(AXIS_PITCH).Bind(g_name_joystick(1), "Axis2"); | |||
m_controller->GetAxis(AXIS_YAW).Bind(g_name_joystick(1), "Axis1"); | |||
} | |||
# else | |||
m_profile | |||
<< InputProfile::KeyboardKey(KEY_MANUAL_ROTATION, "Space") | |||
<< InputProfile::MouseKey(KEY_DRAG_MESH, "Left") | |||
<< InputProfile::JoystickAxis(1, AXIS_PITCH, "Axis2") | |||
<< InputProfile::JoystickAxis(1, AXIS_YAW, "Axis1") | |||
<< InputProfile::MouseAxis(AXIS_DRAG_PITCH, "Y") | |||
<< InputProfile::MouseAxis(AXIS_DRAG_YAW, "X"); | |||
m_controller->Init(m_profile); | |||
m_joystick = InputDevice::GetJoystick(1); | |||
# endif //OLD_SCHOOL | |||
m_pitch_angle = 0; | |||
m_yaw_angle = 0; | |||
@@ -103,24 +78,22 @@ public: | |||
{ | |||
WorldEntity::tick_game(seconds); | |||
auto mouse = input::mouse(); | |||
auto keyboard = input::keyboard(); | |||
/* Handle keyboard */ | |||
if (m_controller->WasKeyPressedThisFrame(KEY_MANUAL_ROTATION)) | |||
if (keyboard->key_pressed(input::key::SC_Space)) | |||
m_autorot = !m_autorot; | |||
/* Handle joystick */ | |||
if (m_joystick) | |||
{ | |||
if (lol::abs(m_controller->GetAxisValue(AXIS_PITCH)) > 0.2f) | |||
m_pitch_angle += m_controller->GetAxisValue(AXIS_PITCH) * seconds; | |||
if (lol::abs(m_controller->GetAxisValue(AXIS_YAW)) > 0.2f) | |||
m_yaw_angle += m_controller->GetAxisValue(AXIS_YAW) * seconds; | |||
} | |||
if (lol::abs(m_controller->GetAxisValue(AXIS_PITCH)) > 0.2f) | |||
m_pitch_angle += m_controller->GetAxisValue(AXIS_PITCH) * seconds; | |||
if (lol::abs(m_controller->GetAxisValue(AXIS_YAW)) > 0.2f) | |||
m_yaw_angle += m_controller->GetAxisValue(AXIS_YAW) * seconds; | |||
/* Handle mouse */ | |||
if (true) | |||
{ | |||
auto mouse = input::mouse(); | |||
if (mouse->button(input::button::BTN_Left)) | |||
{ | |||
mouse->capture(true); | |||
@@ -207,13 +180,6 @@ public: | |||
} | |||
private: | |||
enum | |||
{ | |||
KEY_MANUAL_ROTATION, | |||
KEY_DRAG_MESH, | |||
KEY_MAX | |||
}; | |||
enum | |||
{ | |||
AXIS_DRAG_PITCH, | |||
@@ -223,7 +189,6 @@ private: | |||
AXIS_MAX | |||
}; | |||
InputDevice *m_joystick; | |||
Controller *m_controller; | |||
InputProfile m_profile; | |||
@@ -28,11 +28,6 @@ public: | |||
for (auto &val : m_streams) | |||
val = -1; | |||
m_controller = new Controller("Default"); | |||
m_profile << InputProfile::KeyboardKey(0, "Space") | |||
<< InputProfile::MouseKey(1, "Left"); | |||
m_controller->Init(m_profile); | |||
m_text = new Text("SPACE for sine wave, Left Click for white noise", | |||
"data/font/ascii.png"); | |||
m_text->SetPos(vec3(5, 5, 1)); | |||
@@ -65,9 +60,14 @@ public: | |||
{ | |||
WorldEntity::tick_game(seconds); | |||
auto mouse = input::mouse(); | |||
auto keyboard = input::keyboard(); | |||
for (int i = 0; i < 2; ++i) | |||
{ | |||
if (!m_controller->WasKeyPressedThisFrame(i)) | |||
if (i == 0 && !keyboard->key_pressed(input::key::SC_Space)) | |||
continue; | |||
if (i == 1 && !mouse->button_pressed(input::button::BTN_Left)) | |||
continue; | |||
if (m_streams[i] < 0) | |||
@@ -92,10 +92,6 @@ public: | |||
private: | |||
int m_streams[2]; | |||
Controller *m_controller; | |||
InputProfile m_profile; | |||
Text *m_text; | |||
}; | |||
@@ -42,13 +42,6 @@ public: | |||
m_texel_settings = vec4(1.0, 1.0, 2.0, 2.0) / (vec4)m_size.xyxy; | |||
m_screen_settings = vec4(1.0, 1.0, 0.5, 0.5) * (vec4)m_size.xyxy; | |||
m_controller = new Controller("Default"); | |||
m_profile << InputProfile::MouseKey(0, "Left") | |||
<< InputProfile::MouseKey(1, "Right") | |||
<< InputProfile::MouseKey(2, "Middle") | |||
<< InputProfile::KeyboardKey(3, "Space"); | |||
m_controller->Init(m_profile); | |||
/* Window size decides the world aspect ratio. For instance, 640×480 | |||
* will be mapped to (-0.66,-0.5) - (0.66,0.5). */ | |||
m_window_size = Video::GetSize(); | |||
@@ -157,12 +150,15 @@ public: | |||
{ | |||
WorldEntity::tick_game(seconds); | |||
ivec2 mousepos = input::mouse()->get_cursor_pixel(0); | |||
auto mouse = input::mouse(); | |||
auto keyboard = input::keyboard(); | |||
ivec2 mousepos = mouse->get_cursor_pixel(0); | |||
int prev_frame = (m_frame + 4) % 4; | |||
m_frame = (m_frame + 1) % 4; | |||
if (m_controller->WasKeyPressedThisFrame(3)) | |||
if (keyboard->key_pressed(input::key::SC_Space)) | |||
{ | |||
m_julia = !m_julia; | |||
if (m_julia) | |||
@@ -180,7 +176,7 @@ public: | |||
rcmplx worldmouse = m_view.center + rcmplx(ScreenToWorldOffset((vec2)mousepos)); | |||
if (m_controller->IsKeyPressed(2)) | |||
if (mouse->button(input::button::BTN_Middle)) | |||
{ | |||
if (!m_drag) | |||
{ | |||
@@ -208,8 +204,8 @@ public: | |||
} | |||
} | |||
bool hold_right = m_controller->IsKeyPressed(0); | |||
bool hold_left = m_controller->IsKeyPressed(1); | |||
bool hold_right = mouse->button(input::button::BTN_Right); | |||
bool hold_left = mouse->button(input::button::BTN_Left); | |||
if ((hold_right || hold_left) && mousepos.x != -1) | |||
{ | |||
double zoom = hold_right ? -0.5 : 0.5; | |||
@@ -564,10 +560,6 @@ private: | |||
vec4 m_texel_settings, m_screen_settings; | |||
mat4 m_zoom_settings; | |||
// Input support | |||
Controller *m_controller; | |||
InputProfile m_profile; | |||
#if LOL_FEATURE_THREADS | |||
/* Worker threads */ | |||
thread *m_threads[MAX_THREADS]; | |||
@@ -282,31 +282,6 @@ AxisBinding& Controller::GetAxis(int index) | |||
return m_axis_bindings[index]; | |||
} | |||
// Key methods: should not go directly to binding | |||
bool Controller::IsKeyPressed(int index) const | |||
{ | |||
auto key = m_key_bindings.find(index); | |||
return key != m_key_bindings.end() && key->second.IsPressed(); | |||
} | |||
bool Controller::IsKeyReleased(int index) const | |||
{ | |||
auto key = m_key_bindings.find(index); | |||
return key != m_key_bindings.end() && key->second.IsReleased(); | |||
} | |||
bool Controller::WasKeyPressedThisFrame(int index) const | |||
{ | |||
auto key = m_key_bindings.find(index); | |||
return key != m_key_bindings.end() && key->second.WasPressedThisFrame(); | |||
} | |||
bool Controller::WasKeyReleasedThisFrame(int index) const | |||
{ | |||
auto key = m_key_bindings.find(index); | |||
return key != m_key_bindings.end() && key->second.WasReleasedThisFrame(); | |||
} | |||
//Axis methods: should not go directly to binding ----------------------------- | |||
float Controller::GetAxisValue(int index) const | |||
{ | |||
@@ -30,10 +30,6 @@ protected: | |||
bool IsPressed() const { return m_current; } | |||
/** Indicates wheither the key is currently up */ | |||
bool IsReleased() const { return !m_current; } | |||
/** Indicates wheither the key has just been pressed */ | |||
bool WasPressedThisFrame() const { return m_current && !m_previous; } | |||
/** Indicates wheither the key has just been released */ | |||
bool WasReleasedThisFrame() const { return !m_current && m_previous; } | |||
public: | |||
//Binding methods --------------------------------------------------------- | |||
@@ -322,16 +318,6 @@ public: | |||
AxisBinding& GetAxis(int index); | |||
AxisBinding const& GetAxis(int index) const; | |||
/** Key methods: should not go directly to binding */ | |||
/** Indicates wheither the key is currently down */ | |||
bool IsKeyPressed(int index) const; | |||
/** Indicates wheither the key is currently up */ | |||
bool IsKeyReleased(int index) const; | |||
/** Indicates wheither the key has just been pressed */ | |||
bool WasKeyPressedThisFrame(int index) const; | |||
/** Indicates wheither the key has just been released */ | |||
bool WasKeyReleasedThisFrame(int index) const; | |||
/** Axis methods: should not go directly to binding */ | |||
/** Gets the current absolute value of this axis */ | |||
float GetAxisValue(int index) const; | |||
@@ -176,18 +176,12 @@ void SdlInput::tick(float seconds) | |||
if (event.type == SDL_KEYDOWN) | |||
{ | |||
auto sc2 = sc; | |||
switch (sc) | |||
{ | |||
case input::key::SC_CapsLock: | |||
if (sc == input::key::SC_CapsLock) | |||
sc2 = input::key::SC_CapsLockStatus; | |||
break; | |||
case input::key::SC_ScrollLock: | |||
else if (sc == input::key::SC_ScrollLock) | |||
sc2 = input::key::SC_ScrollLockStatus; | |||
break; | |||
case input::key::SC_NumLockClear: | |||
else if (sc == input::key::SC_NumLockClear) | |||
sc2 = input::key::SC_NumLockClearStatus; | |||
break; | |||
} | |||
keyboard->internal_set_key(sc2, !keyboard->key(sc2)); | |||
} | |||
LOL_ATTR_FALLTHROUGH | |||