1
0
Fork 0
forked from Simnation/Main
Main/resources/[jobs]/[police]/helicam/html/script.js
2025-06-07 08:51:21 +02:00

203 lines
6.4 KiB
JavaScript

window.onload = (e) => {
window.addEventListener('message', onMessageRecieved);
};
let config = {
timeFormat: 0,
dateFormat: 0
};
let lastZoomBarLength = 243; // (243px, default for 1920:1080)
const months = {
1: 'JAN', 2: 'FEB', 3: 'MAR', 4: 'APR', 5: 'MAY', 6: 'JUN', 7: 'JUL', 8: 'AUG', 9: 'SEP', 10: 'OCT', 11: 'NOV', 12: 'DEC'
};
function FormatDate(day, month, year) {
let date;
switch(config.dateFormat) {
case 0:
date = month+"/"+day+"/"+year.slice(-2); // 0 = MM/DD/YY
break;
case 1:
date = day+"/"+month+"/"+year.slice(-2); // 1 = DD/MM/YY
break;
case 2:
date = year.slice(-2)+"/"+month+"/"+day; // 2 = YY/MM/DD
break;
case 3:
date = day+"-"+months[month]+"-"+year; // 2 = DD-Mon-YYYY
break;
default:
console.log("Error: date format was invalid!");
}
$("#date").text(date);
};
function UpdateZuluTime() {
const date = new Date();
const hours = date.getUTCHours().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
const minutes = date.getUTCMinutes().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
const seconds = date.getUTCSeconds().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
const time = hours+":"+minutes+":"+seconds+" Z";
$("#time").text(time);
const day = date.getUTCDate().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
let month = date.getUTCMonth()+1; month = month.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
const year = date.getUTCFullYear().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
FormatDate(day, month, year);
};
function UpdateOSTime() {
const date = new Date();
let hours = date.getHours().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
let minutes = date.getMinutes().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
let seconds = date.getSeconds().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
let time = hours+":"+minutes+":"+seconds
$("#time").text(time);
};
function UpdateOSDate() {
const date = new Date();
const day = date.getDate().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
let month = date.getMonth()+1; month = month.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
const year = date.getFullYear().toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false });
FormatDate(day, month, year);
};
function onMessageRecieved(event) {
let data = event.data;
if (data != undefined) {
switch(data.action) {
case 'updateData':
$.each(data.set, function(id, value) {
$("#"+id).text(value);
});
// Show/hide/change license plate
if (data.info.numberplate == false) {
$("#numberplate-wrapper").hide();
} else if (data.info.numberplate != undefined) {
$("#ta-numberplate").text(data.info.numberplate);
if (!$("#numberplate-wrapper").is(":visible")) {
$("#numberplate-wrapper").show();
};
};
// Handle time and date
if (data.info.time) {
UpdateOSDate();
$("#time").text(data.info.time);
} else {
if (config.timeFormat == 0) {
UpdateZuluTime();
} else {
UpdateOSTime();
UpdateOSDate();
};
};
break;
case 'updateDataFrame':
// Camera Pitch
$('#pitch-line').css('transform', 'rotate(' + data.pitch + 'deg)');
// Camera Relative Heading
$('#heading-line').css('transform', 'rotate(' + data.heading + 'deg)');
// Bearing
$('#bearing-img').attr('src', 'images/bearing.svg#svgView(viewBox(' + (data.bearing - 89) + ', 0, 180, 8))');
$('#bearing-directions').attr('src', 'images/bearing-directions.svg#svgView(viewBox(' + (data.bearing - 90) + ', 0, 180, 10))');
break;
case 'setVisionState':
$("#vision-state").text(data.state); // Sets text in bottom left corner
break;
case 'setZoomBarLevel':
let barLength = $("#zoom-bar").width() || lastZoomBarLength;
let barPercent = barLength / 100;
if (barLength != lastZoomBarLength) {
lastZoomBarLength = barLength;
};
barLength = barLength - barPercent * 17.5 // Reduce the bar length by 17.5% to compensate for overflow
let pixels = barLength / 100 * data.percentage + barPercent * 5;
$("#zoom-arrow").css("margin-left", pixels + "px");
break;
case 'open':
$("#wrapper").show();
break;
case 'close':
$("#wrapper").hide();
break;
case 'startLockScanning':
$("#lock-bar-container").show();
$("#lock-bar-progress").stop().css({"width": 0}).animate({
width: 11 +'%'
}, {
duration: parseInt(200),
});
break;
case 'updateLockScanning':
const end = data.value * 10 + 1
$("#lock-bar-progress").stop().animate({
width: end+'%'
}, {
duration: parseInt(200),
easing : "linear"
});
break;
case 'lockScanningFinished':
$("#lock-bar-container").hide();
break;
case 'setCameraLockState':
if (data.state == true) {
$("#lock-state").addClass("lock-state-active");
} else {
$("#lock-state").removeClass("lock-state-active");
};
$("#lock-type").text(data.type);
break;
case 'setCameraLabel':
$("#camera-label").text(data.label);
break;
case 'setConfigData':
$.each(data.set, function(id, value) {
$("#"+id).text(value);
});
if (data.showLatitudeLongitude == true) {
$("#hi-latitude").show();
$("#hi-longitude").show();
$("#ta-latitude").show();
$("#ta-longitude").show();
} else {
$(".street").css('display', 'inline-block');
};
if (data.showLicensePlate == false) {
$("#numberplate-wrapper").hide();
};
if (data.hideMinimap == false) {
$("#camera-info").css("bottom", data.zoomBarOffset+"%");
};
if (data.showInstructions == true) {
$("#relative-info").css("bottom", "6%");
if (data.hideMinimap == true) {
$("#camera-info").css("bottom", "6%");
};
};
config.timeFormat = data.timeFormat;
config.dateFormat = data.dateFormat;
break;
default:
console.log("Error: spesifed action was not found!", data.action);
}
} else {
console.log("Error: data was not defined!");
};
};