// // D_ProcessEvents // Send all the events of the given timestamp down the responder chain // void D_ProcessEvents (void) { event_t *ev; // [RH] If testing mode, do not accept input until test is over if (testingmode) { if (testingmode <= I_MSTime() * TICRATE / 1000) M_RestoreMode (); else M_ModeFlashTestText(); return; } for (; eventtail != eventhead ; eventtail = ++eventtail<MAXEVENTS ? eventtail : 0) { ev = &events[eventtail]; if (C_Responder (ev)) continue; // console ate the event if (M_Responder (ev)) continue; // menu ate the event G_Responder (ev); } }
void FGLRenderer::RenderView (player_t* player) { OpenGLFrameBuffer* GLTarget = static_cast<OpenGLFrameBuffer*>(screen); AActor *&LastCamera = GLTarget->LastCamera; checkBenchActive(); if (player->camera != LastCamera) { // If the camera changed don't interpolate // Otherwise there will be some not so nice effects. R_ResetViewInterpolation(); LastCamera=player->camera; } gl_RenderState.SetVertexBuffer(mVBO); GLRenderer->mVBO->Reset(); // reset statistics counters ResetProfilingData(); // Get this before everything else if (cl_capfps || r_NoInterpolate) r_TicFracF = 1.; else r_TicFracF = I_GetTimeFrac (&r_FrameTime); gl_frameMS = I_MSTime(); P_FindParticleSubsectors (); if (!gl.legacyMode) GLRenderer->mLights->Clear(); // NoInterpolateView should have no bearing on camera textures, but needs to be preserved for the main view below. bool saved_niv = NoInterpolateView; NoInterpolateView = false; // prepare all camera textures that have been used in the last frame FCanvasTextureInfo::UpdateAll(); NoInterpolateView = saved_niv; // now render the main view float fovratio; float ratio = WidescreenRatio; if (WidescreenRatio >= 1.3f) { fovratio = 1.333333f; } else { fovratio = ratio; } SetFixedColormap (player); // Check if there's some lights. If not some code can be skipped. TThinkerIterator<ADynamicLight> it(STAT_DLIGHT); GLRenderer->mLightCount = ((it.Next()) != NULL); sector_t * viewsector = RenderViewpoint(player->camera, NULL, FieldOfView.Degrees, ratio, fovratio, true, true); All.Unclock(); }
double I_GetTimeFrac(uint32* ms) { const uint32_t now = I_MSTime(); if (NULL != ms) { *ms = s_ticStart + 1000 / TICRATE; } return 0 == s_ticStart ? 1. : clamp<double>( (now - s_ticStart) * TICRATE / 1000., 0, 1); }
fixed_t I_GetTimeFrac(uint32* ms) { const uint32_t now = I_MSTime(); if (NULL != ms) { *ms = s_ticStart + 1000 / (TICRATE + ticAdjust); } return 0 == s_ticStart ? FRACUNIT : clamp<fixed_t>((now - s_ticStart) * FRACUNIT * (TICRATE + ticAdjust) / 1000, 0, FRACUNIT); }
// // [Toke - CTF] SV_FlagDrop // Event of a player dropping a flag // void SV_FlagDrop (player_t &player, flag_t f) { SV_CTFEvent (f, SCORE_DROP, player); int time_held = I_MSTime() - CTFdata[f].pickup_time; SV_BroadcastPrintf (PRINT_HIGH, "%s has dropped the %s flag (held for %s)\n", player.userinfo.netname, team_names[f], CTF_TimeMSG(time_held)); player.flags[f] = false; // take ex-carrier's flag CTFdata[f].flagger = 0; CTF_SpawnDroppedFlag (f, player.mo->x, player.mo->y, player.mo->z); }
// // SV_ValidToken // bool SV_IsValidToken(DWORD token) { QWORD now = I_MSTime() * TICRATE / 1000; for(size_t i = 0; i < connect_tokens.size(); i++) { if(connect_tokens[i].id == token && NET_CompareAdr(connect_tokens[i].from, net_from) && now - connect_tokens[i].issued < MAX_TOKEN_AGE) { // extend token life and confirm connect_tokens[i].issued = now; return true; } } return false; }
// // [Toke - CTF] SV_FlagGrab // Event of a player picking up a flag // void SV_FlagGrab (player_t &player, flag_t f, bool firstgrab) { player.flags[f] = true; CTFdata[f].flagger = player.id; CTFdata[f].state = flag_carried; CTFdata[f].pickup_time = I_MSTime(); if (player.userinfo.team != (team_t)f) { if (firstgrab) { SV_BroadcastPrintf (PRINT_HIGH, "%s has taken the %s flag\n", player.userinfo.netname, team_names[f]); SV_CTFEvent (f, SCORE_FIRSTGRAB, player); } else { SV_BroadcastPrintf (PRINT_HIGH, "%s picked up the %s flag\n", player.userinfo.netname, team_names[f]); SV_CTFEvent (f, SCORE_GRAB, player); } } else { SV_BroadcastPrintf (PRINT_HIGH, "%s is recovering the %s flag\n", player.userinfo.netname, team_names[f]); SV_CTFEvent (f, SCORE_MANUALRETURN, player); } }
// // [Toke - CTF] SV_FlagScore // Event of a player capturing the flag // void SV_FlagScore (player_t &player, flag_t f) { TEAMpoints[player.userinfo.team]++; SV_CTFEvent (f, SCORE_CAPTURE, player); int time_held = I_MSTime() - CTFdata[f].pickup_time; SV_BroadcastPrintf (PRINT_HIGH, "%s has captured the %s flag (held for %s)\n", player.userinfo.netname, team_names[f], CTF_TimeMSG(time_held)); player.flags[f] = false; // take scoring player's flag CTFdata[f].flagger = 0; CTF_SpawnFlag(f); // checks to see if a team won a game if(TEAMpoints[player.userinfo.team] >= sv_scorelimit && sv_scorelimit != 0) { SV_BroadcastPrintf (PRINT_HIGH, "%s team wins!\n", team_names[player.userinfo.team]); G_ExitLevel (0, 1); } }
// // SV_NewToken // DWORD SV_NewToken() { QWORD now = I_MSTime() * TICRATE / 1000; token_t token; token.id = rand()*time(0); token.issued = now; token.from = net_from; // find an old token to replace for(size_t i = 0; i < connect_tokens.size(); i++) { if(now - connect_tokens[i].issued >= MAX_TOKEN_AGE) { connect_tokens[i] = token; return token.id; } } connect_tokens.push_back(token); return token.id; }
// // I_GetTime // returns time in 1/35th second tics // QWORD I_GetTimePolled (void) { return (I_MSTime()*TICRATE)/1000; }
static inline float GetTimeFloat() { return (float)I_MSTime() * (float)TICRATE / 1000.0f; }
bool C_DoKey (event_t *ev, FKeyBindings *binds, FKeyBindings *doublebinds) { FString binding; bool dclick; int dclickspot; BYTE dclickmask; unsigned int nowtime; if (ev->type != EV_KeyDown && ev->type != EV_KeyUp) return false; if ((unsigned int)ev->data1 >= NUM_KEYS) return false; dclickspot = ev->data1 >> 3; dclickmask = 1 << (ev->data1 & 7); dclick = false; // This used level.time which didn't work outside a level. nowtime = I_MSTime(); if (doublebinds != NULL && DClickTime[ev->data1] > nowtime && ev->type == EV_KeyDown) { // Key pressed for a double click binding = doublebinds->GetBinding(ev->data1); DClicked[dclickspot] |= dclickmask; dclick = true; } else { if (ev->type == EV_KeyDown) { // Key pressed for a normal press binding = binds->GetBinding(ev->data1); DClickTime[ev->data1] = nowtime + 571; } else if (doublebinds != NULL && DClicked[dclickspot] & dclickmask) { // Key released from a double click binding = doublebinds->GetBinding(ev->data1); DClicked[dclickspot] &= ~dclickmask; DClickTime[ev->data1] = 0; dclick = true; } else { // Key released from a normal press binding = binds->GetBinding(ev->data1); } } if (binding.IsEmpty()) { binding = binds->GetBinding(ev->data1); dclick = false; } if (!binding.IsEmpty() && (chatmodeon == 0 || ev->data1 < 256)) { if (ev->type == EV_KeyUp && binding[0] != '+') { return false; } char *copy = binding.LockBuffer(); if (ev->type == EV_KeyUp) { copy[0] = '-'; } AddCommandString (copy, dclick ? ev->data1 | KEY_DBLCLICKED : ev->data1); return true; } return false; }
bool C_DoKey (event_t *ev) { FString binding; bool dclick; int dclickspot; BYTE dclickmask; if (ev->type != EV_KeyDown && ev->type != EV_KeyUp) return false; if ((unsigned int)ev->data1 >= NUM_KEYS) return false; dclickspot = ev->data1 >> 3; dclickmask = 1 << (ev->data1 & 7); dclick = false; // This used level.time which didn't work outside a level. if (DClickTime[ev->data1] > I_MSTime() && ev->type == EV_KeyDown) { // Key pressed for a double click binding = DoubleBindings[ev->data1]; DClicked[dclickspot] |= dclickmask; dclick = true; } else { if (ev->type == EV_KeyDown) { // Key pressed for a normal press binding = Bindings[ev->data1]; DClickTime[ev->data1] = I_MSTime() + 571; } else if (DClicked[dclickspot] & dclickmask) { // Key released from a double click binding = DoubleBindings[ev->data1]; DClicked[dclickspot] &= ~dclickmask; DClickTime[ev->data1] = 0; dclick = true; } else { // Key released from a normal press binding = Bindings[ev->data1]; } } if (binding.IsEmpty()) { binding = Bindings[ev->data1]; dclick = false; } // [BC] chatmodeon becomes CHAT_GetChatMode(). if (!binding.IsEmpty() && (( CHAT_GetChatMode( ) == CHATMODE_NONE ) || ev->data1 < 256)) { if (ev->type == EV_KeyUp && binding[0] != '+') { return false; } char *copy = binding.LockBuffer(); if (ev->type == EV_KeyUp) { copy[0] = '-'; } AddCommandString (copy, dclick ? ev->data1 | KEY_DBLCLICKED : ev->data1); return true; } return false; }
void Drawer() { Super::Drawer(); if (mCVar == NULL) return; int y = (-mDesc->mPosition + BigFont->GetHeight() + mDesc->mItems.Size() * OptionSettings.mLinespacing) * CleanYfac_1; int h = (screen->GetHeight() - y) / 16; int fh = OptionSettings.mLinespacing * CleanYfac_1; int w = fh; int yy = y; if (h > fh) h = fh; else if (h < 4) return; // no space to draw it. int indent = (screen->GetWidth() / 2); int p = 0; for(int i = 0; i < 16; i++, y += h) { int box_x, box_y; int x1; box_y = y - 2 * CleanYfac_1; box_x = indent - 16*w; for (x1 = 0; x1 < 16; ++x1, p++) { screen->Clear (box_x, box_y, box_x + w, box_y + h, p, 0); if ((mDesc->mSelectedItem == mStartItem+7) && (/*p == CurrColorIndex ||*/ (i == mGridPosY && x1 == mGridPosX))) { int r, g, b; DWORD col; double blinky; if (i == mGridPosY && x1 == mGridPosX) { r = 255, g = 128, b = 0; } else { r = 200, g = 200, b = 255; } // Make sure the cursors stand out against similar colors // by pulsing them. blinky = fabs(sin(I_MSTime()/1000.0)) * 0.5 + 0.5; col = MAKEARGB(255,int(r*blinky),int(g*blinky),int(b*blinky)); screen->Clear (box_x, box_y, box_x + w, box_y + 1, -1, col); screen->Clear (box_x, box_y + h-1, box_x + w, box_y + h, -1, col); screen->Clear (box_x, box_y, box_x + 1, box_y + h, -1, col); screen->Clear (box_x + w - 1, box_y, box_x + w, box_y + h, -1, col); } box_x += w; } } y = yy; DWORD newColor = MAKEARGB(255, int(mRed), int(mGreen), int(mBlue)); DWORD oldColor = DWORD(*mCVar) | 0xFF000000; int x = screen->GetWidth()*2/3; screen->Clear (x, y, x + 48*CleanXfac_1, y + 48*CleanYfac_1, -1, oldColor); screen->Clear (x + 48*CleanXfac_1, y, x + 48*2*CleanXfac_1, y + 48*CleanYfac_1, -1, newColor); y += 49*CleanYfac_1; screen->DrawText (SmallFont, CR_GRAY, x+(24-SmallFont->StringWidth("Old")/2)*CleanXfac_1, y, "Old", DTA_CleanNoMove_1, true, TAG_DONE); screen->DrawText (SmallFont, CR_WHITE, x+(48+24-SmallFont->StringWidth("New")/2)*CleanXfac_1, y, "New", DTA_CleanNoMove_1, true, TAG_DONE); }
void FStat::unclock() { last_elapsed = I_MSTime() - last_clock; }
void FStat::clock() { last_clock = I_MSTime(); }