Пример #1
0
void outbreak(SDL_Surface * screen) {
  Outbreak outbreak;
  init_outbreak(&outbreak, screen);

  while (!outbreak.quit) {
    handle_input(&outbreak);
    update_gamestate(&outbreak);
    render(&outbreak);

    SDL_Delay(1);
  }

  cleanup_outbreak(&outbreak);
}
Пример #2
0
int main(int argc, char **argv) {
	SDL_bool ok;
	char const *root = getenv(ROOTVAR);
	if (!root || !*root) {
		fprintf(stderr, "error: environment undefined\n");
		fprintf(stderr, "set %s to the installation directory of Fridge Filler\n", ROOTVAR);
		return 1;
	}

	FILE *rp = 0;
	SDL_bool rp_play = SDL_FALSE;
	SDL_bool rp_save = SDL_FALSE;
	if (argc > 1) {
		if (streq(argv[1], "--save-replay") || streq(argv[1], "-s")) {
			char const *fname = "replay.txt";
			if (argc == 3) { fname = argv[2]; }
			printf("saving replay to `%s'\n", fname);
			rp = fopen(fname, "w");
			rp_save = SDL_TRUE;
		}

		if (streq(argv[1], "--replay") || streq(argv[1], "-r")) {
			char const *fname = "replay.txt";
			if (argc == 3) { fname = argv[2]; }
			printf("loading replay `%s'\n", fname);
			rp = fopen(fname, "r");
			rp_play = SDL_TRUE;
		}
	}

	session s;
	game_state gs;
	ok = init_game(&s, &gs, root);
	if (!ok) { return 1; }

	game_event ge;
	clear_event(&ge);

	unsigned ticks;
	unsigned old_ticks = SDL_GetTicks();

	int have_ev;
	SDL_Event event;
	while (gs.run != MODE_EXIT) {
		if (!rp_play) {
			have_ev = SDL_PollEvent(&event);
			if (have_ev) {
				process_event(&event, &ge);
			}

			unsigned char const *keystate = SDL_GetKeyboardState(0);
			keystate_to_movement(keystate, &ge.player);
		} else {
			have_ev = SDL_PollEvent(&event);
			if (have_ev) {
				process_event(&event, &ge);
				if (ge.exit) { break; }
				clear_event(&ge);
			}
		}

		ticks = SDL_GetTicks();
		if (ticks - old_ticks >= TICK) {
			if (rp_save) { print_event(rp, &ge); }
			else if (rp_play) { read_event(rp, &ge); }
			update_gamestate(&s, &gs, &ge);
			clear_event(&ge);
			/*
			printf("%d\n", ticks - old_ticks);
			*/
			old_ticks = ticks;
		}

		render(&s, &gs);
		SDL_Delay(TICK / 4);
	}

	int i;
	for (i = 0; i < NGROUPS; i++) {
		free(gs.entities[i].e);
	}

	destroy_level(&s.level);
	SDL_DestroyTexture(s.level.background);

	if (gs.debug.font) {
		TTF_CloseFont(gs.debug.font);
	};

	if (rp) { fclose(rp); }
	free(s.msg.msgs);

	SDL_DestroyRenderer(s.r);
	SDL_DestroyWindow(s.w);
	SDL_Quit();

	return 0;
}