Files
Bubberstation/code/modules/keybindings/bindings_atom.dm
SkyratBot a4385cd254 [MIRROR] Fixes Mech Strafing [MDB IGNORE] (#25076)
* Fixes Mech Strafing (#79749)

## About The Pull Request

Holding alt to turn while strafing in a mech actually works now.

Closes #54727

## Why It's Good For The Game
Fixes a thing that was broken

## Changelog
🆑
fix: You can once again use alt to turn while strafing in a mech
/🆑

* Fixes Mech Strafing

---------

Co-authored-by: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com>
2023-11-17 23:36:10 -05:00

29 lines
1.4 KiB
Plaintext

// You might be wondering why this isn't client level. If focus is null, we don't want you to move.
// Only way to do that is to tie the behavior into the focus's keyLoop().
/atom/movable/keyLoop(client/user)
var/movement_dir = NONE
for(var/_key in user?.keys_held)
movement_dir = movement_dir | user.movement_keys[_key]
if(user?.next_move_dir_add)
movement_dir |= user.next_move_dir_add
if(user?.next_move_dir_sub)
movement_dir &= ~user.next_move_dir_sub
// Sanity checks in case you hold left and right and up to make sure you only go up
if((movement_dir & NORTH) && (movement_dir & SOUTH))
movement_dir &= ~(NORTH|SOUTH)
if((movement_dir & EAST) && (movement_dir & WEST))
movement_dir &= ~(EAST|WEST)
if(user && movement_dir) //If we're not moving, don't compensate, as byond will auto-fill dir otherwise
movement_dir = turn(movement_dir, -dir2angle(user.dir)) //By doing this we ensure that our input direction is offset by the client (camera) direction
//turn without moving while using the movement lock key, unless something wants to ignore it and move anyway
if(user?.movement_locked && !(SEND_SIGNAL(src, COMSIG_MOVABLE_KEYBIND_FACE_DIR, movement_dir) & COMSIG_IGNORE_MOVEMENT_LOCK))
keybind_face_direction(movement_dir)
else
user?.Move(get_step(src, movement_dir), movement_dir)
return !!movement_dir //true if there was actually any player input
return FALSE