void newsroom_continue_dialog_clicked(dialog *dlg, dialog_result result){ scene *sc = dlg->userdata; if(result == DIALOG_RESULT_NO) { game_state_set_next(sc->gs, SCENE_MENU); } else if (result == DIALOG_RESULT_YES_OK) { // Resetting p2->sp_wins here allows the game to progress, // otherwise you get stuck with the same opponent game_player *p1 = game_state_get_player(sc->gs, 0); game_player *p2 = game_state_get_player(sc->gs, 1); p2->sp_wins = 0; chr_score_reset(game_player_get_score(p1), 1); chr_score_reset_wins(game_player_get_score(p1)); game_state_set_next(sc->gs, SCENE_VS); } }
int scoreboard_create(scene *scene) { // Init local data scoreboard_local *local = malloc(sizeof(scoreboard_local)); local->page = settings_get()->gameplay.rounds; // Load scores if(scores_read(&local->data) == 1) { scores_clear(&local->data); DEBUG("No score data found; using empty score array."); } // Check for pending score local->has_pending_data = 0; if(found_pending_score(scene)) { game_player *player = game_state_get_player(scene->gs, 0); unsigned int score = player->score.score; if(score_fits_scoreboard(local, score)) { local->has_pending_data = 1; local->pending_data.score = score; local->pending_data.har_id = player->har_id; local->pending_data.pilot_id = player->pilot_id; local->pending_data.name[0] = 0; } // Wipe old score data, whether it was written on scoreboard or not. chr_score_reset(game_player_get_score(player), 1); } // Create a surface that has an appropriate alpha for darkening the screen a bit surface_create(&local->black_surface, SURFACE_TYPE_RGBA, 32, 32); surface_fill(&local->black_surface, color_create(0,0,0,200)); // Set callbacks scene_set_userdata(scene, local); scene_set_event_cb(scene, scoreboard_event); scene_set_input_poll_cb(scene, scoreboard_input_tick); scene_set_render_overlay_cb(scene, scoreboard_render_overlay); scene_set_free_cb(scene, scoreboard_free); video_select_renderer(VIDEO_RENDERER_HW); // All done return 0; }