Lephisto/src/pause.c

88 lines
1.8 KiB
C

#include "weapon.h"
#include "pilot.h"
#include "spfx.h"
#include "pause.h"
/* Main thing with pausing is to allow things based on time to */
/* work properly when the toolkit opens a window. */
int paused = 0; /* Are we paused. */
/* From pilot.c */
extern Pilot** pilot_stack;
extern int pilots;
/* From space.c */
extern unsigned int spawn_timer;
/* From main.c */
extern unsigned int gtime;
static void pilots_pause(void);
static void pilots_unpause(void);
static void pilots_delay(unsigned int delay);
/* Pause the game. */
void pause_game(void) {
if(paused) return; /* Well well.. We are paused already. */
pilots_pause();
weapons_pause();
spfx_pause();
spawn_timer -= SDL_GetTicks();
paused = 1; /* We should unpause it. */
}
void unpause_game(void) {
if(!paused) return; /* We are unpaused already. */
pilots_unpause();
weapons_unpause();
spfx_unpause();
spawn_timer += SDL_GetTicks();
paused = 0;
}
/* Set the timers back. */
void pause_delay(unsigned int delay) {
pilots_delay(delay);
weapons_delay(delay);
spfx_delay(delay);
}
static void pilots_pause(void) {
int i, j;
unsigned int t = SDL_GetTicks();
for(i = 0; i < pilots; i++) {
pilot_stack[i]->ptimer -= t;
pilot_stack[i]->tcontrol -= t;
for(j = 0; j < MAX_AI_TIMERS; j++)
pilot_stack[i]->timer[j] -= t;
}
}
static void pilots_unpause(void) {
int i, j;
unsigned int t = SDL_GetTicks();
for(i = 0; i < pilots; i++) {
pilot_stack[i]->ptimer += t;
pilot_stack[i]->tcontrol += t;
for(j = 0; j < MAX_AI_TIMERS; j++)
pilot_stack[i]->timer[j] += t;
}
}
static void pilots_delay(unsigned int delay) {
int i, j;
for(i = 0; i < pilots; i++) {
pilot_stack[i]->ptimer += delay;
pilot_stack[i]->tcontrol += delay;
for(j = 0; j < MAX_AI_TIMERS; j++)
pilot_stack[i]->timer[j] += delay;
}
}