void close_all_windows(void) { close_trigger_window(); close_wall_window(); close_centers_window(); hostage_close_window(); robot_close_window(); }
//------------------------------------------------------------------------- // Called from the editor... does one instance of the trigger dialog box //------------------------------------------------------------------------- int do_trigger_dialog() { int i; trigger_dialog *t; if (!Markedsegp) { editor_status("Trigger requires Marked Segment & Side."); return 0; } // Only open 1 instance of this window... if ( MainWindow != NULL ) return 0; MALLOC(t, trigger_dialog, 1); if (!t) return 0; // Close other windows. robot_close_window(); close_wall_window(); close_centers_window(); 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, (int (*)(UI_DIALOG *, d_event *, void *))trigger_dialog_handler, 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; t->quitButton = ui_add_gadget_button( MainWindow, 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 ); // 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; t->old_trigger_num = -2; // Set to some dummy value so everything works ok on the first frame. return 1; }
void do_centers_window() { int i; // int robot_flags; int redraw_window; if ( MainWindow == NULL ) 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. //------------------------------------------------------------ if (old_seg_num != Cursegp-Segments) { for ( i=0; i < MAX_CENTER_TYPES; i++ ) { CenterFlag[i]->flag = 0; // Tells ui that this button isn't checked CenterFlag[i]->status = 1; // Tells ui to redraw button } Assert(Cursegp->special < MAX_CENTER_TYPES); CenterFlag[Cursegp->special]->flag = 1; mprintf((0, "Cursegp->matcen_num = %i\n", Cursegp->matcen_num)); // Read materialization center robot bit flags for ( i=0; i < N_robot_types; i++ ) { RobotMatFlag[i]->status = 1; // Tells ui to redraw button if (RobotCenters[Cursegp->matcen_num].robot_flags & (1 << i)) RobotMatFlag[i]->flag = 1; // Tells ui that this button is checked else RobotMatFlag[i]->flag = 0; // Tells ui that this button is not checked } } //------------------------------------------------------------ // If any of the radio buttons that control the mode are set, then // update the corresponding center. //------------------------------------------------------------ redraw_window=0; for ( i=0; i < MAX_CENTER_TYPES; i++ ) { if ( CenterFlag[i]->flag == 1 ) if ( i == 0) fuelcen_delete(Cursegp); else if ( Cursegp->special != i ) { fuelcen_delete(Cursegp); redraw_window = 1; fuelcen_activate( Cursegp, i ); } } for ( i=0; i < N_robot_types; i++ ) { if ( RobotMatFlag[i]->flag == 1 ) { if (!(RobotCenters[Cursegp->matcen_num].robot_flags & (1<<i) )) { RobotCenters[Cursegp->matcen_num].robot_flags |= (1<<i); mprintf((0,"Segment %i, matcen = %i, Robot_flags %d\n", Cursegp-Segments, Cursegp->matcen_num, RobotCenters[Cursegp->matcen_num].robot_flags)); } } else if (RobotCenters[Cursegp->matcen_num].robot_flags & 1<<i) { RobotCenters[Cursegp->matcen_num].robot_flags &= ~(1<<i); mprintf((0,"Segment %i, matcen = %i, Robot_flags %d\n", Cursegp-Segments, Cursegp->matcen_num, RobotCenters[Cursegp->matcen_num].robot_flags)); } } //------------------------------------------------------------ // If anything changes in the ui system, redraw all the text that // identifies this wall. //------------------------------------------------------------ if (redraw_window || (old_seg_num != Cursegp-Segments ) ) { // int i; // char temp_text[CENTER_STRING_LENGTH]; ui_wprintf_at( MainWindow, 12, 6, "Seg: %3d", Cursegp-Segments ); // for (i=0; i<CENTER_STRING_LENGTH; i++) // temp_text[i] = ' '; // temp_text[i] = 0; // Assert(Cursegp->special < MAX_CENTER_TYPES); // strncpy(temp_text, Center_names[Cursegp->special], strlen(Center_names[Cursegp->special])); // ui_wprintf_at( MainWindow, 12, 23, " Type: %s", temp_text ); Update_flags |= UF_WORLD_CHANGED; } if ( QuitButton->pressed || (last_keypress==KEY_ESC) ) { close_centers_window(); return; } old_seg_num = Cursegp-Segments; }