blob: be50fd7608588ca3635118d2adc8b674fb009f23 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
function compute()
{
/* Initiate basic time variables */
let hours = 0;
let minutes = 0;
let seconds = 0;
let milliseconds = 0;
/*
* Get framerate, start frame, and end frame from corresponding elements
* Double check they all have a value
*/
let frameRate = parseInt(document.getElementById('framerate').value);
let startFrame = document.getElementById('startobj').value;
let endFrame = document.getElementById('endobj').value;
if (typeof (startFrame) === 'undefined' || endFrame === 'undefined' || framerate === 'undefined')
return;
/* Calculate framerate */
let frames = (endFrame - startFrame) * frameRate;
seconds = Math.floor(frames / frameRate);
frames = frames % frameRate;
milliseconds = Math.round(frames / frameRate * 1000);
if (milliseconds < 10)
milliseconds = '00' + milliseconds;
else if (milliseconds < 100)
milliseconds = '0' + milliseconds;
if (seconds >= 60) {
minutes = Math.floor(seconds / 60);
seconds = seconds % 60;
seconds = seconds < 10 ? '0' + seconds : seconds;
}
if (minutes >= 60) {
hours = Math.floor(minutes / 60);
minutes = minutes % 60;
minutes = minutes < 10 ? '0' + minutes : minutes;
}
/* Show the time and mod message in the DOM */
let finalTime = hours.toString() + 'h ' + minutes.toString() + 'm ' + seconds.toString() + 's ' + milliseconds.toString() + 'ms';
let modMessage = `Mod Note: Retimed (Start: ${parseFloat(startFrame).toFixed(3)}, End: ${parseFloat(endFrame).toFixed(3)}, FPS: ${frameRate}, Total Time: ${finalTime})`;
document.getElementById('time').value = finalTime;
document.getElementById('modMessage').disabled = false;
document.getElementById('modMessage').innerText = modMessage;
document.getElementById("modMessageButton").disabled = false;
}
/* Allow user to copy mod message to clipboard */
function copyModMessage()
{
const textArea = document.getElementById('modMessage');
textArea.focus();
textArea.select();
document.execCommand('copy');
alert(`The mod message has been copied to clipboard! Please paste it into the comment of the run you are verifying.`);
}
/* If framerate is invalid, show an error message and disable start and end frame fields */
const validateFPS = (event) => {
if (event.target.value === '' || parseInt(event.target.value) <= 0 || isNaN(parseInt(event.target.value))) {
document.getElementById('framerate').setCustomValidity('Please enter a valid framerate.');
document.getElementById('framerate').reportValidity();
document.getElementById('startobj').disabled = true;
document.getElementById('endobj').disabled = true;
document.getElementById('computeButton').disabled = true;
} else {
document.getElementById('startobj').disabled = false;
document.getElementById('endobj').disabled = false;
document.getElementById('computeButton').disabled = false;
}
}
const parseForTime = (event) => {
/* Get current frame from input field (either start time or end time) */
let frameFromInputText = (JSON.parse(event.target.value)).lct;
if (typeof frameFromInputText !== 'undefined') {
/* Get the framerate */
let frameRate = parseInt(document.getElementById('framerate').value);
/* Calculate the frame */
let frameFromObj = (time, fps) => Math.floor(time * fps) / fps; //round to the nearest frame
let finalFrame = frameFromObj(frameFromInputText, frameRate);
/* Update the DOM */
document.getElementById(event.target.id).value = `${finalFrame}`;
}
}
|