• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!

Input, a script to capture key and mouse input

Status
Not open for further replies.
Level 3
Joined
Jan 2, 2009
Messages
25
Code:
//=====================================================
// Input, a script to capture key and mouse input
//
// This script will catch and store player input
// from the keyboard and mouse in a struct array.
// Keys and buttons are records as bool states,
// while mouse clicks and movement are kept as
// int and fixed values for the UI and World
// respectively.
//
// To get the state of the X key, you would use:
// playerInput.key.state[c_keyX]
// To get the point of the cursor, you could:
// Point(playerInput.mouse.x,playerInput.mouse.y)
//
// The user may configure the DETECT bool
// constants to set which triggers will be
// created on initialization of the script.
//=====================================================
// CONFIGURABLE CONSTANTS
const bool DETECT_KEYDOWN = true;
const bool DETECT_KEYUP = true;
const bool DETECT_BUTTONDOWN = true;
const bool DETECT_BUTTONUP = true;
const bool DETECT_MOVEMENT = true;
const int INPUT_BUTTONS = 6;
const int INPUT_KEYS = 99;
const int MAX_PLAYERS = 16;
// STRUCTS
struct Button { bool[INPUT_BUTTONS] state; };
struct Key { bool[INPUT_KEYS] state; };
struct Mouse {
    int uix;
    int uiy;
    fixed x;
    fixed y;
    fixed z;
};
struct Input {
    Key key;
    Button button;
    Mouse mouse;
};
// GLOBALS
Input[MAX_PLAYERS] playerInput;
// FUNCTIONS
bool Input_KeyOn (bool testConds, bool runActions) {
    playerInput[EventPlayer()].key.state[EventKeyPressed()] = true;
    return true;
}
bool Input_KeyOff (bool testConds, bool runActions) {
    playerInput[EventPlayer()].key.state[EventKeyPressed()] = false;
    return true;
}
bool Input_ButtonOn (bool testConds, bool runActions) {
    int p = EventPlayer();
    playerInput.button.state[EventMouseClickedButton()] = true;
    playerInput.mouse.uix = EventMouseClickedPosXUI();
    playerInput.mouse.uiy = EventMouseClickedPosYUI();
    playerInput.mouse.x = EventMouseClickedPosXWorld();
    playerInput.mouse.y = EventMouseClickedPosYWorld();
    playerInput.mouse.z = EventMouseClickedPosZWorld();
    return true;
}
bool Input_ButtonOff (bool testConds, bool runActions) {
    int p = EventPlayer();
    playerInput.button.state[EventMouseClickedButton()] = false;
    playerInput.mouse.uix = EventMouseClickedPosXUI();
    playerInput.mouse.uiy = EventMouseClickedPosYUI();
    playerInput.mouse.x = EventMouseClickedPosXWorld();
    playerInput.mouse.y = EventMouseClickedPosYWorld();
    playerInput.mouse.z = EventMouseClickedPosZWorld();
    return true;
}
bool Input_Movement (bool testConds, bool runActions) {
    int p = EventPlayer();
    playerInput.mouse.uix = EventMouseMovedPosXUI();
    playerInput.mouse.uiy = EventMouseMovedPosYUI();
    playerInput.mouse.x = EventMouseMovedPosXWorld();
    playerInput.mouse.y = EventMouseMovedPosYWorld();
    playerInput.mouse.z = EventMouseMovedPosZWorld();
    return true;
}
void Input_Init () {
    if (DETECT_KEYDOWN) {
        TriggerAddEventKeyPressed(TriggerCreate("Input_KeyOn"),c_playerAny,c_keyNone,true,0,0,0);
    }
    if (DETECT_KEYUP) {
        TriggerAddEventKeyPressed(TriggerCreate("Input_KeyOff"),c_playerAny,c_keyNone,false,0,0,0);
    }
    if (DETECT_BUTTONDOWN) {
        TriggerAddEventMouseClicked(TriggerCreate("Input_ButtonOn"),c_playerAny,c_mouseButtonNone,true);
    }
    if (DETECT_BUTTONUP) {
        TriggerAddEventMouseClicked(TriggerCreate("Input_ButtonOff"),c_playerAny,c_mouseButtonNone,false);
    }
    if (DETECT_MOVEMENT) {
        TriggerAddEventMouseMoved(TriggerCreate("Input_Movement"), c_playerAny);
    }
}
 
Status
Not open for further replies.
Top