void state_reset()

in coinrun/coinrun.cpp [1442:1492]


void state_reset(const std::shared_ptr<State>& state, int game_type)
{
  assert(player_themesl.size() > 0 && "Please call init(threads) first");

  int level_seed = 0;

  if (USE_LEVEL_SET) {
    int level_index = global_rand_gen.randint(0, NUM_LEVELS);
    level_seed = LEVEL_SEEDS[level_index];
  } else if (NUM_LEVELS > 0) {
    level_seed = global_rand_gen.randint(0, NUM_LEVELS);
  } else {
    level_seed = global_rand_gen.randint();
  }

  RandomMazeGenerator maze_gen;
  maze_gen.rand_gen.seed(level_seed);

  int w = 64;
  int h = 64;
  state->maze.reset(new Maze(w, h, game_type));
  maze_gen.maze = state->maze;

  maze_gen.initial_floor_and_walls(game_type);

  if (game_type==CoinRunPlatforms_v0) {
    maze_gen.generate_coins_on_platforms();
  } else if (game_type == CoinRunToTheRight_v0) {
    maze_gen.generate_coin_to_the_right(game_type);
  } else if (game_type == CoinRunMaze_v0) {
    maze_gen.generate_coin_maze();
  } else {
    fprintf(stderr, "coinrun: unknown game type %i\n", game_type);
    maze_gen.generate_test_level();
  }

  Agent &agent = state->agent;
  float zoom = state->maze->default_zoom;
  agent.maze = state->maze;
  agent.zoom = zoom;
  agent.target_zoom = zoom;

  agent.theme_n = maze_gen.randn(player_themesl.size());
  state->ground_n = maze_gen.randn(ground_themes.size());
  state->bg_n = maze_gen.randn(bg_images.size());

  agent.reset(0);

  state->maze->is_terminated = false;
  state->time = 0;
}