src/Input.hh
author terom
Mon, 08 Dec 2008 18:12:43 +0000
changeset 300 417183866f35
parent 283 7540b0859579
child 311 440763821484
permissions -rw-r--r--
suicide key and respawning
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,
300
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    33
417183866f35 suicide key and respawning
terom
parents: 283
diff changeset
    34
    INPUT_SUICIDE       = 0x2000,
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    35
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    36
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    37
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    38
 * 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
    39
 */
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
    40
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
    41
    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
    42
    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
    43
    GUI_INPUT_DEBUG_PLAYER      = 0x0004,
221
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    44
};
fbc5db6fce45 reorganize the weapons code and input handling code
terom
parents: 212
diff changeset
    45
283
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
 * Bitmask of PlayerInputBits
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    48
 *
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    49
 * @see PlayerInputBit
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    50
 */
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
    51
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
    52
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
 * Bitmask for GuiInputBits
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    55
 *
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    56
 * @see GuiInputBit
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    57
 */
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
    58
typedef uint16_t GuiInput;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    59
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    60
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    61
 * 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
    62
 */
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    63
template <typename BitEnumType> struct InputKeymapEntry;
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    64
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    65
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 237
diff changeset
    66
 * 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
    67
 */
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    68
class Input {
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    69
    protected:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    70
        CL_InputDevice &keyboard;
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    71
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    72
    public:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    73
        Input (CL_InputDevice &keyboard);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    74
    
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    75
    private:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    76
        bool checkKeycode (int keycode);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    77
        template <typename BitEnumType, typename BitMaskType> BitMaskType buildMask (InputKeymapEntry<BitEnumType> *keymap);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    78
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    79
    public:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    80
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    81
         * Reads the keyboard to determine current state of the Player/Gui input
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    82
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    83
        PlayerInput readPlayerInput (void);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    84
        GuiInput readGuiInput (void);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    85
};
230
78cf0cd69af4 better input handling
terom
parents: 229
diff changeset
    86
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    87
#endif