diff --git a/common/include/editor/eswitch.h b/common/include/editor/eswitch.h index 75d2c2497..e24bcd83e 100644 --- a/common/include/editor/eswitch.h +++ b/common/include/editor/eswitch.h @@ -33,8 +33,6 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. extern int bind_wall_to_trigger(); -extern int trigger_remove(); - int remove_trigger(vsegptr_t seg, short side); extern int remove_trigger_num(int trigger_num); diff --git a/similar/editor/eswitch.cpp b/similar/editor/eswitch.cpp index 2101b72b5..087feff46 100644 --- a/similar/editor/eswitch.cpp +++ b/similar/editor/eswitch.cpp @@ -49,6 +49,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include "piggy.h" #include "u_mem.h" +#include "compiler-make_unique.h" #include "compiler-range_for.h" #include "partial_range.h" @@ -262,7 +263,7 @@ int remove_trigger(const vsegptr_t seg, short side) return remove_trigger_num(Walls[seg->sides[side].wall_num].trigger); } -int trigger_remove() +static int trigger_remove() { remove_trigger(Markedsegp, Markedside); Update_flags = UF_WORLD_CHANGED; @@ -283,9 +284,6 @@ static int trigger_dialog_handler(UI_DIALOG *dlg,const d_event &event, trigger_d //------------------------------------------------------------------------- int do_trigger_dialog() { - int i; - trigger_dialog *t; - if (!Markedsegp) { editor_status("Trigger requires Marked Segment & Side."); return 0; @@ -294,10 +292,7 @@ int do_trigger_dialog() // Only open 1 instance of this window... if ( MainWindow != NULL ) return 0; - MALLOC(t, trigger_dialog, 1); - if (!t) - return 0; - + auto t = make_unique(); // Close other windows. robot_close_window(); close_wall_window(); @@ -305,36 +300,38 @@ int do_trigger_dialog() hostage_close_window(); // Open a window with a quit button - MainWindow = ui_create_dialog( TMAPBOX_X+20, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, DF_DIALOG, trigger_dialog_handler, t ); + MainWindow = ui_create_dialog(TMAPBOX_X+20, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, DF_DIALOG, trigger_dialog_handler, std::move(t)); + return 1; +} +static int trigger_dialog_created(UI_DIALOG *const w, trigger_dialog *const t) +{ // These are the checkboxes for each door flag. - i = 44; - t->triggerFlag[0] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Door Control" ); i+=22; - t->triggerFlag[1] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Shield damage" ); i+=22; - t->triggerFlag[2] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Energy drain" ); i+=22; - t->triggerFlag[3] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Exit" ); i+=22; - t->triggerFlag[4] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "One-shot" ); i+=22; - t->triggerFlag[5] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Illusion ON" ); i+=22; - t->triggerFlag[6] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Illusion OFF" ); i+=22; - t->triggerFlag[7] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Trigger ON" ); i+=22; - t->triggerFlag[8] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Matcen Trigger" ); i+=22; - t->triggerFlag[9] = ui_add_gadget_checkbox( MainWindow, 22, i, 16, 16, 0, "Secret Exit" ); i+=22; + int i = 44; + t->triggerFlag[0] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Door Control"); i+=22; + t->triggerFlag[1] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Shield damage"); i+=22; + t->triggerFlag[2] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Energy drain"); i+=22; + t->triggerFlag[3] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Exit"); i+=22; + t->triggerFlag[4] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "One-shot"); i+=22; + t->triggerFlag[5] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Illusion ON"); i+=22; + t->triggerFlag[6] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Illusion OFF"); i+=22; + t->triggerFlag[7] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Trigger ON"); i+=22; + t->triggerFlag[8] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Matcen Trigger"); i+=22; + t->triggerFlag[9] = ui_add_gadget_checkbox(w, 22, i, 16, 16, 0, "Secret Exit"); i+=22; - t->quitButton = ui_add_gadget_button( MainWindow, 20, i, 48, 40, "Done", NULL ); + t->quitButton = ui_add_gadget_button( w, 20, i, 48, 40, "Done", NULL ); // The little box the wall will appear in. - t->wallViewBox = ui_add_gadget_userbox( MainWindow, 155, 5, 64, 64 ); + t->wallViewBox = ui_add_gadget_userbox( w, 155, 5, 64, 64 ); // A bunch of buttons... i = 80; -// ui_add_gadget_button( MainWindow,155,i,140, 26, "Add Door Control", add_trigger_control ); i += 29; - ui_add_gadget_button( MainWindow,155,i,140, 26, "Remove Trigger", trigger_remove ); i += 29; - ui_add_gadget_button( MainWindow,155,i,140, 26, "Bind Wall", bind_wall_to_trigger ); i += 29; - ui_add_gadget_button( MainWindow,155,i,140, 26, "Bind Matcen", bind_matcen_to_trigger ); i += 29; - ui_add_gadget_button( MainWindow,155,i,140, 26, "All Triggers ON", trigger_turn_all_ON ); i += 29; + ui_add_gadget_button(w, 155, i, 140, 26, "Remove Trigger", trigger_remove); i += 29; + ui_add_gadget_button(w, 155, i, 140, 26, "Bind Wall", bind_wall_to_trigger); i += 29; + ui_add_gadget_button(w, 155, i, 140, 26, "Bind Matcen", bind_matcen_to_trigger); i += 29; + ui_add_gadget_button(w, 155, i, 140, 26, "All Triggers ON", trigger_turn_all_ON); i += 29; t->old_trigger_num = -2; // Set to some dummy value so everything works ok on the first frame. - return 1; } @@ -348,6 +345,17 @@ void close_trigger_window() int trigger_dialog_handler(UI_DIALOG *dlg,const d_event &event, trigger_dialog *t) { + switch(event.type) + { + case EVENT_WINDOW_CREATED: + return trigger_dialog_created(dlg, t); + case EVENT_WINDOW_CLOSE: + std::default_delete()(t); + MainWindow = NULL; + return 0; + default: + break; + } short Markedwall, trigger_num; int keypress = 0; int rval = 0; @@ -466,14 +474,6 @@ int trigger_dialog_handler(UI_DIALOG *dlg,const d_event &event, trigger_dialog * if (ui_button_any_drawn || (t->old_trigger_num != trigger_num) ) Update_flags |= UF_WORLD_CHANGED; - - if (event.type == EVENT_WINDOW_CLOSE) - { - d_free(t); - MainWindow = NULL; - return 0; - } - if ( GADGET_PRESSED(t->quitButton) || (keypress==KEY_ESC)) { close_trigger_window();