|
|
@@ -1,5 +1,5 @@ |
|
|
|
// |
|
|
|
// Lol Engine - Cube tutorial |
|
|
|
// Lol Engine - Input tutorial |
|
|
|
// |
|
|
|
// Copyright: (c) 2011-2013 Sam Hocevar <sam@hocevar.net> |
|
|
|
// 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(); |
|
|
|
|
|
|
|