static bool tcod_pauseForMilliseconds(short milliseconds) { TCOD_mouse_t mouse; TCOD_console_flush(); TCOD_sys_sleep_milli((unsigned int) milliseconds); /* FIXME: lag? never heard of it! */ int n; n = libwebsocket_service(context, 0); if (bufferedKey.vk == TCODK_NONE) { bufferedKey = TCOD_console_check_for_keypress(TCOD_KEY_PRESSED); } if (missedMouse.lmb == 0 && missedMouse.rmb == 0) { /* FIXME mouse input */ //mouse = TCOD_mouse_get_status(); if (mouse.lbutton_pressed || mouse.rbutton_pressed) { missedMouse.x = mouse.cx; missedMouse.y = mouse.cy; if (mouse.lbutton_pressed) missedMouse.lmb = MOUSE_DOWN; if (mouse.rbutton_pressed) missedMouse.rmb = MOUSE_DOWN; } } /* return true if a new input event is available */ return (bufferedKey.vk != TCODK_NONE || missedMouse.lmb || missedMouse.rmb); }
void TCOD_sys_flush(bool render) { static uint32 old_time,new_time=0, elapsed=0; int32 frame_time,time_to_wait; if ( render ) { TCOD_sys_console_to_bitmap(renderWindow,TCOD_console_get_width(NULL),TCOD_console_get_height(NULL),consoleBuffer,prevConsoleBuffer); sfRenderWindow_Display(renderWindow); } old_time=new_time; new_time=TCOD_sys_elapsed_milli(); if ( new_time / 1000 != elapsed ) { /* update fps every second */ fps=cur_fps; cur_fps=0; elapsed=new_time/1000; printf ("nbBlit : %d\n",(int)(nbBlit/fps));nbBlit=0; } /* if too fast, wait */ frame_time=(new_time - old_time); last_frame_length = frame_time * 0.001f; cur_fps++; time_to_wait=min_frame_length-frame_time; if (old_time > 0 && time_to_wait > 0) { TCOD_sys_sleep_milli(time_to_wait); new_time = TCOD_sys_elapsed_milli(); frame_time=(new_time - old_time); } last_frame_length = frame_time * 0.001f; }
void TCOD_sys_flush(bool render) { static uint32 old_time,new_time=0, elapsed=0; int32 frame_time,time_to_wait; if ( render ) { TCOD_sys_console_to_bitmap(screen,TCOD_console_get_width(NULL),TCOD_console_get_height(NULL),consoleBuffer, prevConsoleBuffer); if ( TCOD_sdl_renderer ) { TCOD_sdl_renderer((void *)screen); } SDL_Flip(screen); } old_time=new_time; new_time=TCOD_sys_elapsed_milli(); if ( new_time / 1000 != elapsed ) { /* update fps every second */ fps=cur_fps; cur_fps=0; elapsed=new_time/1000; } /* if too fast, wait */ frame_time=(new_time - old_time); last_frame_length = frame_time * 0.001f; cur_fps++; time_to_wait=min_frame_length-frame_time; if (old_time > 0 && time_to_wait > 0) { TCOD_sys_sleep_milli(time_to_wait); new_time = TCOD_sys_elapsed_milli(); frame_time=(new_time - old_time); } last_frame_length = frame_time * 0.001f; }
static boolean tcod_pauseForMilliseconds(short milliseconds) { TCOD_mouse_t mouse; TCOD_console_flush(); TCOD_sys_sleep_milli((unsigned int) milliseconds); #ifdef USE_NEW_TCOD_API if (bufferedKey.vk == TCODK_NONE) { TCOD_sys_check_for_event(TCOD_EVENT_KEY_PRESS | TCOD_EVENT_MOUSE, &bufferedKey, &mouse); } else { TCOD_sys_check_for_event(TCOD_EVENT_MOUSE, 0, &mouse); } #else if (bufferedKey.vk == TCODK_NONE) { bufferedKey = TCOD_console_check_for_keypress(TCOD_KEY_PRESSED); } #endif if (missedMouse.lmb == 0 && missedMouse.rmb == 0) { mouse = TCOD_mouse_get_status(); if (mouse.lbutton_pressed || mouse.rbutton_pressed) { missedMouse.x = mouse.cx; missedMouse.y = mouse.cy; if (mouse.lbutton_pressed) missedMouse.lmb = MOUSE_DOWN; if (mouse.rbutton_pressed) missedMouse.rmb = MOUSE_DOWN; } } return (bufferedKey.vk != TCODK_NONE || missedMouse.lmb || missedMouse.rmb); }
TCOD_key_t TCOD_sys_wait_for_keypress(bool flush) { sfEvent event; TCOD_key_t ret={TCODK_NONE,0}; if ( flush ) { while ( sfRenderWindow_GetEvent(renderWindow, &event) ) { if (event.Type == sfEvtClosed) { sfRenderWindow_Close(renderWindow); return ret; } TCOD_sys_SFMLtoTCOD(&event,0); } } do { while ( !sfRenderWindow_GetEvent(renderWindow, &event) ) { TCOD_sys_sleep_milli(10); } ret = TCOD_sys_SFMLtoTCOD(&event,TCOD_KEY_PRESSED); } while ( ret.vk == TCODK_NONE && event.Type != sfEvtClosed ); if (event.Type == sfEvtClosed) sfRenderWindow_Close(renderWindow); return ret; }
void TCODSystem::sleepMilli(uint32 milliseconds) { TCOD_sys_sleep_milli(milliseconds); }
static void tcod_nextKeyOrMouseEvent(rogueEvent *returnEvent, boolean textInput, boolean colorsDance) { boolean tryAgain; TCOD_key_t key; TCOD_mouse_t mouse; uint32 theTime, waitTime; short x, y; TCOD_console_flush(); key.vk = TCODK_NONE; if (noMenu && rogue.nextGame == NG_NOTHING) rogue.nextGame = NG_NEW_GAME; for (;;) { theTime = TCOD_sys_elapsed_milli(); if (TCOD_console_is_window_closed()) { rogue.gameHasEnded = true; // causes the game loop to terminate quickly rogue.nextGame = NG_QUIT; // causes the menu to drop out immediately returnEvent->eventType = KEYSTROKE; returnEvent->param1 = ESCAPE_KEY; return; } tryAgain = false; if (bufferedKey.vk != TCODK_NONE) { rewriteKey(&bufferedKey, textInput); if (processKeystroke(bufferedKey, returnEvent, textInput)) { bufferedKey.vk = TCODK_NONE; return; } else { bufferedKey.vk = TCODK_NONE; } } if (missedMouse.lmb) { returnEvent->eventType = missedMouse.lmb; returnEvent->param1 = missedMouse.x; returnEvent->param2 = missedMouse.y; if (TCOD_console_is_key_pressed(TCODK_CONTROL)) { returnEvent->controlKey = true; } if (TCOD_console_is_key_pressed(TCODK_SHIFT)) { returnEvent->shiftKey = true; } missedMouse.lmb = missedMouse.lmb == MOUSE_DOWN ? MOUSE_UP : 0; return; } if (missedMouse.rmb) { returnEvent->eventType = missedMouse.rmb == MOUSE_DOWN ? RIGHT_MOUSE_DOWN : RIGHT_MOUSE_UP; returnEvent->param1 = missedMouse.x; returnEvent->param2 = missedMouse.y; if (TCOD_console_is_key_pressed(TCODK_CONTROL)) { returnEvent->controlKey = true; } if (TCOD_console_is_key_pressed(TCODK_SHIFT)) { returnEvent->shiftKey = true; } missedMouse.rmb = missedMouse.rmb == MOUSE_DOWN ? MOUSE_UP : 0; return; } if (!(serverMode || (SDL_GetAppState() & SDL_APPACTIVE))) { TCOD_sys_sleep_milli(100); } else { if (colorsDance) { shuffleTerrainColors(3, true); commitDraws(); } TCOD_console_flush(); } #ifdef USE_NEW_TCOD_API TCOD_sys_check_for_event(TCOD_EVENT_KEY_PRESS | TCOD_EVENT_MOUSE, &key, &mouse); #else key = TCOD_console_check_for_keypress(TCOD_KEY_PRESSED); #endif rewriteKey(&key, textInput); if (processKeystroke(key, returnEvent, textInput)) { return; } mouse = TCOD_mouse_get_status(); if (serverMode || (SDL_GetAppState() & SDL_APPACTIVE)) { x = mouse.cx; y = mouse.cy; } else { x = 0; y = 0; } if ( mouse.lbutton_pressed || mouse.rbutton_pressed || mouse.lbutton != brogueMouse.lmb || mouse.rbutton != brogueMouse.rmb || brogueMouse.x !=x || brogueMouse.y != y) { returnEvent->param1 = x; returnEvent->param2 = y; getModifiers(returnEvent); if (mouse.lbutton_pressed) { if (!brogueMouse.lmb) { // we missed a mouseDown event -- better make up for it! missedMouse.x = x; missedMouse.y = y; missedMouse.lmb = MOUSE_UP; returnEvent->eventType = MOUSE_DOWN; } else { returnEvent->eventType = MOUSE_UP; } } else if (mouse.lbutton && !brogueMouse.lmb) { returnEvent->eventType = MOUSE_DOWN; } else { returnEvent->eventType = MOUSE_ENTERED_CELL; } if (mouse.rbutton_pressed) { if (!brogueMouse.rmb) { // we missed a mouseDown event -- better make up for it! missedMouse.x = x; missedMouse.y = y; missedMouse.rmb = MOUSE_UP; returnEvent->eventType = RIGHT_MOUSE_DOWN; } else { returnEvent->eventType = RIGHT_MOUSE_UP; } } else if (mouse.rbutton && !brogueMouse.rmb) { returnEvent->eventType = RIGHT_MOUSE_DOWN; } brogueMouse.x = x; brogueMouse.y = y; brogueMouse.lmb = mouse.lbutton; brogueMouse.rmb = mouse.rbutton; if (returnEvent->eventType == MOUSE_ENTERED_CELL && !hasMouseMoved) { hasMouseMoved = true; } else { return; } } waitTime = PAUSE_BETWEEN_EVENT_POLLING + theTime - TCOD_sys_elapsed_milli(); if (waitTime > 0 && waitTime <= PAUSE_BETWEEN_EVENT_POLLING) { TCOD_sys_sleep_milli(waitTime); } } }