initialize the lua kernel earlier

This allows user defined [effect]s to be used in [unit]s in [side],
previously those units were created before custom effects were available,
This commit is contained in:
gfgtdf 2016-09-12 03:30:26 +02:00
parent 3dba60bcd7
commit 9cc80973f8
3 changed files with 10 additions and 13 deletions

View file

@ -42,13 +42,13 @@ static lg::log_domain log_engine("engine");
#define LOG_NG LOG_STREAM(info, log_engine)
#define DBG_NG LOG_STREAM(debug, log_engine)
game_state::game_state(const config & level, play_controller &, const tdata_cache & tdata) :
game_state::game_state(const config & level, play_controller & pc, const tdata_cache & tdata) :
gamedata_(level),
board_(tdata, level),
tod_manager_(level),
pathfind_manager_(),
pathfind_manager_(new pathfind::manager(level)),
reports_(new reports()),
lua_kernel_(),
lua_kernel_(new game_lua_kernel(nullptr, *this, pc, *reports_)),
events_manager_(new game_events::manager()),
//TODO: this construct units (in dimiss undo action) but resrouces:: are not available yet,
// so we might want to move the innitialisation of undo_stack_ to game_state::init
@ -197,6 +197,9 @@ void game_state::init(const config& level, play_controller & pc)
build_team_stage_one(tb_ptr);
team_builders.push_back(tb_ptr);
}
//Initilize the lua kernel before the units are created.
lua_kernel_->initialize(level);
{
//sync traits of start units and the random start time.
random_new::set_random_determinstic deterministic(gamedata_.rng());
@ -215,10 +218,6 @@ void game_state::init(const config& level, play_controller & pc)
}
}
}
pathfind_manager_.reset(new pathfind::manager(level));
lua_kernel_.reset(new game_lua_kernel(nullptr, *this, pc, *reports_));
}
void game_state::set_game_display(game_display * gd)

View file

@ -228,6 +228,7 @@ void play_controller::init(CVideo& video, const config& level)
resources::filter_con = &gamestate();
resources::undo_stack = &undo_stack();
resources::game_events = gamestate().events_manager_.get();
resources::lua_kernel = gamestate().lua_kernel_.get();
gamestate_->init(level, *this);
resources::tunnels = gamestate().pathfind_manager_.get();
@ -268,7 +269,6 @@ void play_controller::init(CVideo& video, const config& level)
// Has to be done before registering any events!
gamestate().set_game_display(gui_.get());
gui2::tloadscreen::progress("init lua");
resources::lua_kernel = gamestate().lua_kernel_.get();
if(gamestate().first_human_team_ != -1) {
gui_->set_team(gamestate().first_human_team_);
@ -291,7 +291,7 @@ void play_controller::init(CVideo& video, const config& level)
gui2::tloadscreen::progress("start game");
//loadscreen_manager->reset();
gamestate().gamedata_.set_phase(game_data::PRELOAD);
gamestate().lua_kernel_->initialize(level);
gamestate().lua_kernel_->load_game(level);
plugins_context_.reset(new plugins_context("Game"));
plugins_context_->set_callback("save_game", [this](const config& cfg) { save_game_auto(cfg["filename"]); }, true);
@ -323,10 +323,10 @@ void play_controller::reset_gamestate(const config& level, int replay_pos)
resources::filter_con = &gamestate();
resources::undo_stack = &undo_stack();
resources::game_events = gamestate().events_manager_.get();
resources::lua_kernel = gamestate().lua_kernel_.get();
gamestate_->init(level, *this);
gamestate().set_game_display(gui_.get());
resources::lua_kernel = gamestate().lua_kernel_.get();
resources::tunnels = gamestate().pathfind_manager_.get();
gui_->reset_tod_manager(gamestate().tod_manager_);
@ -334,7 +334,7 @@ void play_controller::reset_gamestate(const config& level, int replay_pos)
gui_->change_display_context(&gamestate().board_);
saved_game_.get_replay().set_pos(replay_pos);
gamestate().gamedata_.set_phase(game_data::PRELOAD);
gamestate().lua_kernel_->initialize(level);
gamestate().lua_kernel_->load_game(level);
}
void play_controller::init_managers()

View file

@ -4370,8 +4370,6 @@ void game_lua_kernel::initialize(const config& level)
for (const config &cfg : level_lua_.child_range("lua")) {
run_lua_tag(cfg);
}
load_game(level);
}
void game_lua_kernel::set_game_display(game_display * gd) {