예제 #1
0
파일: replayview.c 프로젝트: miton/taisei
void start_replay(void *arg) {
	ReplayStage *rstg;
	StageInfo 	*gstg;
	int i;
	
	replay_copy(&global.replay, (Replay*)arg);
	global.replaymode = REPLAY_PLAY;
	
	if(global.replay.stgcount == 1)
		pickedstage = 0;
	
	init_player(&global.plr);
	for(i = pickedstage; i < global.replay.stgcount; ++i) {
		replay_select(&global.replay, i);
		rstg = global.replay.current;
		gstg = stage_get(rstg->stage);
		
		if(!gstg) {
			printf("start_replay(): Invalid stage %d in replay at %i skipped.\n", rstg->stage, i);
			continue;
		}
		
		gstg->loop();
		
		if(global.game_over == GAMEOVER_ABORT)
			break;
		global.game_over = 0;
	}
	
	global.game_over = 0;
	global.replaymode = REPLAY_RECORD;
	replay_destroy(&global.replay);
	
	replayview->instantselect = False;
}
예제 #2
0
파일: replayview.c 프로젝트: miton/taisei
MenuData* replayview_stageselect(Replay *rpy) {
	MenuData *m = malloc(sizeof(MenuData));
	int i;
	
	create_menu(m);
	m->context = rpy;
	
	for(i = 0; i < rpy->stgcount; ++i) {
		add_menu_entry(m, stage_get(rpy->stages[i].stage)->title, start_replay, rpy);
	}
	
	return m;
}
예제 #3
0
파일: replay.c 프로젝트: nexAkari/taisei
void replay_play(Replay *rpy, int firstidx) {
	if(rpy != &global.replay) {
		replay_copy(&global.replay, rpy, true);
	}

	if(firstidx >= global.replay.numstages || firstidx < 0) {
		log_warn("No stage #%i in the replay", firstidx);
		return;
	}

	global.replaymode = REPLAY_PLAY;

	for(int i = firstidx; i < global.replay.numstages; ++i) {
		ReplayStage *rstg = global.replay_stage = global.replay.stages+i;
		StageInfo *gstg = stage_get(rstg->stage);

		if(!gstg) {
			log_warn("Invalid stage %x in replay at %i skipped.", rstg->stage, i);
			continue;
		}

		global.plr.mode = plrmode_find(rstg->plr_char, rstg->plr_shot);
		stage_loop(gstg);

		if(global.game_over == GAMEOVER_ABORT) {
			break;
		}

		if(global.game_over == GAMEOVER_RESTART) {
			--i;
		}

		global.game_over = 0;
	}

	global.game_over = 0;
	global.replaymode = REPLAY_RECORD;
	replay_destroy(&global.replay);
	global.replay_stage = NULL;
	free_resources(false);
}
예제 #4
0
파일: stage4.c 프로젝트: miton/taisei
void stage4_loop() {
	ShaderRule shaderrules[] = { stage4_fog, NULL };
	stage_loop(stage_get(4), stage4_start, stage4_end, stage4_draw, stage4_events, shaderrules, 5550);
}