From 4e5e4104b04e066d2e31bb090797b4c53376423b Mon Sep 17 00:00:00 2001 From: Joshua Judson Rosen Date: Sun, 19 Mar 2017 16:55:31 -0400 Subject: robot-move: signal DEATH only _after_ the display has been updated This avoids weird off-by-1 errors in the GUI counters at game end. --- src/grobot.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/grobot.c b/src/grobot.c index de6658a..02fcc7d 100644 --- a/src/grobot.c +++ b/src/grobot.c @@ -405,10 +405,6 @@ gboolean g_robot_move(GRobot *robot, gint steps) /* no matter what, this took energy */ robot->energy -= 2; - if (robot->energy < 1) - { - g_signal_emit(robot, g_robot_signals[DEATH], 0); - } switch (MAP_GET_OBJECT(robot->map, x_to, y_to)) { @@ -422,10 +418,6 @@ gboolean g_robot_move(GRobot *robot, gint steps) case BADDIE: /* Damage */ robot->shields -= 10; - if (robot->shields < 1) - { - g_signal_emit(robot, g_robot_signals[DEATH], 0); - } x_to = robot->x; y_to = robot->y; @@ -435,10 +427,6 @@ gboolean g_robot_move(GRobot *robot, gint steps) case WALL: /* less damage */ robot->shields -= 2; - if (robot->shields < 1) - { - g_signal_emit(robot, g_robot_signals[DEATH], 0); - } x_to = robot->x; y_to = robot->y; @@ -447,10 +435,7 @@ gboolean g_robot_move(GRobot *robot, gint steps) default: /* even less damage */ - if (--robot->shields < 1) - { - g_signal_emit(robot, g_robot_signals[DEATH], 0); - } + robot->shields -= 1; x_to = robot->x; y_to = robot->y; @@ -466,6 +451,11 @@ gboolean g_robot_move(GRobot *robot, gint steps) robot->dir, robot->energy, robot->score, robot->shields); gdk_threads_leave(); + if (robot->energy < 1 || robot->shields < 1) + { + g_signal_emit(robot, g_robot_signals[DEATH], 0); + } + if (x_to == robot->x && y_to == robot->y) { /* NOTE: by returning here, we charge only 1 hit against energy and shields, regardless of -- cgit v1.1