Fix DAS and movement transition synchronization to eliminate 2-frame lag between tiles
This commit is contained in:
@@ -225,23 +225,6 @@ void engine_init(void) {
|
||||
}
|
||||
|
||||
void engine_update(uint8_t keys, uint8_t prev_keys) {
|
||||
uint8_t keys_pressed = keys & ~prev_keys;
|
||||
|
||||
if (keys_pressed) {
|
||||
das_timer = DAS_DELAY;
|
||||
das_active = 1;
|
||||
} else if (keys && das_active) {
|
||||
if (das_timer > 0) {
|
||||
das_timer--;
|
||||
}
|
||||
if (das_timer == 0 && !is_moving) {
|
||||
das_timer = DAS_REPEAT;
|
||||
keys_pressed = keys; // trigger move
|
||||
}
|
||||
} else {
|
||||
das_active = 0;
|
||||
}
|
||||
|
||||
if (is_moving) {
|
||||
move_progress++;
|
||||
|
||||
@@ -279,6 +262,26 @@ void engine_update(uint8_t keys, uint8_t prev_keys) {
|
||||
// Set player to idle stand frame
|
||||
update_player_sprite();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t keys_pressed = keys & ~prev_keys;
|
||||
|
||||
if (keys_pressed) {
|
||||
das_timer = DAS_DELAY;
|
||||
das_active = 1;
|
||||
} else if (keys && das_active) {
|
||||
if (das_timer > 0) {
|
||||
das_timer--;
|
||||
}
|
||||
if (das_timer == 0 && !is_moving) {
|
||||
das_timer = DAS_REPEAT;
|
||||
keys_pressed = keys; // trigger move
|
||||
}
|
||||
} else {
|
||||
das_active = 0;
|
||||
}
|
||||
|
||||
if (is_moving) {
|
||||
return; // Ignore other inputs while moving
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user