From acb6927224ab1fe4bfa2d243bfac0a3adb874d1a Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Thu, 1 Aug 2013 23:50:33 +0000 Subject: [PATCH] tutorial: get rid of global variables in the input tutorial. --- demos/tutorial/07_input.cpp | 131 +++++++++++++++++++++--------------- 1 file changed, 76 insertions(+), 55 deletions(-) diff --git a/demos/tutorial/07_input.cpp b/demos/tutorial/07_input.cpp index 63bcdae6..d3bb3eb1 100644 --- a/demos/tutorial/07_input.cpp +++ b/demos/tutorial/07_input.cpp @@ -1,5 +1,5 @@ // -// Lol Engine - Cube tutorial +// Lol Engine - Input tutorial // // Copyright: (c) 2011-2013 Sam Hocevar // This program is free software; you can redistribute it and/or @@ -20,31 +20,34 @@ using namespace lol; LOLFX_RESOURCE_DECLARE(07_input); -enum +class InputTutorial : public WorldEntity { - KEY_MANUAL_ROTATION, - KEY_DRAG_MESH, - KEY_MAX -}; +public: + InputTutorial() + { +#if LOL_INPUT_V2 + m_controller = new Controller(KEY_MAX, AXIS_MAX); -enum -{ - AXIS_DRAG_PITCH, - AXIS_DRAG_YAW, - AXIS_PITCH, - AXIS_YAW, - AXIS_MAX -}; + m_keyboard = InputDevice::Get("Keyboard"); + if (m_keyboard) + m_controller->GetKey(KEY_MANUAL_ROTATION).Bind("Keyboard", "Space"); -#if LOL_INPUT_V2 -Controller* controller; + m_mouse = InputDevice::Get("Mouse"); + if (m_mouse) + { + m_controller->GetKey(KEY_DRAG_MESH).Bind("Mouse", "ButtonLeft"); + m_controller->GetAxis(AXIS_DRAG_PITCH).Bind("Mouse", "Y"); + m_controller->GetAxis(AXIS_DRAG_YAW).Bind("Mouse", "X"); + } + + m_joystick = InputDevice::Get("Joystick1"); + if (m_joystick) + { + m_controller->GetAxis(AXIS_PITCH).Bind("Joystick1", "Axis2"); + m_controller->GetAxis(AXIS_YAW).Bind("Joystick1", "Axis1"); + } #endif -class Cube : public WorldEntity -{ -public: - Cube() - { m_pitch_angle = 0; m_yaw_angle = 0; m_autorot = true; @@ -71,14 +74,14 @@ public: m_lines_indices << 4 << 5 << 5 << 6 << 6 << 7 << 7 << 4; m_lines_indices << 0 << 4 << 1 << 5 << 2 << 6 << 3 << 7; - m_text = new Text(NULL, "data/font/ascii.png"); + m_text = new Text("", "data/font/ascii.png"); m_text->SetPos(ivec3(5, 5, 1)); Ticker::Ref(m_text); m_ready = false; } - ~Cube() + ~InputTutorial() { Ticker::Unref(m_text); } @@ -88,35 +91,42 @@ public: WorldEntity::TickGame(seconds); #if LOL_INPUT_V2 - if (controller->GetKey(KEY_MANUAL_ROTATION).IsPressed()) - m_autorot = !m_autorot; - - if (controller->GetKey(KEY_DRAG_MESH).IsDown()) + /* Handle keyboard */ + if (m_keyboard) { - InputDevice::CaptureMouse(true); - m_pitch_angle -= controller->GetAxis(AXIS_DRAG_PITCH).GetValue() * seconds * 100; - m_yaw_angle += controller->GetAxis(AXIS_DRAG_YAW).GetValue() * seconds * 100; + if (m_controller->GetKey(KEY_MANUAL_ROTATION).IsPressed()) + m_autorot = !m_autorot; } - else + + /* Handle joystick */ + if (m_joystick) { - InputDevice::CaptureMouse(false); -#endif - if (m_autorot) - m_yaw_angle += seconds * 20; -#if LOL_INPUT_V2 + if (lol::abs(m_controller->GetAxis(AXIS_PITCH).GetValue()) > 0.2f) + m_pitch_angle -= m_controller->GetAxis(AXIS_PITCH).GetValue() * seconds * 100; + if (lol::abs(m_controller->GetAxis(AXIS_YAW).GetValue()) > 0.2f) + m_yaw_angle += m_controller->GetAxis(AXIS_YAW).GetValue() * seconds * 100; } - if (lol::abs(controller->GetAxis(AXIS_PITCH).GetValue()) > 0.2f) - m_pitch_angle -= controller->GetAxis(AXIS_PITCH).GetValue() * seconds * 100; - if (lol::abs(controller->GetAxis(AXIS_YAW).GetValue()) > 0.2f) - m_yaw_angle += controller->GetAxis(AXIS_YAW).GetValue() * seconds * 100; - InputDevice* mouse = InputDevice::Get("Mouse"); - if (mouse) + /* Handle mouse */ + if (m_mouse) { + if (m_controller->GetKey(KEY_DRAG_MESH).IsDown()) + { + InputDevice::CaptureMouse(true); + m_pitch_angle -= m_controller->GetAxis(AXIS_DRAG_PITCH).GetValue() * seconds * 100; + m_yaw_angle += m_controller->GetAxis(AXIS_DRAG_YAW).GetValue() * seconds * 100; + } + else + { + InputDevice::CaptureMouse(false); + if (m_autorot) + m_yaw_angle += seconds * 20; + } + m_text->SetText(String::Printf( "cursor: (%0.3f, %0.3f) - pixel (%d, %d)", - mouse->GetCursor(0).x, mouse->GetCursor(0).y, - mouse->GetCursorPixel(0).x, mouse->GetCursorPixel(0).y)); + m_mouse->GetCursor(0).x, m_mouse->GetCursor(0).y, + m_mouse->GetCursorPixel(0).x, m_mouse->GetCursorPixel(0).y)); } else #endif @@ -191,6 +201,27 @@ public: } private: + enum + { + KEY_MANUAL_ROTATION, + KEY_DRAG_MESH, + KEY_MAX + }; + + enum + { + AXIS_DRAG_PITCH, + AXIS_DRAG_YAW, + AXIS_PITCH, + AXIS_YAW, + AXIS_MAX + }; + +#if LOL_INPUT_V2 + InputDevice *m_keyboard, *m_mouse, *m_joystick; + Controller *m_controller; +#endif + bool m_autorot; float m_pitch_angle; float m_yaw_angle; @@ -216,17 +247,7 @@ int main(int argc, char **argv) Application app("Tutorial 7: Input", ivec2(640, 480), 60.0f); new DebugFps(5, 5); - new Cube(); - -#if LOL_INPUT_V2 - controller = new Controller(KEY_MAX, AXIS_MAX); - controller->GetKey(KEY_MANUAL_ROTATION).Bind("Keyboard", "Space"); - controller->GetKey(KEY_DRAG_MESH).Bind("Mouse", "ButtonLeft"); - controller->GetAxis(AXIS_DRAG_PITCH).Bind("Mouse", "Y"); - controller->GetAxis(AXIS_DRAG_YAW).Bind("Mouse", "X"); - controller->GetAxis(AXIS_PITCH).Bind("Joystick1", "Axis2"); - controller->GetAxis(AXIS_YAW).Bind("Joystick1", "Axis1"); -#endif + new InputTutorial(); app.Run();