fix turn-based mode

This commit is contained in:
Timothy Stiles 2020-12-30 13:01:01 +11:00
parent 1c5f63b61b
commit f6a79456e9
2 changed files with 20 additions and 11 deletions

View File

@ -754,7 +754,10 @@ export class Level extends LevelInterface {
// Only the Lexy-style loop has a notion of "finishing" a tic, since (unlike the Lynx loop) the // Only the Lexy-style loop has a notion of "finishing" a tic, since (unlike the Lynx loop) the
// decision phase happens in the /middle/ // decision phase happens in the /middle/
finish_tic() { finish_tic(p1_input) {
this.p1_input = p1_input;
this.p1_released |= ~p1_input; // Action keys released since we last checked them
if (this.compat.use_lynx_loop) { if (this.compat.use_lynx_loop) {
return; return;
} }

View File

@ -1105,6 +1105,7 @@ class Player extends PrimaryView {
} }
let has_input = wait || input; let has_input = wait || input;
let did_finish = false;
// Turn-based mode complicates this slightly; it aligns us to the middle of a tic // Turn-based mode complicates this slightly; it aligns us to the middle of a tic
if (this.turn_mode === 2) { if (this.turn_mode === 2) {
if (has_input) { if (has_input) {
@ -1113,6 +1114,7 @@ class Player extends PrimaryView {
// did, the first time we tried it // did, the first time we tried it
this.level.finish_tic(input); this.level.finish_tic(input);
this.turn_mode = 1; this.turn_mode = 1;
did_finish = true;
} }
else { else {
continue; continue;
@ -1120,8 +1122,11 @@ class Player extends PrimaryView {
} }
// We should now be at the start of a tic // We should now be at the start of a tic
// but only start one if we didn't finish one
if (!did_finish)
{
this.level.begin_tic(input); this.level.begin_tic(input);
if (this.turn_mode > 0 && this.level.can_accept_input() && ! has_input) { if (this.turn_mode > 0 && this.level.can_accept_input() && !input) {
// If we're in turn-based mode and could provide input here, but don't have any, // If we're in turn-based mode and could provide input here, but don't have any,
// then wait until we do // then wait until we do
this.turn_mode = 2; this.turn_mode = 2;
@ -1129,6 +1134,7 @@ class Player extends PrimaryView {
else { else {
this.level.finish_tic(input); this.level.finish_tic(input);
} }
}
if (this.level.state !== 'playing') { if (this.level.state !== 'playing') {
// We either won or lost! // We either won or lost!
@ -1204,7 +1210,7 @@ class Player extends PrimaryView {
// TODO i'm not sure it'll be right when rewinding either // TODO i'm not sure it'll be right when rewinding either
// TODO or if the game's speed changes. wow! // TODO or if the game's speed changes. wow!
let tic_offset; let tic_offset;
if (this.turn_mode === 2) { if (this.turn_mode === 2 && this.level.can_accept_input()) {
// We're dawdling between tics, so nothing is actually animating, but the clock hasn't // We're dawdling between tics, so nothing is actually animating, but the clock hasn't
// advanced yet; pretend whatever's currently animating has finished // advanced yet; pretend whatever's currently animating has finished
tic_offset = 0.999; tic_offset = 0.999;