| @@ -1,5 +1,5 @@ | |||||
| // | // | ||||
| // Lol Engine - Cube tutorial | |||||
| // Lol Engine - Input tutorial | |||||
| // | // | ||||
| // Copyright: (c) 2011-2013 Sam Hocevar <sam@hocevar.net> | // Copyright: (c) 2011-2013 Sam Hocevar <sam@hocevar.net> | ||||
| // This program is free software; you can redistribute it and/or | // This program is free software; you can redistribute it and/or | ||||
| @@ -20,31 +20,34 @@ using namespace lol; | |||||
| LOLFX_RESOURCE_DECLARE(07_input); | 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 | #endif | ||||
| class Cube : public WorldEntity | |||||
| { | |||||
| public: | |||||
| Cube() | |||||
| { | |||||
| m_pitch_angle = 0; | m_pitch_angle = 0; | ||||
| m_yaw_angle = 0; | m_yaw_angle = 0; | ||||
| m_autorot = true; | m_autorot = true; | ||||
| @@ -71,14 +74,14 @@ public: | |||||
| m_lines_indices << 4 << 5 << 5 << 6 << 6 << 7 << 7 << 4; | m_lines_indices << 4 << 5 << 5 << 6 << 6 << 7 << 7 << 4; | ||||
| m_lines_indices << 0 << 4 << 1 << 5 << 2 << 6 << 3 << 7; | 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)); | m_text->SetPos(ivec3(5, 5, 1)); | ||||
| Ticker::Ref(m_text); | Ticker::Ref(m_text); | ||||
| m_ready = false; | m_ready = false; | ||||
| } | } | ||||
| ~Cube() | |||||
| ~InputTutorial() | |||||
| { | { | ||||
| Ticker::Unref(m_text); | Ticker::Unref(m_text); | ||||
| } | } | ||||
| @@ -88,35 +91,42 @@ public: | |||||
| WorldEntity::TickGame(seconds); | WorldEntity::TickGame(seconds); | ||||
| #if LOL_INPUT_V2 | #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( | m_text->SetText(String::Printf( | ||||
| "cursor: (%0.3f, %0.3f) - pixel (%d, %d)", | "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 | else | ||||
| #endif | #endif | ||||
| @@ -191,6 +201,27 @@ public: | |||||
| } | } | ||||
| private: | 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; | bool m_autorot; | ||||
| float m_pitch_angle; | float m_pitch_angle; | ||||
| float m_yaw_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); | Application app("Tutorial 7: Input", ivec2(640, 480), 60.0f); | ||||
| new DebugFps(5, 5); | 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(); | app.Run(); | ||||