static inline void run_tick() { input_poll(); // input handling for a few global things if (justpushed(ESCKEY)) { if (settings->instant_quit) { game.running = false; } else if (!game.paused) // no pause from Options { game.pause(GP_PAUSED); } } else if (justpushed(F3KEY)) { game.pause(GP_OPTIONS); } // freeze frame game.tick(); Replay::DrawStatus(); org_run(); //platform_sync_to_vblank(); screen->Flip(); memcpy(lastinputs, inputs, sizeof(lastinputs)); }
int SDL_main(int argc, char *argv[]) { stat("Entering main loop"); testblit(); if (SSInit()) return 1; if (pxt_init()) return 1; if (pxt_LoadSoundFX(pxt_dir, sndcache, 0x75)) { printf("Can't load\n"); return 1; } if (org_init(org_wavetable, pxt_dir, ORG_VOLUME)) { staterr("Music failed to initialize"); return 1; } music(19); while(!quitting) { org_run(); SDL_Event pie; if (SDL_PollEvent(&pie)) { if (pie.type == SDL_KEYDOWN) { if(pie.key.keysym.sym == SDLK_F3) quitting = true; else if(pie.key.keysym.sym == SDLK_BTN_A) pxt_Play(-1, 1, 1); else if(pie.key.keysym.sym == SDLK_BTN_B) org_stop(); else if(pie.key.keysym.sym == SDLK_BTN_Y) music(random(1,42)); } } } pxt_freeSoundFX(); SSClose(); return 0; }
void org_test_miniloop(void) { uint32_t start = 0, curtime; uint32_t counter; stat("Starting org test"); font_draw(5, 5, "ORG test in progress...", 0, &greenfont); font_draw(5, 15, "Logging statistics to nx.log", 0, &greenfont); font_draw(5, 25, "Press any button to quit", 0, &greenfont); screen->Flip(); music_set_enabled(1); music(32); last_sdl_key = -1; for(;;) { org_run(); if (++counter > 1024) { counter = 0; curtime = SDL_GetTicks(); if ((curtime - start) >= 100) { start = curtime; input_poll(); if (last_sdl_key != -1) return; } } } }
static inline void run_tick() { static bool can_tick = true; static bool last_freezekey = false; static bool last_framekey = false; static int frameskip = 0; input_poll(); // input handling for a few global things if (justpushed(ESCKEY)) { if (settings->instant_quit) { game.running = false; } else if (!game.paused) // no pause from Options { game.pause(GP_PAUSED); } } else if (justpushed(F3KEY)) { game.pause(GP_OPTIONS); } // freeze frame if (settings->enable_debug_keys) { if (inputs[FREEZE_FRAME_KEY] && !last_freezekey) { can_tick = true; freezeframe ^= 1; framecount = 0; } if (inputs[FRAME_ADVANCE_KEY] && !last_framekey) { can_tick = true; if (!freezeframe) { freezeframe = 1; framecount = 0; } } last_freezekey = inputs[FREEZE_FRAME_KEY]; last_framekey = inputs[FRAME_ADVANCE_KEY]; } // fast-forward key (F5) if (inputs[FFWDKEY] && (settings->enable_debug_keys || Replay::IsPlaying())) { game.ffwdtime = 2; } if (can_tick) { game.tick(); if (freezeframe) { char buf[1024]; sprintf(buf, "[] Tick %d", framecount++); font_draw_shaded(4, (SCREEN_HEIGHT-GetFontHeight()-4), buf, 0, &greenfont); can_tick = false; } else { Replay::DrawStatus(); } if (settings->show_fps) { update_fps(); } if (!flipacceltime) { //platform_sync_to_vblank(); screen->Flip(); } else { flipacceltime--; if (--frameskip < 0) { screen->Flip(); frameskip = 256; } } memcpy(lastinputs, inputs, sizeof(lastinputs)); } else { // frame is frozen; don't hog CPU SDL_Delay(20); } // immediately after a game tick is when we have the most amount of time before // the game needs to run again. so now's as good a time as any for some // BGM audio processing, wouldn't you say? org_run(); }