(game_reset_tick): New.

(prod_nat): Use it.
This commit is contained in:
Markus Armbruster 2007-07-15 09:01:58 +00:00
parent d3e0597f0e
commit aa34ef2b7b
3 changed files with 28 additions and 11 deletions

View file

@ -56,5 +56,6 @@ extern void game_record_update(time_t);
extern struct gamestr *game_tick_tick(void); extern struct gamestr *game_tick_tick(void);
extern int game_tick_to_now(short *); extern int game_tick_to_now(short *);
extern int game_step_a_tick(struct gamestr *, short *); extern int game_step_a_tick(struct gamestr *, short *);
extern int game_reset_tick(short *);
#endif #endif

View file

@ -34,10 +34,10 @@
/* /*
* On Empire Time: * On Empire Time:
* *
* A turn is terminated by an update and consists of etu_per_update * An Empire turn is terminated by an update. The Empire clock counts
* ETUs. The Empire clock counts turns and ETUs. When updates move * turns and ETUs, i.e. it ticks etu_per_update times per turn. When
* around in real time (schedule change, downtime, etc.), the Empire * updates move around in real time (schedule change, downtime, etc.),
* clock automatically adapts the length of an ETU in seconds * the Empire clock automatically adapts the duration of an ETU
* accordingly. * accordingly.
*/ */
@ -127,11 +127,27 @@ game_tick_to_now(short *tick)
int int
game_step_a_tick(struct gamestr *game, short *tick) game_step_a_tick(struct gamestr *game, short *tick)
{ {
int d; int etu;
d = game->game_tick - *tick; etu = game->game_tick - *tick;
if (CANT_HAPPEN(d < 0)) if (CANT_HAPPEN(etu < 0))
d = 0; etu = 0;
*tick = game->game_tick; *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;
} }

View file

@ -36,6 +36,7 @@
#include <math.h> #include <math.h>
#include "budg.h" #include "budg.h"
#include "game.h"
#include "item.h" #include "item.h"
#include "update.h" #include "update.h"
@ -133,8 +134,7 @@ prod_nat(int etu)
struct natstr *cnp; struct natstr *cnp;
for (n = 0; NULL != (np = getnatp(n)); n++) { for (n = 0; NULL != (np = getnatp(n)); n++) {
grant_btus(np, etu_per_update - np->nat_access); grant_btus(np, game_reset_tick(&np->nat_access));
np->nat_access = 0;
if (np->nat_stat < STAT_ACTIVE) if (np->nat_stat < STAT_ACTIVE)
continue; continue;
/* /*