mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 01:30:22 +00:00
217 lines
9.7 KiB
Plaintext
217 lines
9.7 KiB
Plaintext
// Main script for module 'KeyboardMovement'
|
|
|
|
//****************************************************************************************************
|
|
// DEFINITIONS
|
|
//****************************************************************************************************
|
|
|
|
#define DISTANCE 10000// distance player walks in Tapping mode before he stops
|
|
|
|
enum KeyboardMovement_Directions {
|
|
eKeyboardMovement_Stop,
|
|
eKeyboardMovement_DownLeft,
|
|
eKeyboardMovement_Down,
|
|
eKeyboardMovement_DownRight,
|
|
eKeyboardMovement_Left,
|
|
eKeyboardMovement_Right,
|
|
eKeyboardMovement_UpLeft,
|
|
eKeyboardMovement_Up,
|
|
eKeyboardMovement_UpRight
|
|
};
|
|
|
|
//****************************************************************************************************
|
|
// VARIABLES
|
|
//****************************************************************************************************
|
|
|
|
// keycodes as variables for future key customization functions (static variables?):
|
|
int KeyboardMovement_KeyDown = 380; // down arrow
|
|
int KeyboardMovement_KeyLeft = 375; // left arrow
|
|
int KeyboardMovement_KeyRight = 377; // right arrow
|
|
int KeyboardMovement_KeyUp = 372; // up arrow
|
|
int KeyboardMovement_KeyDownRight = 381; // PgDn (numpad)
|
|
int KeyboardMovement_KeyUpRight = 373; // PgUp (numpad)
|
|
int KeyboardMovement_KeyDownLeft = 379; // End (numpad)
|
|
int KeyboardMovement_KeyUpLeft = 371; // Home (numpad)
|
|
int KeyboardMovement_KeyStop = 376; // 5 (numpad)
|
|
|
|
KeyboardMovement_Modes KeyboardMovement_Mode = eKeyboardMovement_None; // stores current keyboard control mode (disabled by default)
|
|
|
|
KeyboardMovement_Directions KeyboardMovement_CurrentDirection = eKeyboardMovement_Stop; // stores current walking direction of player character
|
|
|
|
//****************************************************************************************************
|
|
// USER FUNCTIONS
|
|
//****************************************************************************************************
|
|
|
|
//====================================================================================================
|
|
|
|
static function KeyboardMovement::SetMode(KeyboardMovement_Modes mode) {
|
|
KeyboardMovement_Mode = mode;
|
|
}
|
|
|
|
//====================================================================================================
|
|
|
|
// key customization functions here
|
|
|
|
//====================================================================================================
|
|
|
|
//****************************************************************************************************
|
|
// EVENT HANDLER FUNCTIONS
|
|
//****************************************************************************************************
|
|
|
|
//====================================================================================================
|
|
|
|
function repeatedly_execute() {
|
|
|
|
//--------------------------------------------------
|
|
// Pressing mode
|
|
//--------------------------------------------------
|
|
|
|
if ((IsGamePaused() == true) || (KeyboardMovement_Mode != eKeyboardMovement_Pressing) || (IsInterfaceEnabled() == false) || (player.on == false)) return 0;
|
|
// if game is paused, module or mode disabled, interface disabled or player character hidden, quit function
|
|
|
|
KeyboardMovement_Directions newdirection; // declare variable storing new direction
|
|
|
|
// get new direction:
|
|
if ( ((IsKeyPressed(KeyboardMovement_KeyDown)) && (IsKeyPressed(KeyboardMovement_KeyRight))) || (IsKeyPressed(KeyboardMovement_KeyDownRight)) ) newdirection = eKeyboardMovement_DownRight; // if down&right arrows or PgDn (numeric pad) held down, set new direction to Down-Right
|
|
else if ( ((IsKeyPressed(KeyboardMovement_KeyUp)) && (IsKeyPressed(KeyboardMovement_KeyRight))) || (IsKeyPressed(KeyboardMovement_KeyUpRight)) ) newdirection = eKeyboardMovement_UpRight; // up&right arrows or PgUp (numpad)
|
|
else if ( ((IsKeyPressed(KeyboardMovement_KeyDown)) && (IsKeyPressed(KeyboardMovement_KeyLeft))) || (IsKeyPressed(KeyboardMovement_KeyDownLeft)) ) newdirection = eKeyboardMovement_DownLeft; // down&left arrows or End (numpad)
|
|
else if ( ((IsKeyPressed(KeyboardMovement_KeyUp)) && (IsKeyPressed(KeyboardMovement_KeyLeft))) || (IsKeyPressed(KeyboardMovement_KeyUpLeft)) ) newdirection = eKeyboardMovement_UpLeft; // up&left arrows or Home (numpad)
|
|
else if (IsKeyPressed(KeyboardMovement_KeyDown)) newdirection = eKeyboardMovement_Down; // down arrow
|
|
else if (IsKeyPressed(KeyboardMovement_KeyLeft)) newdirection = eKeyboardMovement_Left; // left arrow
|
|
else if (IsKeyPressed(KeyboardMovement_KeyRight)) newdirection = eKeyboardMovement_Right; // right arrow
|
|
else if (IsKeyPressed(KeyboardMovement_KeyUp)) newdirection = eKeyboardMovement_Up; // up arrow
|
|
else newdirection = eKeyboardMovement_Stop; // if none of the above held down, set it to stop player character
|
|
|
|
if (IsKeyPressed(KeyboardMovement_KeyStop)) newdirection = eKeyboardMovement_Stop; // if 5 (numeric pad) held down, stop player character, regardless of whether some of the above are held down
|
|
|
|
if (newdirection != KeyboardMovement_CurrentDirection) { // if new direction is different from current direction
|
|
|
|
if (newdirection == eKeyboardMovement_Stop) player.StopMoving(); // if new direction is the Stop command, stop movement of player character
|
|
else { // if new direction is NOT the Stop command
|
|
|
|
int dx, dy; // declare variables storing new walk coordinates
|
|
if (newdirection == eKeyboardMovement_DownRight) {
|
|
dx = DISTANCE;
|
|
dy = DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_UpRight) {
|
|
dx = DISTANCE;
|
|
dy = -DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_DownLeft) {
|
|
dx = -DISTANCE;
|
|
dy = DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_UpLeft) {
|
|
dx = -DISTANCE;
|
|
dy = -DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Down) {
|
|
dx = 0;
|
|
dy = DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Left) {
|
|
dx = -DISTANCE;
|
|
dy = 0;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Right) {
|
|
dx = DISTANCE;
|
|
dy = 0;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Up) {
|
|
dx = 0;
|
|
dy = -DISTANCE;
|
|
}
|
|
|
|
player.WalkStraight(player.x + dx, player.y + dy, eNoBlock); // walk player character to the new coordinates
|
|
}
|
|
KeyboardMovement_CurrentDirection = newdirection; // update current direction to new direction
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//====================================================================================================
|
|
|
|
function on_key_press(int keycode) {
|
|
|
|
//--------------------------------------------------
|
|
// Tapping mode
|
|
//--------------------------------------------------
|
|
|
|
if ((IsGamePaused() == true) || (KeyboardMovement_Mode != eKeyboardMovement_Tapping) || (IsInterfaceEnabled() == false) || (player.on == false)) return 0;
|
|
// if game is paused, module or mode disabled, interface disabled or player character hidden, quit function
|
|
|
|
KeyboardMovement_Directions newdirection; // declare variable storing new direction
|
|
|
|
// get new direction:
|
|
if (keycode == KeyboardMovement_KeyDownRight) newdirection = eKeyboardMovement_DownRight; // if down-right key pressed, set new direction to Down-Right
|
|
else if (keycode == KeyboardMovement_KeyUpRight) newdirection = eKeyboardMovement_UpRight;
|
|
else if (keycode == KeyboardMovement_KeyDownLeft) newdirection = eKeyboardMovement_DownLeft;
|
|
else if (keycode == KeyboardMovement_KeyUpLeft) newdirection = eKeyboardMovement_UpLeft;
|
|
else if (keycode == KeyboardMovement_KeyDown) newdirection = eKeyboardMovement_Down;
|
|
else if (keycode == KeyboardMovement_KeyLeft) newdirection = eKeyboardMovement_Left;
|
|
else if (keycode == KeyboardMovement_KeyRight) newdirection = eKeyboardMovement_Right;
|
|
else if (keycode == KeyboardMovement_KeyUp) newdirection = eKeyboardMovement_Up;
|
|
else if (keycode == KeyboardMovement_KeyStop) newdirection = eKeyboardMovement_Stop; // if stop key pressed, set to stop player character
|
|
|
|
if (newdirection != KeyboardMovement_CurrentDirection) { // if new direction is different from current direction
|
|
|
|
if (newdirection == eKeyboardMovement_Stop) player.StopMoving(); // if new direction is the Stop command, stop movement of player character
|
|
else { // if new direction is NOT the Stop command
|
|
|
|
int dx, dy; // declare variables storing new walk coordinates
|
|
if (newdirection == eKeyboardMovement_DownRight) {
|
|
dx = DISTANCE;
|
|
dy = DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_UpRight) {
|
|
dx = DISTANCE;
|
|
dy = -DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_DownLeft) {
|
|
dx = -DISTANCE;
|
|
dy = DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_UpLeft) {
|
|
dx = -DISTANCE;
|
|
dy = -DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Down) {
|
|
dx = 0;
|
|
dy = DISTANCE;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Left) {
|
|
dx = -DISTANCE;
|
|
dy = 0;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Right) {
|
|
dx = DISTANCE;
|
|
dy = 0;
|
|
}
|
|
else if (newdirection == eKeyboardMovement_Up) {
|
|
dx = 0;
|
|
dy = -DISTANCE;
|
|
}
|
|
|
|
player.WalkStraight(player.x + dx, player.y + dy, eNoBlock); // walk player character to the new coordinates
|
|
}
|
|
KeyboardMovement_CurrentDirection = newdirection; // update current direction to new direction
|
|
|
|
}
|
|
else { // if new direction is same as current direction
|
|
player.StopMoving(); // stop player character
|
|
KeyboardMovement_CurrentDirection = eKeyboardMovement_Stop; // update current direction
|
|
}
|
|
|
|
}
|
|
|
|
//====================================================================================================
|
|
|
|
function on_event(EventType event, int data) {
|
|
|
|
if (event == eEventLeaveRoom) KeyboardMovement_CurrentDirection = eKeyboardMovement_Stop;
|
|
|
|
}
|
|
|
|
//====================================================================================================
|