diff --git a/html/map.html b/html/map.html index 7c51d54..b448306 100644 --- a/html/map.html +++ b/html/map.html @@ -12,7 +12,7 @@
- +
diff --git a/http.js b/http.js index faf2336..d621276 100644 --- a/http.js +++ b/http.js @@ -6,7 +6,7 @@ const remotenades = require("./remotenades.js") const host = "localhost" let oldPhase = false - +let infernosOnMap = [] //initial molotov status let server = http.createServer(function(req, res) { if (req.method != "POST") { res.writeHead(405) @@ -111,11 +111,11 @@ let server = http.createServer(function(req, res) { } }) } - + if (game.grenades) { let smokes = [] let nades = [] - + let infernos = [] for (let nadeID in game.grenades) { let nade = game.grenades[nadeID] @@ -131,13 +131,45 @@ let server = http.createServer(function(req, res) { } }) } + if (nade.type == "inferno") { + if (!!nade.flames) { + let flamesPos = [] + let flamesNum = Object.values(nade.flames).length + for (var i = 0; i < flamesNum; i++) { + flamesPos.push({ + x: parseFloat(Object.values(nade.flames)[i].split(", ")[0]), + y: parseFloat(Object.values(nade.flames)[i].split(", ")[1]), + z: parseFloat(Object.values(nade.flames)[i].split(", ")[2]), + }) + } + infernos.push({ + id: nadeID, + flamesNum: flamesNum, + flamesPosition: flamesPos + }) + if (infernosOnMap.indexOf(nadeID) == -1 ) {infernosOnMap.push(nadeID)} + } + else{ + + } + } + } + for (let infernoOnMap of infernosOnMap) { + if (!game.grenades[infernoOnMap]) { + process.send({ + type: "infernoRemove", + data: infernoOnMap + }) + }// check if molotov exist in game } - process.send({ type: "smokes", data: smokes }) - + process.send({ + type: "infernos", + data: infernos + }) if (config.nadeCollection) { remotenades.event(game.grenades) } @@ -148,7 +180,9 @@ let server = http.createServer(function(req, res) { type: "round", data: game.round.phase }) - + if (oldPhase == "over" && game.round.phase == "freezetime") { + infernosOnMap = [] //clear molotov status every round + } if (oldPhase != game.round.phase && config.nadeCollection) { if (oldPhase == "over" && game.round.phase == "freezetime") { remotenades.send() diff --git a/maps/de_vertigo/meta.json5 b/maps/de_vertigo/meta.json5 index 5ae592c..12d0c43 100644 --- a/maps/de_vertigo/meta.json5 +++ b/maps/de_vertigo/meta.json5 @@ -26,7 +26,7 @@ // The radar offset in percentages to apply when player is in the split "offset": { "x": 0, - "y": -39 + "y": -43 } } ], diff --git a/maps/de_vertigo/radar.png b/maps/de_vertigo/radar.png index 393bd67..4b28ad4 100644 Binary files a/maps/de_vertigo/radar.png and b/maps/de_vertigo/radar.png differ diff --git a/renderers/smokes.js b/renderers/smokes.js index 23c6aa0..c858813 100644 --- a/renderers/smokes.js +++ b/renderers/smokes.js @@ -3,7 +3,6 @@ // Shows smokes on map an calculates duration. let global = require("./_global") - // The live position of all smokes global.renderer.on("smokes", (event, smokes) => { // Called to show the fade in animation with a delay @@ -64,7 +63,45 @@ global.renderer.on("smokes", (event, smokes) => { } }) +//molotov on radar +global.renderer.on("infernos", (event, infernos) => { + // Go through each smoke + for (let inferno of infernos) { + // Get the molotov element + let infernoElement = document.getElementById("inferno" + inferno.id) + let flameElementsStr = "" + let flameElement = [] + + // If the element does not exist yet, add it + if (!infernoElement) { + // Create a new element + infernoElement = document.createElement("div") + infernoElement.id = "inferno" + inferno.id + infernoElement.className = "inferno" + infernoElement.setAttribute('style', 'opacity:1') + document.getElementById("infernos").appendChild(infernoElement) + + } + infernoElement = document.getElementById("inferno" + inferno.id) + for (var i = 0; i < inferno.flamesNum; i++) { + flameElement[i] = document.createElement("div") + flameElement[i].style.height = flameElement[i].style.width = 100 / global.mapData.resolution / 1024 * 100 + "%" + let percOffset = parseFloat(flameElement[i].style.height) / 2 + flameElement[i].style.left = global.positionToPerc(inferno.flamesPosition[i], "x") + "%" + flameElement[i].style.bottom = global.positionToPerc(inferno.flamesPosition[i], "y") - percOffset + "%" + flameElementsStr = flameElementsStr + flameElement[i].outerHTML + } + infernoElement.innerHTML = flameElementsStr + + } + +}) + +global.renderer.on("infernoRemove", (event,infernoRemove) => { + document.getElementById("inferno" + infernoRemove).setAttribute('style', 'opacity:0') +}) // Clear all smokes on round reset global.renderer.on("roundend", (event) => { document.getElementById("smokes").innerHTML = "" + document.getElementById("infernos").innerHTML = "" }) diff --git a/style/map.css b/style/map.css index 13d4fd7..cc92059 100644 --- a/style/map.css +++ b/style/map.css @@ -44,6 +44,36 @@ body { transition: opacity 1.8s; } +#infernos{ + position: absolute; + height: 100%; + width: 100%; + bottom: 0; + left: 0; + z-index: 2; +} + +.inferno{ + position: absolute; + height: 100%; + width: 100%; + bottom: 0; + left: 0; + z-index: 2; + transition: opacity .3s; +} + +.inferno > div{ + position: absolute; + border-radius: 100%; + opacity: .75; + background: #ff4848; + box-sizing: border-box; + border: #ce3f00 solid 1.5px; + transform: translate(-50%, -50%); + transition: opacity .3s; +} + #siteA, #siteB { position: absolute; background: #f00;