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
/*
* 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.
*/
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;
}
#include <math.h>
#include "budg.h"
+#include "game.h"
#include "item.h"
#include "update.h"
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;
/*