//------------------------------------------------------------------------- // Called from the editor... does one instance of the hostage dialog box //------------------------------------------------------------------------- int do_hostage_dialog() { int i; // Only open 1 instance of this window... if ( MainWindow != NULL ) return 0; // Close other windows close_all_windows(); CurrentHostageIndex = 0; SelectClosestHostage(); // Open a window with a quit button MainWindow = ui_open_window( TMAPBOX_X+10, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, WIN_DIALOG ); QuitButton = ui_add_gadget_button( MainWindow, 20, 222, 48, 40, "Done", NULL ); ui_wprintf_at( MainWindow, 10, 32,"&Message:" ); HostageText = ui_add_gadget_inputbox( MainWindow, 10, 50, HOSTAGE_MESSAGE_LEN, HOSTAGE_MESSAGE_LEN, HostageMessage ); // The little box the hostage vclip will play in. HostageViewBox = ui_add_gadget_userbox( MainWindow,10, 90+10, 64, 64 ); // A bunch of buttons... i = 90; //@@ ui_add_gadget_button( MainWindow,155,i,70, 26, "<< Type", SelectPrevVclip ); //@@ ui_add_gadget_button( MainWindow,155+70,i,70, 26, "Type >>", SelectNextVclip );i += 29; //@@ ui_add_gadget_button( MainWindow,155,i,70, 26, "<< Sound", find_prev_hostage_sound ); //@@ ui_add_gadget_button( MainWindow,155+70,i,70, 26, "Sound >>", find_next_hostage_sound );i += 29; ui_add_gadget_button( MainWindow,155,i,70, 26, "<< Face", SelectPrevFace ); ui_add_gadget_button( MainWindow,155+70,i,70, 26, "Face >>", SelectNextFace );i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Play sound", PlayHostageSound );i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Next Hostage", SelectNextHostage ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Prev Hostage", SelectPrevHostage ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Compress All", CompressHostages ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Delete", ObjectDelete ); i += 29; ui_add_gadget_button( MainWindow,155,i,140, 26, "Create New", PlaceHostage ); i += 29; Time = timer_get_fixed_seconds(); LastHostageIndex = -2; // Set to some dummy value so everything works ok on the first frame. // if ( CurrentHostageIndex == -1 ) // SelectNextHostage(); return 1; }
//------------------------------------------------------------------------- // Called from the editor... does one instance of the hostage dialog box //------------------------------------------------------------------------- int do_hostage_dialog() { // Only open 1 instance of this window... if ( MainWindow != NULL ) return 0; // Close other windows close_all_windows(); auto h = make_unique<hostage_dialog>(); h->vclip_animation_time = 0; h->vclip_playback_speed = 0; h->vclip_ptr = NULL; CurrentHostageIndex = 0; SelectClosestHostage(); // Open a window with a quit button MainWindow = ui_create_dialog(TMAPBOX_X+10, TMAPBOX_Y+20, 765-TMAPBOX_X, 545-TMAPBOX_Y, DF_DIALOG, hostage_dialog_handler, std::move(h)); return 1; }
void do_hostage_window() { fix DeltaTime, Temp; if ( MainWindow == NULL ) return; SelectClosestHostage(); //------------------------------------------------------------ // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; ui_window_do_gadgets(MainWindow); //------------------------------------------------------------ // If we change objects, we need to reset the ui code for all // of the radio buttons that control the ai mode. Also makes // the current AI mode button be flagged as pressed down. //------------------------------------------------------------ if (LastHostageIndex != CurrentHostageIndex ) { if ( CurrentHostageIndex > -1 ) strcpy( HostageText->text, Hostages[CurrentHostageIndex].text ); else strcpy(HostageText->text, " " ); HostageText->position = strlen(HostageText->text); HostageText->oldposition = HostageText->position; HostageText->status=1; HostageText->first_time = 1; } //------------------------------------------------------------ // If any of the radio buttons that control the mode are set, then // update the cooresponding AI state. //------------------------------------------------------------ if ( CurrentHostageIndex > -1 ) strcpy( Hostages[CurrentHostageIndex].text, HostageText->text ); //------------------------------------------------------------ // A simple frame time counter for spinning the objects... //------------------------------------------------------------ Temp = timer_get_fixed_seconds(); DeltaTime = Temp - Time; Time = Temp; //------------------------------------------------------------ // Redraw the object in the little 64x64 box //------------------------------------------------------------ if (CurrentHostageIndex > -1 ) { int vclip_num; vclip_num = Hostages[CurrentHostageIndex].vclip_num; Assert(vclip_num != -1); gr_set_current_canvas( HostageViewBox->canvas ); if ( vclip_num > -1 ) { vclip_play( &Hostage_face_clip[vclip_num], DeltaTime ); } else { gr_clear_canvas( CGREY ); } } else { // no hostage, so just blank out gr_set_current_canvas( HostageViewBox->canvas ); gr_clear_canvas( CGREY ); } //------------------------------------------------------------ // If anything changes in the ui system, redraw all the text that // identifies this robot. //------------------------------------------------------------ if (ui_button_any_drawn || (LastHostageIndex != CurrentHostageIndex) ) { if ( CurrentHostageIndex > -1 ) { ui_wprintf_at( MainWindow, 10, 15, "Hostage: %d Object: %d", CurrentHostageIndex, Hostages[CurrentHostageIndex].objnum ); //@@ui_wprintf_at( MainWindow, 10, 73, "Type: %d Sound: %d ", Hostages[CurrentHostageIndex].type, Hostages[CurrentHostageIndex].sound_num ); ui_wprintf_at( MainWindow, 10, 73, "Face: %d ", Hostages[CurrentHostageIndex].vclip_num); } else { ui_wprintf_at( MainWindow, 10, 15, "Hostage: none " ); //@@ui_wprintf_at( MainWindow, 10, 73, "Type: Sound: " ); ui_wprintf_at( MainWindow, 10, 73, "Face: " ); } Update_flags |= UF_WORLD_CHANGED; } if ( QuitButton->pressed || (last_keypress==KEY_ESC)) { hostage_close_window(); return; } LastHostageIndex = CurrentHostageIndex; }
static window_event_result hostage_dialog_handler(UI_DIALOG *dlg,const d_event &event, hostage_dialog *h) { switch(event.type) { case EVENT_WINDOW_CREATED: return hostage_dialog_created(dlg, h); case EVENT_WINDOW_CLOSE: std::default_delete<hostage_dialog>()(h); MainWindow = nullptr; return window_event_result::ignored; default: break; } fix64 Temp; int keypress = 0; if (event.type == EVENT_KEY_COMMAND) keypress = event_key_get(event); Assert(MainWindow != NULL); SelectClosestHostage(); //------------------------------------------------------------ // Call the ui code.. //------------------------------------------------------------ ui_button_any_drawn = 0; //------------------------------------------------------------ // If we change objects, we need to reset the ui code for all // of the radio buttons that control the ai mode. Also makes // the current AI mode button be flagged as pressed down. //------------------------------------------------------------ //------------------------------------------------------------ // If any of the radio buttons that control the mode are set, then // update the cooresponding AI state. //------------------------------------------------------------ //------------------------------------------------------------ // Redraw the object in the little 64x64 box //------------------------------------------------------------ if (event.type == EVENT_UI_DIALOG_DRAW) { ui_dprintf_at( MainWindow, 10, 32,"&Message:" ); // A simple frame time counter for spinning the objects... Temp = timer_query(); h->time = Temp; if (CurrentHostageIndex > -1 ) { gr_set_current_canvas( h->hostageViewBox->canvas ); gr_clear_canvas( CGREY ); } else { // no hostage, so just blank out gr_set_current_canvas( h->hostageViewBox->canvas ); 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 ( CurrentHostageIndex > -1 ) { ui_dprintf_at( MainWindow, 10, 15, "Hostage: %d Object: %d", CurrentHostageIndex, Hostages[CurrentHostageIndex].objnum ); //@@ui_dprintf_at( MainWindow, 10, 73, "Type: %d Sound: %d ", Hostages[CurrentHostageIndex].type, Hostages[CurrentHostageIndex].sound_num ); } else { ui_dprintf_at( MainWindow, 10, 15, "Hostage: none " ); //@@ui_dprintf_at( MainWindow, 10, 73, "Type: Sound: " ); ui_dprintf_at( MainWindow, 10, 73, "Face: " ); } } if (ui_button_any_drawn || (LastHostageIndex != CurrentHostageIndex)) Update_flags |= UF_WORLD_CHANGED; if (GADGET_PRESSED(h->quitButton.get()) || keypress==KEY_ESC) { return window_event_result::close; } LastHostageIndex = CurrentHostageIndex; return window_event_result::ignored; }