From aa34ef2b7b4932eb3802a422427a7be58e127d9c Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 15 Jul 2007 09:01:58 +0000 Subject: [PATCH] (game_reset_tick): New. (prod_nat): Use it. --- include/game.h | 1 + src/lib/common/game.c | 34 +++++++++++++++++++++++++--------- src/lib/update/nat.c | 4 ++-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/include/game.h b/include/game.h index 877230d0..1a5f1f36 100644 --- a/include/game.h +++ b/include/game.h @@ -56,5 +56,6 @@ extern void game_record_update(time_t); extern struct gamestr *game_tick_tick(void); extern int game_tick_to_now(short *); extern int game_step_a_tick(struct gamestr *, short *); +extern int game_reset_tick(short *); #endif diff --git a/src/lib/common/game.c b/src/lib/common/game.c index 74318773..25dcea03 100644 --- a/src/lib/common/game.c +++ b/src/lib/common/game.c @@ -34,10 +34,10 @@ /* * On Empire Time: * - * A turn is terminated by an update and consists of etu_per_update - * ETUs. The Empire clock counts turns and ETUs. When updates move - * around in real time (schedule change, downtime, etc.), the Empire - * clock automatically adapts the length of an ETU in seconds + * An Empire turn is terminated by an update. The Empire clock counts + * turns and ETUs, i.e. it ticks etu_per_update times per turn. When + * updates move around in real time (schedule change, downtime, etc.), + * the Empire clock automatically adapts the duration of an ETU * accordingly. */ @@ -127,11 +127,27 @@ game_tick_to_now(short *tick) int game_step_a_tick(struct gamestr *game, short *tick) { - int d; + int etu; - d = game->game_tick - *tick; - if (CANT_HAPPEN(d < 0)) - d = 0; + etu = game->game_tick - *tick; + if (CANT_HAPPEN(etu < 0)) + etu = 0; *tick = game->game_tick; - return d; + return etu; +} + +/* + * Reset ETU timestamp *TICK to zero. + * Return how many ETUs it had left until etu_per_update. + */ +int +game_reset_tick(short *tick) +{ + int etu; + + etu = etu_per_update - *tick; + if (CANT_HAPPEN(etu < 0)) + etu = 0; + *tick = 0; + return etu; } diff --git a/src/lib/update/nat.c b/src/lib/update/nat.c index 22a3cf19..8f8dc3d0 100644 --- a/src/lib/update/nat.c +++ b/src/lib/update/nat.c @@ -36,6 +36,7 @@ #include #include "budg.h" +#include "game.h" #include "item.h" #include "update.h" @@ -133,8 +134,7 @@ prod_nat(int etu) struct natstr *cnp; for (n = 0; NULL != (np = getnatp(n)); n++) { - grant_btus(np, etu_per_update - np->nat_access); - np->nat_access = 0; + grant_btus(np, game_reset_tick(&np->nat_access)); if (np->nat_stat < STAT_ACTIVE) continue; /*