void game_state::init(const config& level, play_controller & pc) { events_manager_->read_scenario(level); gui2::tloadscreen::progress("init teams"); if (level["modify_placing"].to_bool()) { LOG_NG << "modifying placing..." << std::endl; place_sides_in_preferred_locations(level); } LOG_NG << "initialized time of day regions... " << (SDL_GetTicks() - pc.ticks()) << std::endl; for (const config &t : level.child_range("time_area")) { tod_manager_.add_time_area(board_.map(),t); } LOG_NG << "initialized teams... " << (SDL_GetTicks() - pc.ticks()) << std::endl; board_.teams_.resize(level.child_count("side")); std::vector<team_builder_ptr> team_builders; int team_num = 0; for (const config &side : level.child_range("side")) { if (first_human_team_ == -1) { const std::string &controller = side["controller"]; if (controller == "human") { first_human_team_ = team_num; } } team_builder_ptr tb_ptr = create_team_builder(side, board_.teams_, level, board_); ++team_num; build_team_stage_one(tb_ptr); team_builders.push_back(tb_ptr); } { //sync traits of start units and the random start time. random_new::set_random_determinstic deterministic(gamedata_.rng()); tod_manager_.resolve_random(*random_new::generator); for(team_builder_ptr tb_ptr : team_builders) { build_team_stage_two(tb_ptr); } for(size_t i = 0; i < board_.teams_.size(); i++) { // Labels from players in your ignore list default to hidden if(preferences::is_ignored(board_.teams_[i].current_player())) { std::string label_cat = "side:" + std::to_string(i + 1); board_.hidden_label_categories_ref().push_back(label_cat); } } } pathfind_manager_.reset(new pathfind::manager(level)); lua_kernel_.reset(new game_lua_kernel(nullptr, *this, pc, *reports_)); }
play_controller::hotkey_handler::hotkey_handler(play_controller & pc, saved_game & sg) : play_controller_(pc) , menu_handler_(pc.get_menu_handler()) , mouse_handler_(pc.get_mouse_handler_base()) , saved_game_(sg) , savenames_() , wml_commands_() , wml_command_pager_(new wmi_pager()) , last_context_menu_x_(0) , last_context_menu_y_(0) {}
game_state::game_state(const config & level, play_controller & pc, const tdata_cache & tdata) : gamedata_(level), board_(tdata, level), tod_manager_(level), pathfind_manager_(), reports_(new reports()), lua_kernel_(), events_manager_(), player_number_(level["playing_team"].to_int() + 1), init_side_done_(level["init_side_done"].to_bool(false)), start_event_fired_(!level["playing_team"].empty()), server_request_number_(level["server_request_number"].to_int()), first_human_team_(-1) { init(pc.ticks(), pc, level); }
game_state::game_state(const config & level, play_controller & pc, game_board& board) : gamedata_(level), board_(board), tod_manager_(level), pathfind_manager_(new pathfind::manager(level)), reports_(new reports()), lua_kernel_(new game_lua_kernel(NULL, *this, pc, *reports_)), events_manager_(), player_number_(level["playing_team"].to_int() + 1), init_side_done_(level["init_side_done"].to_bool(false)), first_human_team_(-1) { init(pc.ticks(), pc, level); game_events_resources_ = boost::make_shared<game_events::t_context>(lua_kernel_.get(), this, static_cast<game_display*>(NULL), &gamedata_, &board_.units_, &no_op, boost::bind(&play_controller::current_side, &pc)); events_manager_.reset(new game_events::manager(level, game_events_resources_)); }