void Gource::logic(float t, float dt) { if(draw_loading) return; if(splash>0.0) splash -= dt; //init log file if(commitlog == 0) { commitlog = determineFormat(logfile); if(commitlog == 0) { //if not in a git dir and no log file, show help if(logfile.size() == 0 || logfile == ".") { SDL_Quit(); gource_help(""); } else if(SDLAppDirExists(logfile)) { gource_quit("Directory not supported."); } else { gource_quit("Unsupported log format. You may need to regenerate your log file."); } } if(start_position>0.0) { seekTo(start_position); } } slider.logic(dt); //still want to update camera while paused if(paused) { updateCamera(dt); return; } // get more entries if(commitqueue.size() == 0) { readLog(); } //loop in attempt to find commits if(commitqueue.size()==0 && commitlog->isSeekable() && gGourceFileLoop) { first_read=true; seekTo(0.0); readLog(); } if(currtime==0 && commitqueue.size()) { currtime = commitqueue[0].timestamp; subseconds = 0.0; } //set current time float time_inc = (dt * 86400.0 * gGourceDaysPerSecond); int seconds = (int) time_inc; subseconds += time_inc - ((float) seconds); if(subseconds >= 1.0) { currtime += (int) subseconds; subseconds -= (int) subseconds; } currtime += seconds; // delete files for(std::vector<RFile*>::iterator it = gGourceRemovedFiles.begin(); it != gGourceRemovedFiles.end(); it++) { deleteFile(*it); } gGourceRemovedFiles.clear(); //add commits up until the current time while(commitqueue.size() > 0) { RCommit commit = commitqueue[0]; if(gGourceAutoSkipSeconds>=0.0 && idle_time >= gGourceAutoSkipSeconds) { currtime = commit.timestamp; idle_time = 0.0; } if(commit.timestamp > currtime) break; processCommit(commit, t); currtime = commit.timestamp; subseconds = 0.0; commitqueue.pop_front(); } //reset loop counters gGourceUserInnerLoops = 0; gGourceDirNodeInnerLoops = 0; gGourceFileInnerLoops = 0; interactUsers(); interactDirs(); updateUsers(t, dt); updateDirs(dt); updateCamera(dt); updateTime(); }
void Gource::logic(float t, float dt) { dt = std::min(dt, gGourceMaxDelta); if(draw_loading) return; if(splash>0.0) splash -= dt; //init log file if(commitlog == 0) { commitlog = determineFormat(logfile); if(commitlog == 0) { printf("unsupported log file or directory not supported\n", logfile.c_str()); exit(1); } if(start_position>0.0) { seekTo(start_position); } } slider.logic(dt); if(paused) return; elapsed_time += dt * 86400.0 * gGourceDaysPerSecond; // get more entries if(commitqueue.size() == 0) { readLog(); } //loop in attempt to find commits if(commitqueue.size()==0 && commitlog->isSeekable()) { seekTo(0.0); readLog(); if(commitqueue.size() == 0 && starttime==0) { debugLog("no commits and starttime is not defined - cant continue\n"); exit(1); } } if(starttime==0) { starttime = commitqueue[0].timestamp; } //set current time currtime = starttime + elapsed_time; float csubsec = elapsed_time - floorf(elapsed_time); // delete files for(std::vector<RFile*>::iterator it = gGourceRemovedFiles.begin(); it != gGourceRemovedFiles.end(); it++) { deleteFile(*it); } gGourceRemovedFiles.clear(); //add commits up until the current time while(commitqueue.size() > 0) { RCommit commit = commitqueue[0]; if(gGourceAutoSkipSeconds>=0.0 && idle_time >= gGourceAutoSkipSeconds) { currtime = commit.timestamp; elapsed_time = commit.timestamp - starttime; idle_time = 0.0; } if(commit.timestamp > currtime) break; processCommit(commit); commitqueue.pop_front(); } //reset loop counters gGourceUserInnerLoops = 0; gGourceDirNodeInnerLoops = 0; gGourceFileInnerLoops = 0; interactUsers(); interactDirs(); updateUsers(dt); updateDirs(dt); updateTime(); }