src/Input.hh
author terom
Mon, 08 Dec 2008 16:23:30 +0000
changeset 290 f8e69f493460
parent 283 7540b0859579
child 300 417183866f35
permissions -rw-r--r--
NetworkObject + NetworkServer documentation
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     1
#ifndef INPUT_HH
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     2
#define INPUT_HH
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     3
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
     4
#include <stdint.h>
230
78cf0cd69af4 better input handling
terom
parents: 229
diff changeset
     5
#include <ClanLib/Display/input_device.h>
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
     6
#include <ClanLib/Display/keys.h>
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     7
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
     8
// const TimeMS INPUT_INTERVAL_MS = 20;
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
     9
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    10
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    11
 * The bits used in the PlayerInput bitmask, each represents a separate action handled by LocalPlayer::handleInput.
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    12
 *
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    13
 * @see LocalPlayer::handleInput
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    14
 */
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    15
enum PlayerInputBit {
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    16
    INPUT_NONE          = 0x0000,
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    17
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    18
    INPUT_AIM_UP        = 0x0001,
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    19
    INPUT_AIM_DOWN      = 0x0002,
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    20
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    21
    INPUT_MOVE_LEFT     = 0x0004,
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    22
    INPUT_MOVE_RIGHT    = 0x0008,
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    23
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    24
    INPUT_JUMP          = 0x0010,
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    25
    INPUT_DIG           = 0x0020,
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    26
    INPUT_SHOOT         = 0x0040,
237
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 235
diff changeset
    27
    INPUT_CHANGE_NEXT   = 0x0080,
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 235
diff changeset
    28
    INPUT_CHANGE_PREV   = 0x0100,
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 235
diff changeset
    29
    INPUT_ROPE          = 0x0200,
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 235
diff changeset
    30
    INPUT_UNROPE        = 0x0400,
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 235
diff changeset
    31
    INPUT_ROPE_UP       = 0x0800,
3d5465bcb67d tweak weapon params and improve weapon changing
terom
parents: 235
diff changeset
    32
    INPUT_ROPE_DOWN     = 0x1000,
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    33
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    34
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    35
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    36
 * The bits used in the GuiInput bitmask, each represents something handled locally by Graphics.
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    37
 */
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    38
enum GuiInputBit {
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    39
    GUI_INPUT_QUIT              = 0x0001,
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    40
    GUI_INPUT_DISPLAY_WEAPON    = 0x0002,
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    41
    GUI_INPUT_DEBUG_PLAYER      = 0x0004,
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    42
};
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    43
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    44
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    45
 * Bitmask of PlayerInputBits
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    46
 *
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    47
 * @see PlayerInputBit
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    48
 */
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    49
typedef uint16_t PlayerInput;
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    50
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    51
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    52
 * Bitmask for GuiInputBits
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    53
 *
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    54
 * @see GuiInputBit
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    55
 */
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 230
diff changeset
    56
typedef uint16_t GuiInput;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    57
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    58
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    59
 * Keymap definition used in Input.cc
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    60
 */
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    61
template <typename BitEnumType> struct InputKeymapEntry;
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    62
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    63
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    64
 * Handles reading input from a keyboard and mapping it to PlayerInput/GuiInput bitmasks
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    65
 */
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    66
class Input {
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    67
    protected:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    68
        CL_InputDevice &keyboard;
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    69
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    70
    public:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    71
        Input (CL_InputDevice &keyboard);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    72
    
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    73
    private:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    74
        bool checkKeycode (int keycode);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    75
        template <typename BitEnumType, typename BitMaskType> BitMaskType buildMask (InputKeymapEntry<BitEnumType> *keymap);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    76
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    77
    public:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    78
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    79
         * Reads the keyboard to determine current state of the Player/Gui input
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    80
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    81
        PlayerInput readPlayerInput (void);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    82
        GuiInput readGuiInput (void);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    83
};
230
78cf0cd69af4 better input handling
terom
parents: 229
diff changeset
    84
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    85
#endif