diff --git a/src/dusk/rpg/entity/player.c b/src/dusk/rpg/entity/player.c index 8a8b8265..521b9e59 100644 --- a/src/dusk/rpg/entity/player.c +++ b/src/dusk/rpg/entity/player.c @@ -33,14 +33,25 @@ void playerInput(entity_t *entity) { // Can player act? if(UI_FOCUS.count > 0) return; - // Turn + // Turn - only if not already holding the direction we face const playerinputdirmap_t *dirMap = PLAYER_INPUT_DIR_MAP; + bool_t holdingFaced = false; do { if(!inputIsDown(dirMap->action)) continue; - if(entity->direction == dirMap->direction) continue; - return entityTurn(entity, dirMap->direction); + if(entity->direction != dirMap->direction) continue; + holdingFaced = true; + break; } while((++dirMap)->action != 0xFF); + if(!holdingFaced) { + dirMap = PLAYER_INPUT_DIR_MAP; + do { + if(!inputIsDown(dirMap->action)) continue; + if(entity->direction == dirMap->direction) continue; + return entityTurn(entity, dirMap->direction); + } while((++dirMap)->action != 0xFF); + } + // Walk / Run bool_t running = inputIsDown(INPUT_ACTION_CANCEL); dirMap = PLAYER_INPUT_DIR_MAP;