/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Asteroid = Container.expand(function () {
	var self = Container.call(this);
	var asteroidGraphics = self.attachAsset('asteroid', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var bulletGraphics = self.attachAsset('bullet', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -10;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
var EquipIcon = Container.expand(function () {
	var self = Container.call(this);
	var equipGraphics = self.attachAsset('shopIcon', {
		anchorX: 0.5,
		anchorY: 0.5,
		tint: 0x00ff00 // Set color to green
	});
	self.down = function (x, y, obj) {
		console.log("Equip icon clicked. Showing gun selection box.");
		var gunSelectionBox = new GunSelectionBox();
		game.addChild(gunSelectionBox);
	};
	return self;
});
var GunSelectionBox = Container.expand(function () {
	var self = Container.call(this);
	var boxGraphics = self.attachAsset('shopIcon', {
		anchorX: 0.5,
		anchorY: 0.5,
		tint: 0x333333 // Dark gray for the box
	});
	self.x = 2048 / 2;
	self.y = 2732 / 2;
	self.width = 600;
	self.height = 800;
	var guns = ['Pistol', 'Rifle', 'Shotgun', 'Sniper'];
	var startY = -150;
	guns.forEach(function (gun, index) {
		var gunText = new Text2(gun, {
			size: 80,
			fill: 0xFFFFFF
		});
		gunText.anchor.set(0.5, 0.5);
		gunText.x = 0;
		gunText.y = startY + index * 100;
		gunText.down = function (x, y, obj) {
			selectedGun = {
				name: gun
			};
			console.log(gun + " selected!");
			self.destroy(); // Close the selection box after selecting a gun
		};
		self.addChild(gunText);
	});
	return self;
});
var HealthBar = Container.expand(function () {
	var self = Container.call(this);
	var barBackground = self.addChild(new Container());
	var barForeground = self.addChild(new Container());
	var backgroundGraphics = barBackground.attachAsset('healthBarBackground', {
		anchorX: 0,
		anchorY: 0,
		x: -150,
		y: -25,
		width: 300,
		height: 50
	});
	var foregroundGraphics = barForeground.attachAsset('healthBarForeground', {
		anchorX: 0,
		anchorY: 0,
		x: -150,
		y: -25,
		width: 300,
		height: 50
	});
	self.updateHealth = function (health) {
		barForeground.scaleX = health / 3; // Assuming max health is 3
		if (health < 3) {
			foregroundGraphics.tint = 0xff0000; // Change color to red when health decreases
		} else {
			foregroundGraphics.tint = 0x61d695; // Reset color to original when health is full
		}
	};
	return self;
});
var HomeBase = Container.expand(function () {
	var self = Container.call(this);
	var baseGraphics = self.attachAsset('homeBase', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
var Mineral = Container.expand(function () {
	var self = Container.call(this);
	var mineralGraphics = self.attachAsset('mineral', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
var ShopIcon = Container.expand(function () {
	var self = Container.call(this);
	var shopGraphics = self.attachAsset('shopIcon', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.down = function (x, y, obj) {
		console.log("Shop icon clicked. Open shop to buy more guns.");
		var shopBox = new Container();
		shopBox.x = 2048 / 2;
		shopBox.y = 2732 / 2;
		shopBox.width = 600;
		shopBox.height = 800;
		shopBox.attachAsset('shopIcon', {
			anchorX: 0.5,
			anchorY: 0.5
		});
		game.addChild(shopBox);
		var shopMenu = new Container();
		var items = [{
			name: 'Shotgun',
			price: 10
		}, {
			name: 'Laser Gun',
			price: 20
		}, {
			name: 'Rocket Launcher',
			price: 30
		}, {
			name: 'Plasma Rifle',
			price: 40
		}, {
			name: 'Sniper Cannon',
			price: 50
		}];
		var startY = 2732 / 2 - 100;
		items.forEach(function (item, index) {
			var itemText = new Text2('Buy ' + item.name + ': ' + item.price + ' Score', {
				size: 80,
				fill: 0xFFFFFF
			});
			itemText.anchor.set(0.5, 0.5);
			itemText.x = 2048 / 2;
			itemText.y = startY + index * 100;
			itemText.down = function (x, y, obj) {
				if (score >= item.price) {
					score -= item.price;
					scoreTxt.setText('Score: ' + score);
					console.log(item.name + " purchased!");
					shopMenu.destroy();
					// Apply score multiplier based on the purchased gun
					if (item.name === 'Shotgun') {
						scoreMultiplier = 2;
					} else if (item.name === 'Laser Gun') {
						scoreMultiplier = 3;
					} else if (item.name === 'Rocket Launcher') {
						scoreMultiplier = 4;
					}
				} else {
					console.log("Not enough score to buy " + item.name + ".");
				}
			};
			shopMenu.addChild(itemText);
		});
		game.addChild(shopMenu);
	};
	return self;
});
var Spaceship = Container.expand(function () {
	var self = Container.call(this);
	var spaceshipGraphics = self.attachAsset('spaceship', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.energy = 100;
	self.update = function () {
		// Update logic for spaceship
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
// Initialize assets used in this game. Scale them according to what is needed for the game.
game.setBackgroundColor(0x000000);
var homeBase = game.addChild(new HomeBase());
homeBase.x = 2048 / 2;
homeBase.y = 2732 - 300;
var spaceship = game.addChild(new Spaceship());
spaceship.x = 2048 / 2;
spaceship.y = 2732 - 150;
var asteroids = [];
var minerals = [];
var bullets = [];
var score = 0;
var energy = 100;
var scoreMultiplier = 1; // Default score multiplier
var selectedGun = null; // Initialize selectedGun variable
var health = 3; // Initialize health for the spaceship
var healthBar = game.addChild(new HealthBar());
healthBar.x = 2048 / 2;
healthBar.y = 50;
healthBar.updateHealth(health);
var scoreTxt = new Text2('Score: 0', {
	size: 100,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var energyTxt = new Text2('Energy: 100', {
	size: 100,
	fill: 0xFFFFFF
});
var shopIcon = game.addChild(new ShopIcon());
shopIcon.x = 2048 - 100; // Position shop icon at the bottom-right corner
shopIcon.y = 2732 - 100;
var equipIcon = game.addChild(new EquipIcon());
equipIcon.x = 2048 - 500; // Move equip icon further to the left
equipIcon.y = 2732 - 200; // Move equip icon up
energyTxt.anchor.set(0.5, 0);
LK.gui.topRight.addChild(energyTxt);
function handleMove(x, y, obj) {
	if (dragNode) {
		dragNode.x = x;
		dragNode.y = y;
	}
}
game.move = handleMove;
game.down = function (x, y, obj) {
	dragNode = spaceship;
	handleMove(x, y, obj);
	var newBullet = new Bullet();
	newBullet.x = spaceship.x;
	newBullet.y = spaceship.y - 50;
	bullets.push(newBullet);
	game.addChild(newBullet);
};
game.up = function (x, y, obj) {
	dragNode = null;
};
game.update = function () {
	if (LK.ticks % 60 == 0) {
		var newAsteroid = new Asteroid();
		newAsteroid.x = Math.random() * 2048;
		newAsteroid.y = -50;
		asteroids.push(newAsteroid);
		game.addChild(newAsteroid);
	}
	for (var i = asteroids.length - 1; i >= 0; i--) {
		var asteroid = asteroids[i];
		if (asteroid.y > 2732) {
			if (asteroid.intersects(homeBase)) {
				health -= 1; // Decrease health when asteroid reaches home base
				healthBar.updateHealth(health);
				if (health <= 0) {
					LK.showGameOver(); // Show game over screen and reset game state
					return; // Exit the update loop
				}
			}
			asteroid.destroy();
			asteroids.splice(i, 1);
			continue;
		}
		if (spaceship.intersects(asteroid)) {
			health -= 1; // Decrease health when asteroid passes through spaceship
			healthBar.updateHealth(health);
			if (health <= 0) {
				LK.showGameOver(); // Show game over screen and reset game state
				return; // Exit the update loop
			}
			asteroid.destroy();
			asteroids.splice(i, 1);
			continue;
		}
	}
	for (var k = bullets.length - 1; k >= 0; k--) {
		var bullet = bullets[k];
		if (bullet.y < -50) {
			bullet.destroy();
			bullets.splice(k, 1);
			continue;
		}
		for (var l = asteroids.length - 1; l >= 0; l--) {
			var asteroid = asteroids[l];
			if (bullet.intersects(asteroid)) {
				score += 5 * scoreMultiplier;
				scoreTxt.setText('Score: ' + score);
				bullet.destroy();
				bullets.splice(k, 1);
				asteroid.destroy();
				asteroids.splice(l, 1);
				if (asteroids.length === 0) {
					// Advance to level 2
					for (var m = 0; m < 10; m++) {
						// Increase number of asteroids
						var newAsteroid = new Asteroid();
						newAsteroid.x = Math.random() * 2048;
						newAsteroid.y = -50;
						newAsteroid.speed = 5; // Increase speed for level 2
						asteroids.push(newAsteroid);
						game.addChild(newAsteroid);
					}
				}
				break;
			}
		}
	}
	if (LK.ticks % 120 == 0) {
		var newMineral = new Mineral();
		newMineral.x = Math.random() * 2048;
		newMineral.y = -50;
		minerals.push(newMineral);
		game.addChild(newMineral);
	}
	for (var j = minerals.length - 1; j >= 0; j--) {
		var mineral = minerals[j];
		if (mineral.y > 2732) {
			mineral.destroy();
			minerals.splice(j, 1);
			continue;
		}
		if (spaceship.intersects(mineral)) {
			score += 10;
			scoreTxt.setText('Score: ' + score);
			mineral.destroy();
			minerals.splice(j, 1);
		}
	}
};
LK.playMusic('bgMusic'); /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Asteroid = Container.expand(function () {
	var self = Container.call(this);
	var asteroidGraphics = self.attachAsset('asteroid', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var bulletGraphics = self.attachAsset('bullet', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = -10;
	self.update = function () {
		self.y += self.speed;
	};
	return self;
});
var EquipIcon = Container.expand(function () {
	var self = Container.call(this);
	var equipGraphics = self.attachAsset('shopIcon', {
		anchorX: 0.5,
		anchorY: 0.5,
		tint: 0x00ff00 // Set color to green
	});
	self.down = function (x, y, obj) {
		console.log("Equip icon clicked. Showing gun selection box.");
		var gunSelectionBox = new GunSelectionBox();
		game.addChild(gunSelectionBox);
	};
	return self;
});
var GunSelectionBox = Container.expand(function () {
	var self = Container.call(this);
	var boxGraphics = self.attachAsset('shopIcon', {
		anchorX: 0.5,
		anchorY: 0.5,
		tint: 0x333333 // Dark gray for the box
	});
	self.x = 2048 / 2;
	self.y = 2732 / 2;
	self.width = 600;
	self.height = 800;
	var guns = ['Pistol', 'Rifle', 'Shotgun', 'Sniper'];
	var startY = -150;
	guns.forEach(function (gun, index) {
		var gunText = new Text2(gun, {
			size: 80,
			fill: 0xFFFFFF
		});
		gunText.anchor.set(0.5, 0.5);
		gunText.x = 0;
		gunText.y = startY + index * 100;
		gunText.down = function (x, y, obj) {
			selectedGun = {
				name: gun
			};
			console.log(gun + " selected!");
			self.destroy(); // Close the selection box after selecting a gun
		};
		self.addChild(gunText);
	});
	return self;
});
var HealthBar = Container.expand(function () {
	var self = Container.call(this);
	var barBackground = self.addChild(new Container());
	var barForeground = self.addChild(new Container());
	var backgroundGraphics = barBackground.attachAsset('healthBarBackground', {
		anchorX: 0,
		anchorY: 0,
		x: -150,
		y: -25,
		width: 300,
		height: 50
	});
	var foregroundGraphics = barForeground.attachAsset('healthBarForeground', {
		anchorX: 0,
		anchorY: 0,
		x: -150,
		y: -25,
		width: 300,
		height: 50
	});
	self.updateHealth = function (health) {
		barForeground.scaleX = health / 3; // Assuming max health is 3
		if (health < 3) {
			foregroundGraphics.tint = 0xff0000; // Change color to red when health decreases
		} else {
			foregroundGraphics.tint = 0x61d695; // Reset color to original when health is full
		}
	};
	return self;
});
var HomeBase = Container.expand(function () {
	var self = Container.call(this);
	var baseGraphics = self.attachAsset('homeBase', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
var Mineral = Container.expand(function () {
	var self = Container.call(this);
	var mineralGraphics = self.attachAsset('mineral', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	return self;
});
var ShopIcon = Container.expand(function () {
	var self = Container.call(this);
	var shopGraphics = self.attachAsset('shopIcon', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.down = function (x, y, obj) {
		console.log("Shop icon clicked. Open shop to buy more guns.");
		var shopBox = new Container();
		shopBox.x = 2048 / 2;
		shopBox.y = 2732 / 2;
		shopBox.width = 600;
		shopBox.height = 800;
		shopBox.attachAsset('shopIcon', {
			anchorX: 0.5,
			anchorY: 0.5
		});
		game.addChild(shopBox);
		var shopMenu = new Container();
		var items = [{
			name: 'Shotgun',
			price: 10
		}, {
			name: 'Laser Gun',
			price: 20
		}, {
			name: 'Rocket Launcher',
			price: 30
		}, {
			name: 'Plasma Rifle',
			price: 40
		}, {
			name: 'Sniper Cannon',
			price: 50
		}];
		var startY = 2732 / 2 - 100;
		items.forEach(function (item, index) {
			var itemText = new Text2('Buy ' + item.name + ': ' + item.price + ' Score', {
				size: 80,
				fill: 0xFFFFFF
			});
			itemText.anchor.set(0.5, 0.5);
			itemText.x = 2048 / 2;
			itemText.y = startY + index * 100;
			itemText.down = function (x, y, obj) {
				if (score >= item.price) {
					score -= item.price;
					scoreTxt.setText('Score: ' + score);
					console.log(item.name + " purchased!");
					shopMenu.destroy();
					// Apply score multiplier based on the purchased gun
					if (item.name === 'Shotgun') {
						scoreMultiplier = 2;
					} else if (item.name === 'Laser Gun') {
						scoreMultiplier = 3;
					} else if (item.name === 'Rocket Launcher') {
						scoreMultiplier = 4;
					}
				} else {
					console.log("Not enough score to buy " + item.name + ".");
				}
			};
			shopMenu.addChild(itemText);
		});
		game.addChild(shopMenu);
	};
	return self;
});
var Spaceship = Container.expand(function () {
	var self = Container.call(this);
	var spaceshipGraphics = self.attachAsset('spaceship', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.energy = 100;
	self.update = function () {
		// Update logic for spaceship
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
// Initialize assets used in this game. Scale them according to what is needed for the game.
game.setBackgroundColor(0x000000);
var homeBase = game.addChild(new HomeBase());
homeBase.x = 2048 / 2;
homeBase.y = 2732 - 300;
var spaceship = game.addChild(new Spaceship());
spaceship.x = 2048 / 2;
spaceship.y = 2732 - 150;
var asteroids = [];
var minerals = [];
var bullets = [];
var score = 0;
var energy = 100;
var scoreMultiplier = 1; // Default score multiplier
var selectedGun = null; // Initialize selectedGun variable
var health = 3; // Initialize health for the spaceship
var healthBar = game.addChild(new HealthBar());
healthBar.x = 2048 / 2;
healthBar.y = 50;
healthBar.updateHealth(health);
var scoreTxt = new Text2('Score: 0', {
	size: 100,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var energyTxt = new Text2('Energy: 100', {
	size: 100,
	fill: 0xFFFFFF
});
var shopIcon = game.addChild(new ShopIcon());
shopIcon.x = 2048 - 100; // Position shop icon at the bottom-right corner
shopIcon.y = 2732 - 100;
var equipIcon = game.addChild(new EquipIcon());
equipIcon.x = 2048 - 500; // Move equip icon further to the left
equipIcon.y = 2732 - 200; // Move equip icon up
energyTxt.anchor.set(0.5, 0);
LK.gui.topRight.addChild(energyTxt);
function handleMove(x, y, obj) {
	if (dragNode) {
		dragNode.x = x;
		dragNode.y = y;
	}
}
game.move = handleMove;
game.down = function (x, y, obj) {
	dragNode = spaceship;
	handleMove(x, y, obj);
	var newBullet = new Bullet();
	newBullet.x = spaceship.x;
	newBullet.y = spaceship.y - 50;
	bullets.push(newBullet);
	game.addChild(newBullet);
};
game.up = function (x, y, obj) {
	dragNode = null;
};
game.update = function () {
	if (LK.ticks % 60 == 0) {
		var newAsteroid = new Asteroid();
		newAsteroid.x = Math.random() * 2048;
		newAsteroid.y = -50;
		asteroids.push(newAsteroid);
		game.addChild(newAsteroid);
	}
	for (var i = asteroids.length - 1; i >= 0; i--) {
		var asteroid = asteroids[i];
		if (asteroid.y > 2732) {
			if (asteroid.intersects(homeBase)) {
				health -= 1; // Decrease health when asteroid reaches home base
				healthBar.updateHealth(health);
				if (health <= 0) {
					LK.showGameOver(); // Show game over screen and reset game state
					return; // Exit the update loop
				}
			}
			asteroid.destroy();
			asteroids.splice(i, 1);
			continue;
		}
		if (spaceship.intersects(asteroid)) {
			health -= 1; // Decrease health when asteroid passes through spaceship
			healthBar.updateHealth(health);
			if (health <= 0) {
				LK.showGameOver(); // Show game over screen and reset game state
				return; // Exit the update loop
			}
			asteroid.destroy();
			asteroids.splice(i, 1);
			continue;
		}
	}
	for (var k = bullets.length - 1; k >= 0; k--) {
		var bullet = bullets[k];
		if (bullet.y < -50) {
			bullet.destroy();
			bullets.splice(k, 1);
			continue;
		}
		for (var l = asteroids.length - 1; l >= 0; l--) {
			var asteroid = asteroids[l];
			if (bullet.intersects(asteroid)) {
				score += 5 * scoreMultiplier;
				scoreTxt.setText('Score: ' + score);
				bullet.destroy();
				bullets.splice(k, 1);
				asteroid.destroy();
				asteroids.splice(l, 1);
				if (asteroids.length === 0) {
					// Advance to level 2
					for (var m = 0; m < 10; m++) {
						// Increase number of asteroids
						var newAsteroid = new Asteroid();
						newAsteroid.x = Math.random() * 2048;
						newAsteroid.y = -50;
						newAsteroid.speed = 5; // Increase speed for level 2
						asteroids.push(newAsteroid);
						game.addChild(newAsteroid);
					}
				}
				break;
			}
		}
	}
	if (LK.ticks % 120 == 0) {
		var newMineral = new Mineral();
		newMineral.x = Math.random() * 2048;
		newMineral.y = -50;
		minerals.push(newMineral);
		game.addChild(newMineral);
	}
	for (var j = minerals.length - 1; j >= 0; j--) {
		var mineral = minerals[j];
		if (mineral.y > 2732) {
			mineral.destroy();
			minerals.splice(j, 1);
			continue;
		}
		if (spaceship.intersects(mineral)) {
			score += 10;
			scoreTxt.setText('Score: ' + score);
			mineral.destroy();
			minerals.splice(j, 1);
		}
	}
};
LK.playMusic('bgMusic');