diff --git a/html5/images/sprite_invader_killed.png b/html5/images/sprite_invader_killed.png new file mode 100644 index 0000000..f1af99c Binary files /dev/null and b/html5/images/sprite_invader_killed.png differ diff --git a/html5/images/sprite_invader_pending.png b/html5/images/sprite_invader_pending.png new file mode 100644 index 0000000..c90922c Binary files /dev/null and b/html5/images/sprite_invader_pending.png differ diff --git a/html5/images/sprite_invader_ready.png b/html5/images/sprite_invader_ready.png new file mode 100644 index 0000000..87338e3 Binary files /dev/null and b/html5/images/sprite_invader_ready.png differ diff --git a/html5/kubeinvaders.js b/html5/kubeinvaders.js index 8ba7b84..f14ffa4 100644 --- a/html5/kubeinvaders.js +++ b/html5/kubeinvaders.js @@ -46,8 +46,6 @@ var random_code = (Math.random() + 1).toString(36).substring(7); // nodes list from kubernetes var nodes = []; -var mergeNodesAndPods = []; - // Hash of aliens related to pods or nodes var aliens = []; var aliensWidth = 40; @@ -664,11 +662,19 @@ function getPods() { if (chaos_pods) { var oReq = new XMLHttpRequest(); oReq.onload = function () { - json_parsed = JSON.parse(this.responseText); + new_pods = JSON.parse(this.responseText)["items"]; + + // Pod might just be killed in game, but not terminated in k8s yet. + for (i=0; i alien.name == new_pods[i].name && alien.status == "killed")) { + new_pods[i].status = "killed"; + } + } + if (nodes && nodes.length > 0) { - pods = json_parsed["items"].concat(nodes); + pods = new_pods.concat(nodes); } else { - pods = json_parsed["items"]; + pods = new_pods; } };; oReq.open("GET", k8s_url + "/kube/pods?action=list&namespace=" + namespace); @@ -703,7 +709,7 @@ window.setInterval(function getKubeItems() { getNodes(); getPods(); } -}, 1000) +}, 500) function keyDownHandler(e) { if (!modal_opened && game_mode_switch) { @@ -800,14 +806,14 @@ function keyUpHandler(e) { document.addEventListener("keydown", keyDownHandler, false); document.addEventListener("keyup", keyUpHandler, false); -function drawAlien(alienX, alienY, name) { +function drawAlien(alienX, alienY, name, status) { var image = new Image(); // Image constructor - if (contains(nodes, name)) { + if (nodes.some((node) => node.name == name)) { image.src = './images/k8s_node.png'; ctx.drawImage(image, alienX, alienY, 30, 40); } else { - image.src = './images/sprite_invader.png'; + image.src = `./images/sprite_invader_${status}.png`; ctx.font = '8px pixel'; ctx.drawImage(image, alienX, alienY, 40, 40); if (showPodName) { @@ -831,14 +837,19 @@ function checkRocketAlienCollision() { if(contains(rangeX, rocketX)) { collisionDetected = true; - aliens[i]["active"] = false; - if (contains(nodes, aliens[i]["name"])) { + aliens[i]["status"] = "killed"; + // Aliens might be updated before new pods are fetched + for (j=0; j node.name == aliens[i]["name"])) { + aliens[i]["active"] = false; startChaosNode(aliens[i]["name"]); - aliens[i]["name"] = "killed_pod"; } else { deletePods(aliens[i]["name"]); - aliens[i]["name"] = "killed_pod"; } return true; } @@ -974,7 +985,7 @@ window.setInterval(function draw() { for (i=0; i