Ignore:
Timestamp:
Aug 2, 2013, 1:50:33 AM (7 years ago)
Author:
sam
Message:

tutorial: get rid of global variables in the input tutorial.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/demos/tutorial/07_input.cpp

    r2821 r2834  
    11//
    2 // Lol Engine - Cube tutorial
     2// Lol Engine - Input tutorial
    33//
    44// Copyright: (c) 2011-2013 Sam Hocevar <sam@hocevar.net>
     
    2121LOLFX_RESOURCE_DECLARE(07_input);
    2222
    23 enum
    24 {
    25     KEY_MANUAL_ROTATION,
    26     KEY_DRAG_MESH,
    27     KEY_MAX
    28 };
    29 
    30 enum
    31 {
    32     AXIS_DRAG_PITCH,
    33     AXIS_DRAG_YAW,
    34     AXIS_PITCH,
    35     AXIS_YAW,
    36     AXIS_MAX
    37 };
    38 
    39 #if LOL_INPUT_V2
    40 Controller* controller;
    41 #endif
    42 
    43 class Cube : public WorldEntity
     23class InputTutorial : public WorldEntity
    4424{
    4525public:
    46     Cube()
    47     {
     26    InputTutorial()
     27    {
     28#if LOL_INPUT_V2
     29        m_controller = new Controller(KEY_MAX, AXIS_MAX);
     30
     31        m_keyboard = InputDevice::Get("Keyboard");
     32        if (m_keyboard)
     33            m_controller->GetKey(KEY_MANUAL_ROTATION).Bind("Keyboard", "Space");
     34
     35        m_mouse = InputDevice::Get("Mouse");
     36        if (m_mouse)
     37        {
     38            m_controller->GetKey(KEY_DRAG_MESH).Bind("Mouse", "ButtonLeft");
     39            m_controller->GetAxis(AXIS_DRAG_PITCH).Bind("Mouse", "Y");
     40            m_controller->GetAxis(AXIS_DRAG_YAW).Bind("Mouse", "X");
     41        }
     42
     43        m_joystick = InputDevice::Get("Joystick1");
     44        if (m_joystick)
     45        {
     46            m_controller->GetAxis(AXIS_PITCH).Bind("Joystick1", "Axis2");
     47            m_controller->GetAxis(AXIS_YAW).Bind("Joystick1", "Axis1");
     48        }
     49#endif
     50
    4851        m_pitch_angle = 0;
    4952        m_yaw_angle = 0;
     
    7275        m_lines_indices << 0 << 4 << 1 << 5 << 2 << 6 << 3 << 7;
    7376
    74         m_text = new Text(NULL, "data/font/ascii.png");
     77        m_text = new Text("", "data/font/ascii.png");
    7578        m_text->SetPos(ivec3(5, 5, 1));
    7679        Ticker::Ref(m_text);
     
    7982    }
    8083
    81     ~Cube()
     84    ~InputTutorial()
    8285    {
    8386        Ticker::Unref(m_text);
     
    8992
    9093#if LOL_INPUT_V2
    91         if (controller->GetKey(KEY_MANUAL_ROTATION).IsPressed())
    92             m_autorot = !m_autorot;
    93 
    94         if (controller->GetKey(KEY_DRAG_MESH).IsDown())
    95         {
    96             InputDevice::CaptureMouse(true);
    97             m_pitch_angle -= controller->GetAxis(AXIS_DRAG_PITCH).GetValue() * seconds * 100;
    98             m_yaw_angle += controller->GetAxis(AXIS_DRAG_YAW).GetValue() * seconds * 100;
    99         }
    100         else
    101         {
    102             InputDevice::CaptureMouse(false);
    103 #endif
    104             if (m_autorot)
    105                m_yaw_angle += seconds * 20;
    106 #if LOL_INPUT_V2
    107         }
    108         if (lol::abs(controller->GetAxis(AXIS_PITCH).GetValue()) > 0.2f)
    109             m_pitch_angle -= controller->GetAxis(AXIS_PITCH).GetValue() * seconds * 100;
    110         if (lol::abs(controller->GetAxis(AXIS_YAW).GetValue()) > 0.2f)
    111             m_yaw_angle += controller->GetAxis(AXIS_YAW).GetValue() * seconds * 100;
    112 
    113         InputDevice* mouse = InputDevice::Get("Mouse");
    114         if (mouse)
    115         {
     94        /* Handle keyboard */
     95        if (m_keyboard)
     96        {
     97            if (m_controller->GetKey(KEY_MANUAL_ROTATION).IsPressed())
     98                m_autorot = !m_autorot;
     99        }
     100
     101        /* Handle joystick */
     102        if (m_joystick)
     103        {
     104            if (lol::abs(m_controller->GetAxis(AXIS_PITCH).GetValue()) > 0.2f)
     105                m_pitch_angle -= m_controller->GetAxis(AXIS_PITCH).GetValue() * seconds * 100;
     106            if (lol::abs(m_controller->GetAxis(AXIS_YAW).GetValue()) > 0.2f)
     107                m_yaw_angle += m_controller->GetAxis(AXIS_YAW).GetValue() * seconds * 100;
     108        }
     109
     110        /* Handle mouse */
     111        if (m_mouse)
     112        {
     113            if (m_controller->GetKey(KEY_DRAG_MESH).IsDown())
     114            {
     115                InputDevice::CaptureMouse(true);
     116                m_pitch_angle -= m_controller->GetAxis(AXIS_DRAG_PITCH).GetValue() * seconds * 100;
     117                m_yaw_angle += m_controller->GetAxis(AXIS_DRAG_YAW).GetValue() * seconds * 100;
     118            }
     119            else
     120            {
     121                InputDevice::CaptureMouse(false);
     122                if (m_autorot)
     123                    m_yaw_angle += seconds * 20;
     124            }
     125
    116126            m_text->SetText(String::Printf(
    117127                "cursor: (%0.3f, %0.3f) - pixel (%d, %d)",
    118                 mouse->GetCursor(0).x, mouse->GetCursor(0).y,
    119                 mouse->GetCursorPixel(0).x, mouse->GetCursorPixel(0).y));
     128                m_mouse->GetCursor(0).x, m_mouse->GetCursor(0).y,
     129                m_mouse->GetCursorPixel(0).x, m_mouse->GetCursorPixel(0).y));
    120130        }
    121131        else
     
    192202
    193203private:
     204    enum
     205    {
     206        KEY_MANUAL_ROTATION,
     207        KEY_DRAG_MESH,
     208        KEY_MAX
     209    };
     210
     211    enum
     212    {
     213        AXIS_DRAG_PITCH,
     214        AXIS_DRAG_YAW,
     215        AXIS_PITCH,
     216        AXIS_YAW,
     217        AXIS_MAX
     218    };
     219
     220#if LOL_INPUT_V2
     221    InputDevice *m_keyboard, *m_mouse, *m_joystick;
     222    Controller *m_controller;
     223#endif
     224
    194225    bool m_autorot;
    195226    float m_pitch_angle;
     
    217248
    218249    new DebugFps(5, 5);
    219     new Cube();
    220 
    221 #if LOL_INPUT_V2
    222     controller = new Controller(KEY_MAX, AXIS_MAX);
    223     controller->GetKey(KEY_MANUAL_ROTATION).Bind("Keyboard", "Space");
    224     controller->GetKey(KEY_DRAG_MESH).Bind("Mouse", "ButtonLeft");
    225     controller->GetAxis(AXIS_DRAG_PITCH).Bind("Mouse", "Y");
    226     controller->GetAxis(AXIS_DRAG_YAW).Bind("Mouse", "X");
    227     controller->GetAxis(AXIS_PITCH).Bind("Joystick1", "Axis2");
    228     controller->GetAxis(AXIS_YAW).Bind("Joystick1", "Axis1");
    229 #endif
     250    new InputTutorial();
    230251
    231252    app.Run();
Note: See TracChangeset for help on using the changeset viewer.