//------------------------------------------------------------------------- // Called from the editor... does one instance of the centers dialog box //------------------------------------------------------------------------- int do_centers_dialog() { int i; // Only open 1 instance of this window... if ( MainWindow != NULL ) return 0; // Close other windows. close_trigger_window(); hostage_close_window(); close_wall_window(); robot_close_window(); // Open a window with a quit button MainWindow = ui_open_window( TMAPBOX_X+20, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, WIN_DIALOG ); QuitButton = ui_add_gadget_button( MainWindow, 20, 252, 48, 40, "Done", NULL ); // These are the checkboxes for each door flag. i = 80; CenterFlag[0] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "NONE" ); i += 24; CenterFlag[1] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "FuelCen" ); i += 24; CenterFlag[2] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "RepairCen" ); i += 24; CenterFlag[3] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "ControlCen" ); i += 24; CenterFlag[4] = ui_add_gadget_radio( MainWindow, 18, i, 16, 16, 0, "RobotCen" ); i += 24; // These are the checkboxes for each door flag. for (i=0; i<N_robot_types; i++) RobotMatFlag[i] = ui_add_gadget_checkbox( MainWindow, 128 + (i%2)*92, 20+(i/2)*24, 16, 16, 0, Robot_names[i]); old_seg_num = -2; // Set to some dummy value so everything works ok on the first frame. return 1; }
void close_all_windows(void) { close_trigger_window(); close_wall_window(); close_centers_window(); hostage_close_window(); robot_close_window(); }
int do_centers_dialog() { // Only open 1 instance of this window... if ( MainWindow != NULL ) return 0; // Close other windows. close_trigger_window(); hostage_close_window(); close_wall_window(); robot_close_window(); auto c = make_unique<centers_dialog>(); // Open a window with a quit button #if defined(DXX_BUILD_DESCENT_I) const unsigned x = TMAPBOX_X+20; const unsigned width = 765-TMAPBOX_X; #elif defined(DXX_BUILD_DESCENT_II) const unsigned x = 20; const unsigned width = 740; #endif MainWindow = ui_create_dialog(x, TMAPBOX_Y+20, width, 545-TMAPBOX_Y, DF_DIALOG, centers_dialog_handler, std::move(c)); return 1; }
int trigger_dialog_handler(UI_DIALOG *dlg, d_event *event, trigger_dialog *t) { int i; short Markedwall, trigger_num; int keypress = 0; int rval = 0; Assert(MainWindow != NULL); if (!Markedsegp) { close_trigger_window(); return 0; } //------------------------------------------------------------ // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; if (event->type == EVENT_KEY_COMMAND) keypress = event_key_get(event); //------------------------------------------------------------ // If we change walls, we need to reset the ui code for all // of the checkboxes that control the wall flags. //------------------------------------------------------------ Markedwall = Markedsegp->sides[Markedside].wall_num; if (Markedwall != -1) trigger_num = Walls[Markedwall].trigger; else trigger_num = -1; if (t->old_trigger_num != trigger_num) { if (trigger_num != -1) { trigger *trig = &Triggers[trigger_num]; ui_checkbox_check(t->triggerFlag[0], trig->flags & TRIGGER_CONTROL_DOORS); ui_checkbox_check(t->triggerFlag[1], trig->flags & TRIGGER_SHIELD_DAMAGE); ui_checkbox_check(t->triggerFlag[2], trig->flags & TRIGGER_ENERGY_DRAIN); ui_checkbox_check(t->triggerFlag[3], trig->flags & TRIGGER_EXIT); ui_checkbox_check(t->triggerFlag[4], trig->flags & TRIGGER_ONE_SHOT); ui_checkbox_check(t->triggerFlag[5], trig->flags & TRIGGER_ILLUSION_ON); ui_checkbox_check(t->triggerFlag[6], trig->flags & TRIGGER_ILLUSION_OFF); ui_checkbox_check(t->triggerFlag[7], trig->flags & TRIGGER_ON); ui_checkbox_check(t->triggerFlag[8], trig->flags & TRIGGER_MATCEN); ui_checkbox_check(t->triggerFlag[9], trig->flags & TRIGGER_SECRET_EXIT); } } //------------------------------------------------------------ // If any of the checkboxes that control the wallflags are set, then // update the cooresponding wall flag. //------------------------------------------------------------ if (IS_CHILD(Markedsegp->children[Markedside])) { rval = 1; if (GADGET_PRESSED(t->triggerFlag[0])) trigger_flag_Markedside(TRIGGER_CONTROL_DOORS, t->triggerFlag[0]->flag); else if (GADGET_PRESSED(t->triggerFlag[1])) trigger_flag_Markedside(TRIGGER_SHIELD_DAMAGE, t->triggerFlag[1]->flag); else if (GADGET_PRESSED(t->triggerFlag[2])) trigger_flag_Markedside(TRIGGER_ENERGY_DRAIN, t->triggerFlag[2]->flag); else if (GADGET_PRESSED(t->triggerFlag[3])) trigger_flag_Markedside(TRIGGER_EXIT, t->triggerFlag[3]->flag); else if (GADGET_PRESSED(t->triggerFlag[4])) trigger_flag_Markedside(TRIGGER_ONE_SHOT, t->triggerFlag[4]->flag); else if (GADGET_PRESSED(t->triggerFlag[5])) trigger_flag_Markedside(TRIGGER_ILLUSION_ON, t->triggerFlag[5]->flag); else if (GADGET_PRESSED(t->triggerFlag[6])) trigger_flag_Markedside(TRIGGER_ILLUSION_OFF, t->triggerFlag[6]->flag); else if (GADGET_PRESSED(t->triggerFlag[7])) trigger_flag_Markedside(TRIGGER_ON, t->triggerFlag[7]->flag); else if (GADGET_PRESSED(t->triggerFlag[8])) trigger_flag_Markedside(TRIGGER_MATCEN, t->triggerFlag[8]->flag); else if (GADGET_PRESSED(t->triggerFlag[9])) trigger_flag_Markedside(TRIGGER_SECRET_EXIT, t->triggerFlag[9]->flag); else rval = 0; } else for (i = 0; i < NUM_TRIGGER_FLAGS; i++ ) ui_checkbox_check(t->triggerFlag[i], 0); //------------------------------------------------------------ // Draw the wall in the little 64x64 box //------------------------------------------------------------ if (event->type == EVENT_UI_DIALOG_DRAW) { gr_set_current_canvas( t->wallViewBox->canvas ); if ((Markedsegp->sides[Markedside].wall_num == -1) || (Walls[Markedsegp->sides[Markedside].wall_num].trigger) == -1) gr_clear_canvas( CBLACK ); else { if (Markedsegp->sides[Markedside].tmap_num2 > 0) { gr_ubitmap(0,0, texmerge_get_cached_bitmap( Markedsegp->sides[Markedside].tmap_num, Markedsegp->sides[Markedside].tmap_num2)); } else { if (Markedsegp->sides[Markedside].tmap_num > 0) { PIGGY_PAGE_IN(Textures[Markedsegp->sides[Markedside].tmap_num]); gr_ubitmap(0,0, &GameBitmaps[Textures[Markedsegp->sides[Markedside].tmap_num].index]); } else gr_clear_canvas( CGREY ); } } } //------------------------------------------------------------ // If anything changes in the ui system, redraw all the text that // identifies this robot. //------------------------------------------------------------ if (event->type == EVENT_UI_DIALOG_DRAW) { if ( Markedsegp->sides[Markedside].wall_num > -1 ) { ui_dprintf_at( MainWindow, 12, 6, "Trigger: %d ", trigger_num); } else { ui_dprintf_at( MainWindow, 12, 6, "Trigger: none "); } } 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(); return 1; } t->old_trigger_num = trigger_num; return rval; }
void do_trigger_window() { int i; short Markedwall, trigger_num; if ( MainWindow == NULL ) return; if (!Markedsegp) { close_trigger_window(); return; } //------------------------------------------------------------ // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; ui_window_do_gadgets(MainWindow); //------------------------------------------------------------ // If we change walls, we need to reset the ui code for all // of the checkboxes that control the wall flags. //------------------------------------------------------------ Markedwall = Markedsegp->sides[Markedside].wall_num; if (Markedwall != -1) trigger_num = Walls[Markedwall].trigger; else trigger_num = -1; if (old_trigger_num != trigger_num ) { for ( i=0; i < NUM_TRIGGER_FLAGS; i++ ) { TriggerFlag[i]->flag = 0; // Tells ui that this button isn't checked TriggerFlag[i]->status = 1; // Tells ui to redraw button } if (trigger_num != -1) { if (Triggers[trigger_num].flags & TRIGGER_CONTROL_DOORS) TriggerFlag[0]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_SHIELD_DAMAGE) TriggerFlag[1]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_ENERGY_DRAIN) TriggerFlag[2]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_EXIT) TriggerFlag[3]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_ONE_SHOT) TriggerFlag[4]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_ILLUSION_ON) TriggerFlag[5]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_ILLUSION_OFF) TriggerFlag[6]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_ON) TriggerFlag[7]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_MATCEN) TriggerFlag[8]->flag = 1; if (Triggers[trigger_num].flags & TRIGGER_SECRET_EXIT) TriggerFlag[9]->flag = 1; } } //------------------------------------------------------------ // If any of the checkboxes that control the wallflags are set, then // update the cooresponding wall flag. //------------------------------------------------------------ if (IS_CHILD(Markedsegp->children[Markedside])) { if (TriggerFlag[0]->flag == 1) trigger_add_to_Markedside(TRIGGER_CONTROL_DOORS); else trigger_remove_flag_from_Markedside(TRIGGER_CONTROL_DOORS); if (TriggerFlag[1]->flag == 1) trigger_add_to_Markedside(TRIGGER_SHIELD_DAMAGE); else trigger_remove_flag_from_Markedside(TRIGGER_SHIELD_DAMAGE); if (TriggerFlag[2]->flag == 1) trigger_add_to_Markedside(TRIGGER_ENERGY_DRAIN); else trigger_remove_flag_from_Markedside(TRIGGER_ENERGY_DRAIN); if (TriggerFlag[3]->flag == 1) trigger_add_to_Markedside(TRIGGER_EXIT); else trigger_remove_flag_from_Markedside(TRIGGER_EXIT); if (TriggerFlag[4]->flag == 1) trigger_add_to_Markedside(TRIGGER_ONE_SHOT); else trigger_remove_flag_from_Markedside(TRIGGER_ONE_SHOT); if (TriggerFlag[5]->flag == 1) trigger_add_to_Markedside(TRIGGER_ILLUSION_ON); else trigger_remove_flag_from_Markedside(TRIGGER_ILLUSION_ON); if (TriggerFlag[6]->flag == 1) trigger_add_to_Markedside(TRIGGER_ILLUSION_OFF); else trigger_remove_flag_from_Markedside(TRIGGER_ILLUSION_OFF); if (TriggerFlag[7]->flag == 1) trigger_add_to_Markedside(TRIGGER_ON); else trigger_remove_flag_from_Markedside(TRIGGER_ON); if (TriggerFlag[8]->flag == 1) trigger_add_to_Markedside(TRIGGER_MATCEN); else trigger_remove_flag_from_Markedside(TRIGGER_MATCEN); if (TriggerFlag[9]->flag == 1) trigger_add_to_Markedside(TRIGGER_SECRET_EXIT); else trigger_remove_flag_from_Markedside(TRIGGER_SECRET_EXIT); } else for ( i=0; i < NUM_TRIGGER_FLAGS; i++ ) if (TriggerFlag[i]->flag == 1) { TriggerFlag[i]->flag = 0; // Tells ui that this button isn't checked TriggerFlag[i]->status = 1; // Tells ui to redraw button } //------------------------------------------------------------ // Draw the wall in the little 64x64 box //------------------------------------------------------------ gr_set_current_canvas( WallViewBox->canvas ); if ((Markedsegp->sides[Markedside].wall_num == -1) || (Walls[Markedsegp->sides[Markedside].wall_num].trigger) == -1) gr_clear_canvas( CBLACK ); else { if (Markedsegp->sides[Markedside].tmap_num2 > 0) { gr_ubitmap(0,0, texmerge_get_cached_bitmap( Markedsegp->sides[Markedside].tmap_num, Markedsegp->sides[Markedside].tmap_num2)); } else { if (Markedsegp->sides[Markedside].tmap_num > 0) { PIGGY_PAGE_IN(Textures[Markedsegp->sides[Markedside].tmap_num]); gr_ubitmap(0,0, &GameBitmaps[Textures[Markedsegp->sides[Markedside].tmap_num].index]); } else gr_clear_canvas( CGREY ); } } //------------------------------------------------------------ // If anything changes in the ui system, redraw all the text that // identifies this robot. //------------------------------------------------------------ if (ui_button_any_drawn || (old_trigger_num != trigger_num) ) { if ( Markedsegp->sides[Markedside].wall_num > -1 ) { ui_wprintf_at( MainWindow, 12, 6, "Trigger: %d ", trigger_num); } else { ui_wprintf_at( MainWindow, 12, 6, "Trigger: none "); } Update_flags |= UF_WORLD_CHANGED; } if ( QuitButton->pressed || (last_keypress==KEY_ESC)) { close_trigger_window(); return; } old_trigger_num = trigger_num; }