Files
StickExporterTX/src/components/progressController.ts

92 lines
2.6 KiB
TypeScript

import {setProgress} from "../renderer";
import {getLogSize} from "./logReader";
import {getInOutSettings} from "./settings";
import { setRenderDisplayProgress, setPastTimeNow, setRemainingTimeNow } from "./ui/renderingPage";
const estimatedRenderPortion = 0.97;
const renderInfo = {
time: "0min 0sec",
startTime: 0,
endTime: 0
}
let logPortionList:number[] = [];
let currentLogPortion = 0;
function setRenderProgress(log:number, init:boolean, frameCount:number, frame:number) {
let progress = 0;
if(init) {
progress = logPortionList[log-1] * (frame / frameCount * (1 - estimatedRenderPortion)) + currentLogPortion;
} else {
progress = logPortionList[log-1] * (frame / frameCount * estimatedRenderPortion + (1 - estimatedRenderPortion)) + currentLogPortion;
}
setProgress(progress);
setRenderDisplayProgress(parseFloat((progress*100).toFixed(2)));
const timeNow = new Date().getTime();
const timeDiff = timeNow - renderInfo.startTime;
let timeDiffSeconds = timeDiff / 1000;
let timeDiffMinutes = 0;
while(timeDiffSeconds > 60) {
timeDiffMinutes++;
timeDiffSeconds -= 60;
}
renderInfo.time = timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s";
setPastTimeNow(renderInfo.time);
if(progress > 0) {
const timeRemaining = (timeDiff / progress) * (1 - progress);
timeDiffSeconds = timeRemaining / 1000;
timeDiffMinutes = 0;
while(timeDiffSeconds > 60) {
timeDiffMinutes++;
timeDiffSeconds -= 60;
}
setRemainingTimeNow(timeDiffMinutes + "m " + timeDiffSeconds.toFixed(0) + "s");
}
}
function resetRenderProgress() {
logPortionList = [];
currentLogPortion = 0;
const logSizeList:number[] = [];
getInOutSettings().logs.forEach(function (value, index) {
logSizeList.push(getLogSize(index));
});
let fullLogSize = 0;
for(let i = 0; i < logSizeList.length; i++) {
fullLogSize += logSizeList[i];
}
logSizeList.forEach(function (value) {
logPortionList.push(value / fullLogSize);
});
setPastTimeNow("0min 0sec");
setRemainingTimeNow("calculating...");
}
function setLog(log:number) {
currentLogPortion += logPortionList[log-2];
}
function stopProgress() {
renderInfo.endTime = new Date().getTime();
}
function startProgress() {
renderInfo.startTime = new Date().getTime();
resetRenderProgress();
}
export {
setRenderProgress,
resetRenderProgress,
setLog,
stopProgress,
startProgress,
renderInfo
}