int automap_handler(window *wind, d_event *event, automap *am) { switch (event->type) { case EVENT_WINDOW_ACTIVATED: game_flush_inputs(); event_toggle_focus(1); key_toggle_repeat(0); break; case EVENT_WINDOW_DEACTIVATED: event_toggle_focus(0); key_toggle_repeat(1); break; case EVENT_IDLE: case EVENT_JOYSTICK_BUTTON_UP: case EVENT_JOYSTICK_BUTTON_DOWN: case EVENT_JOYSTICK_MOVED: case EVENT_MOUSE_BUTTON_UP: case EVENT_MOUSE_BUTTON_DOWN: case EVENT_MOUSE_MOVED: automap_process_input(wind, event, am); break; case EVENT_KEY_COMMAND: case EVENT_KEY_RELEASE: { int kret = automap_key_command(wind, event, am); if (!kret) automap_process_input(wind, event, am); return kret; } case EVENT_WINDOW_DRAW: draw_automap(am); break; case EVENT_WINDOW_CLOSE: if (!am->pause_game) ConsoleObject->mtype.phys_info.flags |= am->old_wiggle; // Restore wiggle event_toggle_focus(0); key_toggle_repeat(1); #ifdef OGL gr_free_bitmap_data(&am->automap_background); #endif d_free(am->edges); d_free(am->drawingListBright); d_free(am); window_set_visible(Game_wind, 1); Automap_active = 0; return 0; // continue closing break; default: return 0; break; } return 1; }
int MarkerInputMessage(int key) { switch( key ) { case KEY_F8: case KEY_ESC: DefiningMarkerMessage = 0; key_toggle_repeat(0); game_flush_inputs(); break; case KEY_LEFT: case KEY_BACKSP: case KEY_PAD4: if (Marker_index > 0) Marker_index--; Marker_input[Marker_index] = 0; break; case KEY_ENTER: strcpy (MarkerMessage[(Player_num*2)+MarkerBeingDefined],Marker_input); DropMarker(MarkerBeingDefined); LastMarkerDropped = MarkerBeingDefined; key_toggle_repeat(0); game_flush_inputs(); DefiningMarkerMessage = 0; break; default: { int ascii = key_ascii(); if ((ascii < 255 )) if (Marker_index < 38 ) { Marker_input[Marker_index++] = ascii; Marker_input[Marker_index] = 0; } return 0; break; } } return 1; }
static window_event_result con_handler(window *wind,const d_event &event, const unused_window_userdata_t *) { int key; static fix64 last_scroll_time = 0; switch (event.type) { case EVENT_WINDOW_ACTIVATED: key_toggle_repeat(1); break; case EVENT_WINDOW_DEACTIVATED: key_toggle_repeat(0); con_size = 0; con_state = CON_STATE_CLOSED; break; case EVENT_KEY_COMMAND: key = event_key_get(event); switch (key) { case KEY_SHIFTED + KEY_ESC: switch (con_state) { case CON_STATE_OPEN: case CON_STATE_OPENING: con_state = CON_STATE_CLOSING; break; case CON_STATE_CLOSED: case CON_STATE_CLOSING: con_state = CON_STATE_OPENING; default: break; } break; case KEY_PAGEUP: con_scroll_offset+=CON_SCROLL_OFFSET; if (con_scroll_offset >= CON_LINES_MAX-1) con_scroll_offset = CON_LINES_MAX-1; while (con_buffer[CON_LINES_MAX-1-con_scroll_offset].line[0]=='\0') con_scroll_offset--; break; case KEY_PAGEDOWN: con_scroll_offset-=CON_SCROLL_OFFSET; if (con_scroll_offset<0) con_scroll_offset=0; break; case KEY_CTRLED + KEY_A: case KEY_HOME: cli_cursor_home(); break; case KEY_END: case KEY_CTRLED + KEY_E: cli_cursor_end(); break; case KEY_CTRLED + KEY_C: cli_clear(); break; case KEY_LEFT: cli_cursor_left(); break; case KEY_RIGHT: cli_cursor_right(); break; case KEY_BACKSP: cli_cursor_backspace(); break; case KEY_CTRLED + KEY_D: case KEY_DELETE: cli_cursor_del(); break; case KEY_UP: cli_history_prev(); break; case KEY_DOWN: cli_history_next(); break; case KEY_TAB: cli_autocomplete(); break; case KEY_ENTER: cli_execute(); break; case KEY_INSERT: cli_toggle_overwrite_mode(); break; default: int character = key_ascii(); if (character == 255) break; cli_add_character(character); break; } return window_event_result::handled; case EVENT_WINDOW_DRAW: timer_delay2(50); if (con_state == CON_STATE_OPENING) { if (con_size < CON_LINES_ONSCREEN && timer_query() >= last_scroll_time+(F1_0/30)) { last_scroll_time = timer_query(); if (++ con_size >= CON_LINES_ONSCREEN) con_state = CON_STATE_OPEN; } } else if (con_state == CON_STATE_CLOSING) { if (con_size > 0 && timer_query() >= last_scroll_time+(F1_0/30)) { last_scroll_time = timer_query(); if (! -- con_size) con_state = CON_STATE_CLOSED; } } con_draw(); if (con_state == CON_STATE_CLOSED && wind) { return window_event_result::close; } break; case EVENT_WINDOW_CLOSE: break; default: break; } return window_event_result::ignored; }
void automap_build_edge_list(automap *am) { int i,e1,e2,s; Edge_info * e; // clear edge list for (i=0; i<am->max_edges; i++) { am->edges[i].num_faces = 0; am->edges[i].flags = 0; } am->num_edges = 0; am->highest_edge_index = -1; if (cheats.fullautomap || (Players[Player_num].flags & PLAYER_FLAGS_MAP_ALL) ) { // Cheating, add all edges as visited for (s=0; s<=Highest_segment_index; s++) #ifdef EDITOR if (Segments[s].segnum != -1) #endif { add_segment_edges(am, &Segments[s]); } } else { // Not cheating, add visited edges, and then unvisited edges for (s=0; s<=Highest_segment_index; s++) #ifdef EDITOR if (Segments[s].segnum != -1) #endif if (Automap_visited[s]) { add_segment_edges(am, &Segments[s]); } for (s=0; s<=Highest_segment_index; s++) #ifdef EDITOR if (Segments[s].segnum != -1) #endif if (!Automap_visited[s]) { add_unknown_segment_edges(am, &Segments[s]); } } // Find unnecessary lines (These are lines that don't have to be drawn because they have small curvature) for (i=0; i<=am->highest_edge_index; i++ ) { e = &am->edges[i]; if (!(e->flags&EF_USED)) continue; for (e1=0; e1<e->num_faces; e1++ ) { for (e2=1; e2<e->num_faces; e2++ ) { if ( (e1 != e2) && (e->segnum[e1] != e->segnum[e2]) ) { #ifdef COMPACT_SEGS vms_vector v1, v2; get_side_normal(&Segments[e->segnum[e1]], e->sides[e1], 0, &v1 ); get_side_normal(&Segments[e->segnum[e2]], e->sides[e2], 0, &v2 ); if ( vm_vec_dot(&v1,&v2) > (F1_0-(F1_0/10)) ) { #else if ( vm_vec_dot( &Segments[e->segnum[e1]].sides[e->sides[e1]].normals[0], &Segments[e->segnum[e2]].sides[e->sides[e2]].normals[0] ) > (F1_0-(F1_0/10)) ) { #endif e->flags &= (~EF_DEFINING); break; } } } if (!(e->flags & EF_DEFINING)) break; } } } char Marker_input [40]; int Marker_index=0; ubyte DefiningMarkerMessage=0; ubyte MarkerBeingDefined; ubyte LastMarkerDropped; void InitMarkerInput () { int maxdrop,i; //find free marker slot if (Game_mode & GM_MULTI) maxdrop=MAX_DROP_MULTI; else maxdrop=MAX_DROP_SINGLE; for (i=0;i<maxdrop;i++) if (MarkerObject[(Player_num*2)+i] == -1) //found free slot! break; if (i==maxdrop) //no free slot { if (Game_mode & GM_MULTI) i = !LastMarkerDropped; //in multi, replace older of two else { HUD_init_message_literal(HM_DEFAULT, "No free marker slots"); return; } } //got a free slot. start inputting marker message Marker_input[0]=0; Marker_index=0; DefiningMarkerMessage=1; MarkerBeingDefined = i; key_toggle_repeat(1); }