From 1312c62143b8db56bd37b79ce2c0409ed2280481 Mon Sep 17 00:00:00 2001 From: girst Date: Sun, 20 May 2018 09:57:32 +0200 Subject: [PATCH] simplify direction buffer access --- viiper.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/viiper.c b/viiper.c index 144d633..94aba9d 100644 --- a/viiper.c +++ b/viiper.c @@ -165,12 +165,11 @@ int viiper(void) { } +#define pop_dir() (g.k.n? g.k.c[(16+g.k.h-g.k.n--)%16] : NONE) void snake_advance (void) { - if (g.k.n) {/* new direction in the buffer */ - int possible_new_dir = g.k.c[(16+g.k.h-g.k.n--)%16]; - if (g.d != OPPOSITE(possible_new_dir)) - g.d = possible_new_dir; - } + int new_dir = pop_dir(); + /* switch direction if new one is in the buffer and it won't kill us: */ + if (new_dir && g.d != OPPOSITE(new_dir)) g.d = new_dir; int new_row = g.s->r +(g.d==SOUTH) -(g.d==NORTH); int new_col = g.s->c +(g.d==EAST) -(g.d==WEST); @@ -396,8 +395,9 @@ int getctrlseq (void) { void append_movement (int dir) { if (g.k.n > 15) return; /* no space in buffer */ - if (g.k.n && g.k.c[(16+g.k.h-1)%16] == dir) return; /* don't add the same direction twice */ -// if (g.k.n && g.k.c[(16+g.k.h-1)%16] == OPPOSITE(dir)) return; /* don't add impossible dir. */ + if (g.k.n && g.k.c[(16+g.k.h-1)%16] == dir) + return; /* don't add the same direction twice */ + g.k.c[g.k.h] = dir; g.k.n++; g.k.h = ++g.k.h % 16; -- 2.39.3