File tree Expand file tree Collapse file tree 4 files changed +20
-31
lines changed
Expand file tree Collapse file tree 4 files changed +20
-31
lines changed Original file line number Diff line number Diff line change @@ -51,10 +51,12 @@ void Game_CommonEvent::Refresh() {
5151 : static_cast <Game_Interpreter*>(new Game_Interpreter_Map ()));
5252 Update ();
5353 }
54- } else {
55- interpreter.reset ();
54+ return ;
5655 }
57- } else {
56+ }
57+ if (interpreter) {
58+ interpreter->Clear ();
59+ Game_Map::ReserveInterpreterDeletion (interpreter);
5860 interpreter.reset ();
5961 }
6062}
@@ -63,13 +65,11 @@ void Game_CommonEvent::Update() {
6365 CheckEventTriggerAuto ();
6466
6567 if (interpreter) {
66- Game_Map::SetParallelInterpreter (interpreter);
6768 if (!interpreter->IsRunning ()) {
6869 interpreter->Setup (GetList (), 0 , -common_event_id, -2 );
6970 } else {
7071 interpreter->Update ();
7172 }
72- Game_Map::SetParallelInterpreter (EASYRPG_SHARED_PTR<Game_Interpreter>());
7373 }
7474}
7575
Original file line number Diff line number Diff line change @@ -241,6 +241,13 @@ void Game_Event::ClearStarting() {
241241void Game_Event::Setup (RPG::EventPage* new_page) {
242242 page = new_page;
243243
244+ // Free resources if needed
245+ if (interpreter) {
246+ interpreter->Clear ();
247+ Game_Map::ReserveInterpreterDeletion (interpreter);
248+ interpreter.reset ();
249+ }
250+
244251 if (page == NULL ) {
245252 tile_id = 0 ;
246253 SetSpriteName (" " );
@@ -249,7 +256,6 @@ void Game_Event::Setup(RPG::EventPage* new_page) {
249256 // move_type = 0;
250257 trigger = -1 ;
251258 list.clear ();
252- interpreter.reset ();
253259 return ;
254260 }
255261 SetSpriteName (page->character_name );
@@ -279,11 +285,6 @@ void Game_Event::Setup(RPG::EventPage* new_page) {
279285 trigger = page->trigger ;
280286 list = page->event_commands ;
281287
282- // Free resources if needed
283- if (interpreter) {
284- interpreter->Clear ();
285- interpreter.reset ();
286- }
287288 if (trigger == RPG::EventPage::Trigger_parallel) {
288289 interpreter.reset (new Game_Interpreter_Map ());
289290 }
@@ -494,13 +495,11 @@ void Game_Event::Update() {
494495 CheckEventTriggerAuto ();
495496
496497 if (interpreter) {
497- Game_Map::SetParallelInterpreter (interpreter);
498498 if (!interpreter->IsRunning ()) {
499499 interpreter->Setup (list, event.ID , -event.x , event.y );
500500 } else {
501501 interpreter->Update ();
502502 }
503- Game_Map::SetParallelInterpreter (EASYRPG_SHARED_PTR<Game_Interpreter>());
504503 }
505504}
506505
Original file line number Diff line number Diff line change @@ -63,7 +63,7 @@ namespace {
6363 int scroll_speed;
6464
6565 boost::scoped_ptr<Game_Interpreter> interpreter;
66- EASYRPG_SHARED_PTR<Game_Interpreter> parallel_interpreter ;
66+ std::vector< EASYRPG_SHARED_PTR<Game_Interpreter>> free_interpreters ;
6767 Game_Vehicle* vehicles[3 ];
6868
6969 bool pan_locked;
@@ -306,12 +306,8 @@ Game_Interpreter& Game_Map::GetInterpreter() {
306306 return *interpreter;
307307}
308308
309- EASYRPG_SHARED_PTR<Game_Interpreter> Game_Map::GetParallelInterpreter () {
310- return parallel_interpreter;
311- }
312-
313- void Game_Map::SetParallelInterpreter (EASYRPG_SHARED_PTR<Game_Interpreter> interpreter) {
314- parallel_interpreter = interpreter;
309+ void Game_Map::ReserveInterpreterDeletion (EASYRPG_SHARED_PTR<Game_Interpreter> interpreter) {
310+ free_interpreters.push_back (interpreter);
315311}
316312
317313void Game_Map::ScrollDown (int distance) {
@@ -679,6 +675,8 @@ void Game_Map::Update() {
679675
680676 for (int i = 0 ; i < 3 ; ++i)
681677 vehicles[i]->Update ();
678+
679+ free_interpreters.clear ();
682680}
683681
684682RPG::Map const & Game_Map::GetMap () {
Original file line number Diff line number Diff line change @@ -392,19 +392,11 @@ namespace Game_Map {
392392 Game_Interpreter& GetInterpreter ();
393393
394394 /* *
395- * Gets the currently running parallel interpreter .
395+ * Destroy an interpreter after all events and common events have been updated .
396396 *
397- * @return running parallel interpreter .
397+ * @param interpreter to destroy .
398398 */
399- EASYRPG_SHARED_PTR<Game_Interpreter> GetParallelInterpreter ();
400-
401- /* *
402- * Sets the currently running parallel interpreter.
403- * Used to hold a 2nd stromg reference to prevent destruction on refresh.
404- *
405- * @param interpreter executed interpreter.
406- */
407- void SetParallelInterpreter (EASYRPG_SHARED_PTR<Game_Interpreter> interpreter);
399+ void ReserveInterpreterDeletion (EASYRPG_SHARED_PTR<Game_Interpreter> interpreter);
408400
409401 /* *
410402 * Sets the need refresh flag.
You can’t perform that action at this time.
0 commit comments