const applyGradientTextEffect = (element, color, screen) => {
if (color === "red" && screen === 3) {
element.style.background = 'linear-gradient(to right, rgba(195, 7, 63, 0.6), #f83d3dcb, #f83d3dcb, rgba(195, 7, 63, 0.6))';
element.style.textShadow = '0 0 5px rgba(243, 33, 33, 0.199), 0 0 10px rgba(243, 33, 33, 0.199), 0 0 15px rgba(243, 33, 33, 0.199), 0 0 20px rgba(243, 33, 33, 0.199), 0 0 25px rgba(243, 33, 33, 0.199), 0 0 40px rgba(243, 33, 33, 0.199)';
element.style.webkitTextFillColor = 'transparent';
element.style.webkitBackgroundClip = 'text';
return;
}
if (color === "blue" && screen === 3) {
element.style.background = 'linear-gradient(to right, rgba(7, 63, 195, 0.6), #3d3df8cb, #3d3df8cb, rgba(7, 63, 195, 0.6))';
element.style.textShadow = '0 0 5px rgba(33, 33, 243, 0.199), 0 0 10px rgba(33, 33, 243, 0.199), 0 0 15px rgba(33, 33, 243, 0.199), 0 0 20px rgba(33, 33, 243, 0.199), 0 0 25px rgba(33, 33, 243, 0.199), 0 0 40px rgba(33, 33, 243, 0.199)';
element.style.webkitTextFillColor = 'transparent';
element.style.webkitBackgroundClip = 'text';
return;
}
if (!color.startsWith('#')) {
color = colorNameToHex(color);
}
const hexColor = color.slice(1);
const r = parseInt(hexColor.substr(0, 2), 16);
const g = parseInt(hexColor.substr(2, 2), 16);
const b = parseInt(hexColor.substr(4, 2), 16);
if (screen === 3) {
const lighterColor = `rgba(${r}, ${g}, ${b}, 0.3)`;
const darkerColor = `rgba(${Math.max(r - 30, 0)}, ${Math.max(g - 30, 0)}, ${Math.max(b - 30, 0)}, 1)`;
element.style.background = `linear-gradient(to right, ${lighterColor}, ${darkerColor}, ${darkerColor}, ${lighterColor})`;
element.style.textShadow = `0 0 5px rgba(${r}, ${g}, ${b}, 0.4), 0 0 10px rgba(${r}, ${g}, ${b}, 0.4), 0 0 15px rgba(${r}, ${g}, ${b}, 0.4), 0 0 20px rgba(${r}, ${g}, ${b}, 0.4), 0 0 25px rgba(${r}, ${g}, ${b}, 0.4), 0 0 40px rgba(${r}, ${g}, ${b}, 0.4)`;
} else if (screen === 5) {
const darkerColor = `rgba(${Math.max(r - 30, 0)}, ${Math.max(g - 30, 0)}, ${Math.max(b - 30, 0)}, 1)`;
element.style.background = `linear-gradient(to top, ${darkerColor} 0%, rgba(${r}, ${g}, ${b}, 0) 6%)`;
element.style.webkitTextStroke = `1px rgba(${r}, ${g}, ${b}, 1.0)`;
element.style.textShadow = `0 0 10px rgba(${r}, ${g}, ${b}, 0.2), 0 0 20px rgba(${r}, ${g}, ${b}, 0.2), 0 0 30px rgba(${r}, ${g}, ${b}, 0.2), 0 0 40px rgba(${r}, ${g}, ${b}, 0.2), 0 0 50px rgba(${r}, ${g}, ${b}, 0.2), 0 0 60px rgba(${r}, ${g}, ${b}, 0.2), 0 0 70px rgba(${r}, ${g}, ${b}, 0.2), 0 0 80px rgba(${r}, ${g}, ${b}, 0.2), 0 0 90px rgba(${r}, ${g}, ${b}, 0.2), 0 0 100px rgba(${r}, ${g}, ${b}, 0.2), 50px 50px 110px rgba(${r}, ${g}, ${b}, 0.2), -50px -50px 110px rgba(${r}, ${g}, ${b}, 0.2)`;
}
element.style.webkitTextFillColor = 'transparent';
element.style.webkitBackgroundClip = 'text';
element.style.backgroundClip = 'text';
}
const displayScreenThree = (data, color) => {
Object.assign(elements.container.style, { bottom: "5%", top: "20%" });
Object.assign(elements.emsCounter.style, {
display: "block",
top: "10px",
left: "50%",
transform: "translateX(-50%)",
textAlign: "center"
});
adjustEMS(data.emsOnline, color, data.showCount);
Object.assign(elements.timerContainer.style, {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
marginBottom: '20px'
});
applyGradientTextEffect(elements.dyingHeader, color, 3);
elements.dyingHeader.style.fontSize = "1.4rem";
elements.dyingHeader.style.fontWeight = "bolder";
elements.timerBoxes.forEach(element => {
Object.assign(element.style, {
backgroundColor: "#333",
padding: "10px",
borderRadius: "5px",
margin: "0 5px",
display: "flex"
});
});
elements.timerSeparator.innerHTML = ":";
elements.timerHeader.innerHTML = translationStrings.player_hurt_find_help_or_ems;
Object.assign(elements.timerHeader.style, {
fontWeight: "normal",
color: "rgb(185, 185, 185)",
marginBottom: "1.2%",
fontSize: ".8rem"
});
elements.timerSubheader.innerHTML = translationStrings.player_hurt_time_to_live;
Object.assign(elements.timerSubheader.style, {
marginBottom: "2%",
marginTop: "1%",
fontWeight: "bold",
fontSize: ".8rem"
});
elements.emergencyText.innerHTML = "";
elements.body.style.backgroundColor = 'rgba(0, 0, 0, 0.329)';
updateTimerDisplay(data.counter);
const minutes = Math.floor(data.counter / 60);
const seconds = data.counter % 60;
elements.minuteTens.innerHTML = Math.floor(minutes / 10);
elements.minuteOnes.innerHTML = minutes % 10;
elements.secondTens.innerHTML = Math.floor(seconds / 10);
elements.secondOnes.innerHTML = seconds % 10;
elements.container.style.display = 'flex';
};
const displayScreenFour = (data, color) => {
elements.online.innerHTML = translationStrings.currently_online + data.emsOnline;
Object.assign(elements.emsCounter.style, {
display: "block",
top: "10px",
left: "50%",
transform: "translateX(-50%)",
textAlign: "center"
});
adjustEMS(data.emsOnline, color, data.showCount);
elements.timer.style.padding = "1%";
elements.timer.style.color = color !== "red" ? color : '';
elements.dyingHeader.innerHTML = translationStrings.player_hurt_critical.toUpperCase();
elements.dyingHeader.classList.add("fading-text");
elements.dyingHeader.style.fontSize = ".9rem";
elements.dyingHeader.style.fontWeight = "500";
elements.dyingHeader.style.backgroundColor = color !== "red" ? color : 'red';
elements.dyingHeader.style.padding = "5px";
Object.assign(elements.timerHeader.style, {
fontWeight: "normal",
color: "rgb(185, 185, 185)",
fontSize: ".8rem"
});
elements.timerHeader.innerHTML = translationStrings.player_hurt_find_help_or_ems;
Object.assign(elements.timerSubheader.style, {
marginTop: "1%",
fontWeight: "450",
fontSize: ".8rem"
});
elements.timerSubheader.innerHTML = translationStrings.player_hurt_time_to_live;
Object.assign(elements.container.style, { bottom: "5%", top: "75%" });
elements.emergencyText.innerHTML = "";
elements.body.style.backgroundColor = 'rgba(0, 0, 0, 0.329)';
updateTimerDisplay(data.counter);
elements.timer.style.display = "flex";
elements.container.style.display = 'flex';
};
const displayScreenFive = (data, color) => {
elements.ems.innerHTML = translationStrings.ems_online;
elements.online.innerHTML = translationStrings.currently_online + data.emsOnline;
elements.ems.style.color = color;
Object.assign(elements.container.style, { bottom: "5%", top: "20%" });
Object.assign(elements.emsCounter.style, {
display: "block",
top: "10px",
left: "50%",
transform: "translateX(-50%)",
textAlign: "center"
});
Object.assign(elements.timerContainer.style, {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
marginBottom: '20px'
});
elements.dyingHeader.innerHTML = translationStrings.player_dying;
applyGradientTextEffect(elements.dyingHeader, color, 5);
elements.dyingHeader.style.fontSize = "1.6rem";
elements.dyingHeader.style.fontWeight = "800";
elements.dyingHeader.style.marginBottom = "6px";
elements.timerBoxes.forEach(element => {
Object.assign(element.style, {
background: "linear-gradient(to top right, rgba(211, 211, 211, 0.2), rgba(211, 211, 211, 0.00))",
padding: "15px 15px",
borderRadius: "1px",
margin: "0 5px",
display: "flex",
fontSize: "1.4rem",
fontWeight: "bolder",
border: ".5px solid rgba(211, 211, 211, 0.2)"
});
});
elements.timerSeparator.innerHTML = ":";
elements.timerSeparator.style.margin = "0px 8px";
elements.timerHeader.innerHTML = translationStrings.player_hurt_severe;
Object.assign(elements.timerHeader.style, {
fontWeight: "normal",
color: "rgb(185, 185, 185)",
marginBottom: ".7%",
fontSize: ".8rem"
});
elements.timerSubheader.innerHTML = translationStrings.player_hurt_find_help_or_ems.toUpperCase();
Object.assign(elements.timerSubheader.style, {
marginBottom: "2%",
marginTop: "1%",
fontWeight: "500",
fontSize: ".7rem"
});
elements.emergencyText.innerHTML = "";
elements.body.style.backgroundColor = 'rgba(0, 0, 0, 0.429)';
updateTimerDisplay(data.counter);
const minutes = Math.floor(data.counter / 60);
const seconds = data.counter % 60;
elements.minuteTens.innerHTML = Math.floor(minutes / 10);
elements.minuteOnes.innerHTML = minutes % 10;
elements.secondTens.innerHTML = Math.floor(seconds / 10);
elements.secondOnes.innerHTML = seconds % 10;
elements.container.style.display = 'flex';
};
window.addEventListener('message', (event) => {
if (event.data.action === "displayDeathScreen") {
color = event.data.color;
translationStrings = event.data.translationStrings;
elements.dyingHeader.innerHTML = translationStrings.player_dying;
elements.timerHeader.innerHTML = translationStrings.time_to_respawn;
elements.emergencyText.innerHTML = translationStrings.player_hurt_find_help_or_ems;
setColorCSSRule(color);
switch (event.data.type) {
case 1: displayScreenOne(event.data, color); break;
case 2: displayScreenTwo(event.data, color); break;
case 3: displayScreenThree(event.data, color); break;
case 4: displayScreenFour(event.data, color); break;
case 5: displayScreenFive(event.data, color); break;
}
}
if (event.data.action === "updateDeathScreen") {
elements.online.innerHTML = translationStrings.currently_online + (event.data.emsOnline || 0);
if (!event.data.showCount) {
elements.ems.style.display = "none";
elements.online.style.display = "none";
} else if (event.data.emsOnline < 1) {
elements.online.style.display = "none";
elements.ems.innerHTML = translationStrings.ems_offline;
elements.emsCounter.style.bottom = "40px";
elements.ems.style.color = "rgba(195, 7, 63, 1)";
} else {
elements.ems.innerHTML = translationStrings.ems_online;
elements.ems.style.color = event.data.color;
elements.online.style.display = "block";
}
switch (event.data.type) {
case 1:
case 2:
if (event.data.dispatched) elements.emergencyText.innerHTML = translationStrings.ems_on_the_way;
if (event.data.canRespawn) {
elements.dyingHeader.innerHTML = translationStrings.player_passed;
elements.timerHeader.innerHTML = translationStrings.player_hurt_respawn;
}
break;
case 3:
case 4:
if (event.data.dispatched) elements.timerHeader.innerHTML = translationStrings.ems_on_the_way;
if (event.data.canRespawn) {
elements.dyingHeader.innerHTML = translationStrings.player_hurt_unconscious;
elements.timerSubheader.innerHTML = translationStrings.player_hurt_respawn;
}
break;
case 5:
if (event.data.dispatched) elements.timerSubheader.innerHTML = translationStrings.ems_on_the_way;
if (event.data.canRespawn) {
elements.dyingHeader.innerHTML = translationStrings.player_hurt_unconscious.toUpperCase();
elements.timerHeader.innerHTML = translationStrings.player_hurt_respawn;
}
break;
}
updateTimerDisplay(event.data.counter);
if ([3, 5].includes(event.data.type)) {
const minutes = Math.floor(event.data.counter / 60);
const seconds = event.data.counter % 60;
elements.minuteTens.innerHTML = Math.floor(minutes / 10);
elements.minuteOnes.innerHTML = minutes % 10;
elements.secondTens.innerHTML = Math.floor(seconds / 10);
elements.secondOnes.innerHTML = seconds % 10;
}
elements.container.style.display = 'flex';
}
if (event.data.action === "hideDeathScreen") {
elements.emsCounter.style.display = "none";
elements.container.style.display = 'none';
elements.body.style.backgroundColor = '';
elements.body.style.backgroundImage = 'none';
}
});
|