User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElement')' in or related to this line: 'LK.ui.getElement("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'get')' in or related to this line: 'LK.ui.get("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getButton')' in or related to this line: 'LK.ui.getButton("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'button')' in or related to this line: 'LK.ui.button("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getButton')' in or related to this line: 'LK.ui.getButton("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'button')' in or related to this line: 'LK.ui.button("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'get')' in or related to this line: 'LK.ui.get("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'button')' in or related to this line: 'LK.ui.button("buy-basic").on("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'document.getElementById("buy-basic").addEventListener("pointerdown", function () {' Line Number: 69
User prompt
Please fix the bug: 'LK.addEventListener is not a function' in or related to this line: 'LK.addEventListener("pointerdown", function (obj) {' Line Number: 61
User prompt
Estructura del Código 1. Variables Globales Declararemos todas las variables necesarias en el ámbito global para que sean accesibles en todo el juego. javascript Copy // Variables globales let money = 0; // Contador de soles/dinero let enemiesDefeated = 0; // Contador de enemigos derrotados let currentBossDefeats = 0; // Contador de veces que el jefe ha sido derrotado let gameOver = false; // Estado del juego let gameWin = false; // Estado de victoria // Arrays para almacenar objetos del juego let defenses = []; // Defensas colocadas let enemies = []; // Enemigos activos let suns = []; // Soles/dinero en pantalla // Líneas del juego (4 líneas verticales) const lanes = [ { x: 100, y: 200, width: 80, height: 400 }, // Línea 1 { x: 250, y: 200, width: 80, height: 400 }, // Línea 2 { x: 400, y: 200, width: 80, height: 400 }, // Línea 3 { x: 550, y: 200, width: 80, height: 400 } // Línea 4 ]; // Tipos de enemigos const enemyTypes = [ { type: "weak", health: 50, damage: 10, speed: 1, moneyDrop: 25 }, { type: "normal", health: 100, damage: 20, speed: 0.8, moneyDrop: 50 }, { type: "strong", health: 200, damage: 30, speed: 0.6, moneyDrop: 75 }, { type: "boss", health: 1000, damage: 50, speed: 0.4, moneyDrop: 200 } ]; // Tipos de defensas const defenseTypes = [ { type: "basic", cost: 100, damage: 20, range: 100 }, { type: "upgraded", cost: 200, damage: 40, range: 150 } ]; 2. Clases para Objetos del Juego Crearemos clases para los diferentes tipos de objetos del juego, como defensas, enemigos y soles. javascript Copy // Clase para las defensas class Defense { constructor(type, lane) { this.type = type; this.lane = lane; this.health = 100; this.damage = defenseTypes.find(d => d.type === type).damage; this.range = defenseTypes.find(d => d.type === type).range; this.sprite = LK.getAsset(`defense_${type}`, `Defensa ${type}`, 0.5, 0.5); this.sprite.x = lanes[lane].x; this.sprite.y = lanes[lane].y; } update() { // Verificar si hay enemigos en su rango y atacar enemies.forEach(enemy => { if (enemy.lane === this.lane && Math.abs(enemy.sprite.x - this.sprite.x) < this.range) { enemy.takeDamage(this.damage); } }); } } // Clase para los enemigos class Enemy { constructor(type, lane) { this.type = type; this.lane = lane; this.health = enemyTypes.find(e => e.type === type).health; this.damage = enemyTypes.find(e => e.type === type).damage; this.speed = enemyTypes.find(e => e.type === type).speed; this.moneyDrop = enemyTypes.find(e => e.type === type).moneyDrop; this.sprite = LK.getAsset(`enemy_${type}`, `Enemigo ${type}`, 0.5, 0.5); this.sprite.x = lanes[lane].x + lanes[lane].width; this.sprite.y = lanes[lane].y; } update() { // Mover hacia la izquierda this.sprite.x -= this.speed; // Verificar si llegó al final de la pantalla if (this.sprite.x < 0) { gameOver = true; } } takeDamage(damage) { this.health -= damage; if (this.health <= 0) { this.defeat(); } } defeat() { // Añadir dinero al contador money += this.moneyDrop; enemiesDefeated++; // Eliminar enemigo const index = enemies.indexOf(this); enemies.splice(index, 1); // Verificar si aparece el jefe if (enemiesDefeated % 30 === 0) { spawnEnemy("boss"); } } } // Clase para los soles/dinero class Sun { constructor(x, y) { this.sprite = LK.getAsset("sun", "Sol", 0.5, 0.5); this.sprite.x = x; this.sprite.y = y; } collect() { // Animación de movimiento hacia el contador de dinero // (Implementar animación con LK.assets) money += 50; const index = suns.indexOf(this); suns.splice(index, 1); } } 3. Funciones Principales del Juego Implementaremos las funciones principales para manejar la lógica del juego. javascript Copy // Función para generar soles function spawnSun() { const x = Math.random() * (window.innerWidth - 100) + 50; const y = Math.random() * (window.innerHeight - 100) + 50; const sun = new Sun(x, y); suns.push(sun); } // Función para generar enemigos function spawnEnemy(type) { const lane = Math.floor(Math.random() * 4); const enemy = new Enemy(type, lane); enemies.push(enemy); } // Función para comprar defensas function buyDefense(type) { const cost = defenseTypes.find(d => d.type === type).cost; if (money >= cost) { money -= cost; const lane = Math.floor(Math.random() * 4); const defense = new Defense(type, lane); defenses.push(defense); } } // Función de actualización del juego (60 FPS) function update() { if (gameOver || gameWin) return; // Actualizar defensas defenses.forEach(defense => defense.update()); // Actualizar enemigos enemies.forEach(enemy => enemy.update()); // Verificar si el jefe ha sido derrotado 5 veces if (currentBossDefeats >= 5) { gameWin = true; showWinAnimation(); } } // Función para mostrar animación de victoria function showWinAnimation() { // Implementar animación de explosión y sacudida } 4. Event Listeners Implementaremos los listeners para interactuar con los soles y los botones de compra. javascript Copy // Listener para recolectar soles LK.addEventListener("pointerdown", (obj) => { suns.forEach(sun => { if (obj.event.target === sun.sprite) { sun.collect(); } }); }); // Listener para comprar defensas document.getElementById("buy-basic").addEventListener("pointerdown", () => buyDefense("basic")); document.getElementById("buy-upgraded").addEventListener("pointerdown", () => buyDefense("upgraded")); 5. Inicialización del Juego Configuraremos el fondo y comenzaremos a generar soles y enemigos. javascript Copy // Inicialización del juego function initializeGame() { LK.setBackgroundColor(0x87CEEB); // Color de fondo celeste // Generar soles cada 5 segundos setInterval(spawnSun, 5000); // Generar enemigos cada 3 segundos setInterval(() => spawnEnemy("weak"), 3000); } initializeGame();
User prompt
Elimina todo el codigo
User prompt
1) Debe estar inspirado en plantas vs zombies, es decir, 4 lineas en vertical, donde podre colocar mis defensar para eviat que los zombis lleguen a mi casa 2) contador de soles/dinero, el dinero caerá del cielo pero a medida que pasa el juego serán mas escasos, a la hora de yo presionar un sol/dinero, este debe de hacer una animación trasladándose hacia donde esta el contador de dinero y. obviamente, aumentando, puedes darle a los soles un valor de 50$ 3) los enemigos derrotados también sueltan dinero, dependiendo del enemigo, más vida/daño/ velocidad, toma en cuenta solo cuatro tipos de enemigos para que no te compliques: débil, normal, fuerte, jefe (este último saliendo solo cuando son eliminados 30 monstruos, si el jefe es derrotado, el volverá a aparecer luego de derrotar la misma cantidad + 10%, al jefe le agregaras más vida), 4) algo super importante tambien, solo habra 4 lineas de forma vertical, es decir que, en esas 4 lineas podre comprar mis defensa, 5) SUPER MEGA IMPORTANTE, crear los botones para la compra de nuevas defensas o mejora de las mismas, cuando compres una, automáticamente se colocaran en las 4 lineas pero será solo una de ellas 6) Los monstruos solo podrán ir por la misma línea donde esta la defensa para evitar problemas de que no sean derrotados. 7) El juego solo terminara con un game over si un monstruo destruye las defensas y llega al final de la pantalla, solo se ganara el juego cuando el jefe sea destruido por quinta vez, en esta ultima oportunidad, debe de mostrar una pequeña animación de sacudida, mientras que sobre el hay unos assets de “explosión”, para luego decir que ganaste ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
1) Debe estar inspirado en plantas vs zombies, es decir, 4 lineas en vertical, donde podre colocar mis defensar para eviat que los zombis lleguen a mi casa 2) contador de soles/dinero, el dinero caerá del cielo pero a medida que pasa el juego serán mas escasos, a la hora de yo presionar un sol/dinero, este debe de hacer una animación trasladándose hacia donde esta el contador de dinero y. obviamente, aumentando, puedes darle a los soles un valor de 50$ 3) los enemigos derrotados también sueltan dinero, dependiendo del enemigo, más vida/daño/ velocidad, toma en cuenta solo cuatro tipos de enemigos para que no te compliques: débil, normal, fuerte, jefe (este último saliendo solo cuando son eliminados 30 monstruos, si el jefe es derrotado, el volverá a aparecer luego de derrotar la misma cantidad + 10%, al jefe le agregaras más vida), 4) algo super importante tambien, solo habra 4 lineas de forma vertical, es decir que, en esas 4 lineas podre comprar mis defensa, 5) SUPER MEGA IMPORTANTE, crear los botones para la compra de nuevas defensas o mejora de las mismas, cuando compres una, automáticamente se colocaran en las 4 lineas pero será solo una de ellas 6) Los monstruos solo podrán ir por la misma línea donde esta la defensa para evitar problemas de que no sean derrotados. 7) El juego solo terminara con un game over si un monstruo destruye las defensas y llega al final de la pantalla, solo se ganara el juego cuando el jefe sea destruido por quinta vez, en esta ultima oportunidad, debe de mostrar una pequeña animación de sacudida, mientras que sobre el hay unos assets de “explosión”, para luego decir que ganaste ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
ahora es azul.
User prompt
sigo viendo la pantalla en negro.
User prompt
Solo veo una pantalla en negro.
User prompt
1) Debe estar inspirado en plantas vs zombies, es decir, 4 lineas en vertical, donde podre colocar mis defensar para eviat que los zombis lleguen a mi casa 2) contador de soles/dinero, el dinero caerá del cielo pero a medida que pasa el juego serán mas escasos, a la hora de yo presionar un sol/dinero, este debe de hacer una animación trasladándose hacia donde esta el contador de dinero y. obviamente, aumentando, puedes darle a los soles un valor de 50$ 3) los enemigos derrotados también sueltan dinero, dependiendo del enemigo, más vida/daño/ velocidad, toma en cuenta solo cuatro tipos de enemigos para que no te compliques: débil, normal, fuerte, jefe (este último saliendo solo cuando son eliminados 30 monstruos, si el jefe es derrotado, el volverá a aparecer luego de derrotar la misma cantidad + 10%, al jefe le agregaras más vida), 4) algo super importante tambien, solo habra 4 lineas de forma vertical, es decir que, en esas 4 lineas podre comprar mis defensa, 5) SUPER MEGA IMPORTANTE, crear los botones para la compra de nuevas defensas o mejora de las mismas, cuando compres una, automáticamente se colocaran en las 4 lineas pero será solo una de ellas 6) Los monstruos solo podrán ir por la misma línea donde esta la defensa para evitar problemas de que no sean derrotados. 7) El juego solo terminara con un game over si un monstruo destruye las defensas y llega al final de la pantalla, solo se ganara el juego cuando el jefe sea destruido por quinta vez, en esta ultima oportunidad, debe de mostrar una pequeña animación de sacudida, mientras que sobre el hay unos assets de “explosión”, para luego decir que ganaste
User prompt
Elimina todo el codigo
User prompt
Muy bien, requiero lo siguiente, conoces el videojuego plantas vs zombies?, basicamente necesito recrear dicho videojuego pero en JS con los parametros que te envie, ademas, el juego debe ser tipo idle, que significa esto, que a la hora de hacer el codigo, toma en cuenta lo siguiente muy importante: 1) contador de soles/dinero, el dinero caera del cielo pero a medida que pasa el juego seran mas escazos, 2) los enemigos derrotados tambien sueltan dinero, dependiendo del enemigo, mas vida/daño/ velocidad, toma en cuenta solo cuatro tipos de enemigos para que no te compliques: debil, normal, fuerte, jefe (este ultimo saliendo solo cuando son eliminados 30 monstruos, si el jefe es derrotado, el volvera a aparecer luego de derrotar la misma cantidad + 10%, al jefe le agregaras mas vida), algo super importante tambien, solo habra 4 lineas de forma vertical, es decir que, en esas 4 lineas podre comprar mis defensas, OJO, crear los botones para la compra/ mejora de estas defensas, cuando compres una, automaticamente se colocaran en las 4 lineas pero sera solo una de ellas, no olvides que los monstruos tambien deben de ir por esas mismas lineas para evitar que las defensas no los ataquen, muchsimas gracias.
User prompt
Elimina todo el codigo.
User prompt
Muy bien, requiero lo siguiente, conoces el videojuego plantas vs zombies?, basicamente necesito recrear dicho videojuego pero en JS con los parametros que te envie, ademas, el juego debe ser tipo idle, que significa esto, que a la hora de hacer el codigo, toma en cuenta lo siguiente muy importante: 1) contador de soles/dinero, el dinero caera del cielo pero a medida que pasa el juego seran mas escazos, 2) los enemigos derrotados tambien sueltan dinero, dependiendo del enemigo, mas vida/daño/ velocidad, toma en cuenta solo cuatro tipos de enemigos para que no te compliques: debil, normal, fuerte, jefe (este ultimo saliendo solo cuando son eliminados 30 monstruos, si el jefe es derrotado, el volvera a aparecer luego de derrotar la misma cantidad + 10%, al jefe le agregaras mas vida), algo super importante tambien, solo habra 4 lineas de forma vertical, es decir que, en esas 4 lineas podre comprar mis defensas, OJO, crear los botones para la compra/ mejora de estas defensas, cuando compres una, automaticamente se colocaran en las 4 lineas pero sera solo una de ellas, no olvides que los monstruos tambien deben de ir por esas mismas lineas para evitar que las defensas no los ataquen, muchsimas gracias.
User prompt
Muy bien, requiero lo siguiente, conoces el videojuego plantas vs zombies?, basicamente necesito recrear dicho videojuego pero en JS con los parametros que te envie, ademas, el juego debe ser tipo idle, que significa esto, que a la hora de hacer el codigo, toma en cuenta lo siguiente muy importante: 1) contador de soles/dinero, el dinero caera del cielo pero a medida que pasa el juego seran mas escazos, 2) los enemigos derrotados tambien sueltan dinero, dependiendo del enemigo, mas vida/daño/ velocidad, toma en cuenta solo cuatro tipos de enemigos para que no te compliques: debil, normal, fuerte, jefe (este ultimo saliendo solo cuando son eliminados 30 monstruos, si el jefe es derrotado, el volvera a aparecer luego de derrotar la misma cantidad + 10%, al jefe le agregaras mas vida), algo super importante tambien, solo habra 4 lineas de forma vertical, es decir que, en esas 4 lineas podre comprar mis defensas, OJO, crear los botones para la compra/ mejora de estas defensas, cuando compres una, automaticamente se colocaran en las 4 lineas pero sera solo una de ellas, no olvides que los monstruos tambien deben de ir por esas mismas lineas para evitar que las defensas no los ataquen, muchsimas gracias.
User prompt
Please fix the bug: 'TypeError: moneyText.setText is not a function' in or related to this line: 'moneyText.setText("Dinero: $" + money);' Line Number: 126
User prompt
Analiza y repara del codigo lo que este mal+
/**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Listener para recolectar soles // Inicialización del juego function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(a, n) { if (!(a instanceof n)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) { return t; } var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) { return i; } throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } game.down = function (x, y, obj) { suns.forEach(function (sun) { if (obj.event.target === sun.sprite) { sun.collect(); } }); }; // Listener para comprar defensas LK.ui.get("buy-basic").on("pointerdown", function () { return buyDefense("basic"); }); LK.ui.get("buy-upgraded").on("pointerdown", function () { return buyDefense("upgraded"); }); var Defense = /*#__PURE__*/function () { function Defense(type, lane) { _classCallCheck(this, Defense); this.type = type; this.lane = lane; this.health = 100; this.damage = defenseTypes.find(function (d) { return d.type === type; }).damage; this.range = defenseTypes.find(function (d) { return d.type === type; }).range; this.sprite = LK.getAsset("defense_".concat(type), { anchorX: 0.5, anchorY: 0.5 }); this.sprite.x = lanes[lane].x; this.sprite.y = lanes[lane].y; } return _createClass(Defense, [{ key: "update", value: function update() { var _this = this; // Verificar si hay enemigos en su rango y atacar enemies.forEach(function (enemy) { if (enemy.lane === _this.lane && Math.abs(enemy.sprite.x - _this.sprite.x) < _this.range) { enemy.takeDamage(_this.damage); } }); } }]); }(); // Clase para los enemigos var Enemy = /*#__PURE__*/function () { function Enemy(type, lane) { _classCallCheck(this, Enemy); this.type = type; this.lane = lane; this.health = enemyTypes.find(function (e) { return e.type === type; }).health; this.damage = enemyTypes.find(function (e) { return e.type === type; }).damage; this.speed = enemyTypes.find(function (e) { return e.type === type; }).speed; this.moneyDrop = enemyTypes.find(function (e) { return e.type === type; }).moneyDrop; this.sprite = LK.getAsset("enemy_".concat(type), { anchorX: 0.5, anchorY: 0.5 }); this.sprite.x = lanes[lane].x + lanes[lane].width; this.sprite.y = lanes[lane].y; } return _createClass(Enemy, [{ key: "update", value: function update() { // Mover hacia la izquierda this.sprite.x -= this.speed; // Verificar si llegó al final de la pantalla if (this.sprite.x < 0) { gameOver = true; } } }, { key: "takeDamage", value: function takeDamage(damage) { this.health -= damage; if (this.health <= 0) { this.defeat(); } } }, { key: "defeat", value: function defeat() { // Añadir dinero al contador money += this.moneyDrop; enemiesDefeated++; // Eliminar enemigo var index = enemies.indexOf(this); enemies.splice(index, 1); // Verificar si aparece el jefe if (enemiesDefeated % 30 === 0) { spawnEnemy("boss"); } } }]); }(); // Clase para los soles/dinero var Sun = /*#__PURE__*/function () { function Sun(x, y) { _classCallCheck(this, Sun); this.sprite = LK.getAsset('sun', { anchorX: 0.5, anchorY: 0.5 }); this.sprite.x = x; this.sprite.y = y; } return _createClass(Sun, [{ key: "collect", value: function collect() { // Animación de movimiento hacia el contador de dinero // (Implementar animación con LK.assets) money += 50; var index = suns.indexOf(this); suns.splice(index, 1); } }]); }(); // Función para generar soles function spawnSun() { var x = Math.random() * (window.innerWidth - 100) + 50; var y = Math.random() * (window.innerHeight - 100) + 50; var sun = new Sun(x, y); suns.push(sun); } // Función para generar enemigos function spawnEnemy(type) { var lane = Math.floor(Math.random() * 4); var enemy = new Enemy(type, lane); enemies.push(enemy); } // Función para comprar defensas function buyDefense(type) { var cost = defenseTypes.find(function (d) { return d.type === type; }).cost; if (money >= cost) { money -= cost; var lane = Math.floor(Math.random() * 4); var defense = new Defense(type, lane); defenses.push(defense); } } // Función de actualización del juego (60 FPS) function update() { if (gameOver || gameWin) { return; } // Actualizar defensas defenses.forEach(function (defense) { return defense.update(); }); // Actualizar enemigos enemies.forEach(function (enemy) { return enemy.update(); }); // Verificar si el jefe ha sido derrotado 5 veces if (currentBossDefeats >= 5) { gameWin = true; showWinAnimation(); } } // Función para mostrar animación de victoria function showWinAnimation() { // Implementar animación de explosión y sacudida } // Variables globales var money = 0; // Contador de soles/dinero var enemiesDefeated = 0; // Contador de enemigos derrotados var currentBossDefeats = 0; // Contador de veces que el jefe ha sido derrotado var gameOver = false; // Estado del juego var gameWin = false; // Estado de victoria // Arrays para almacenar objetos del juego var defenses = []; // Defensas colocadas var enemies = []; // Enemigos activos var suns = []; // Soles/dinero en pantalla // Líneas del juego (4 líneas verticales) var lanes = [{ x: 100, y: 200, width: 80, height: 400 }, // Línea 1 { x: 250, y: 200, width: 80, height: 400 }, // Línea 2 { x: 400, y: 200, width: 80, height: 400 }, // Línea 3 { x: 550, y: 200, width: 80, height: 400 } // Línea 4 ]; // Tipos de enemigos var enemyTypes = [{ type: "weak", health: 50, damage: 10, speed: 1, moneyDrop: 25 }, { type: "normal", health: 100, damage: 20, speed: 0.8, moneyDrop: 50 }, { type: "strong", health: 200, damage: 30, speed: 0.6, moneyDrop: 75 }, { type: "boss", health: 1000, damage: 50, speed: 0.4, moneyDrop: 200 }]; // Tipos de defensas var defenseTypes = [{ type: "basic", cost: 100, damage: 20, range: 100 }, { type: "upgraded", cost: 200, damage: 40, range: 150 }]; function initializeGame() { LK.setBackgroundColor(0x87CEEB); // Color de fondo celeste // Generar soles cada 5 segundos setInterval(spawnSun, 5000); // Generar enemigos cada 3 segundos setInterval(function () { return spawnEnemy("weak"); }, 3000); } initializeGame();
===================================================================
--- original.js
+++ change.js
@@ -59,12 +59,12 @@
}
});
};
// Listener para comprar defensas
-LK.ui.button("buy-basic").on("pointerdown", function () {
+LK.ui.get("buy-basic").on("pointerdown", function () {
return buyDefense("basic");
});
-LK.ui.button("buy-upgraded").on("pointerdown", function () {
+LK.ui.get("buy-upgraded").on("pointerdown", function () {
return buyDefense("upgraded");
});
var Defense = /*#__PURE__*/function () {
function Defense(type, lane) {