From e236632ceea7a7cbee7c4139b0bf86710770077b Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Thu, 19 Aug 2021 16:33:09 -0400 Subject: char/enemy: Fix movement upon collision after turn --- (limited to 'src/char/enemy.c') diff --git a/src/char/enemy.c b/src/char/enemy.c index 6b1440f..eeda38d 100644 --- a/src/char/enemy.c +++ b/src/char/enemy.c @@ -112,6 +112,36 @@ _mf_enemy_step(struct mf_char *c) static int _mf_enemy_turn(struct mf_char *c) { + struct mf_enemy *e = (struct mf_enemy *) c; + int dx; + int dy; + int i; + + switch (c->cur_dir) { + case MF_CHAR_DIR_U_: dx = 0; dy = -1; break; + case MF_CHAR_DIR_D_: dx = 0; dy = 1; break; + case MF_CHAR_DIR_L_: dx = -1; dy = 0; break; + case MF_CHAR_DIR_R_: dx = 1; dy = 0; break; + default: dx = 0; dy = 0; break; + } + + for (i = 0; i < e->num_allies; ++i) { + if (e->allies[i] == c) { + /* Found self */ + continue; + } + if (e->allies[i]->cur_x == c->cur_x + dx && + e->allies[i]->cur_y == c->cur_y + dy) { + /* Another enemy currently in this direction */ + return 0; + } + if (e->allies[i]->new_x == c->cur_x + dx && + e->allies[i]->new_y == c->cur_y + dy) { + /* Another enemy moving in this direction */ + return 0; + } + } + /* Go straight */ c->new_dir = c->cur_dir; -- cgit v0.9.1