/**** 
* Classes
****/
var HelpMenuBackground = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var backgroundGraphics = self.attachAsset('helpMenuBackground', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Create and add welcome text to the HelpMenuBackground
	var textline1 = new Text2('Welcome to Blast through the Cosmos - Your Ultimate Space Adventure!', {
		size: 60,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline1.anchor.set(0.5);
	textline1.x = 0;
	textline1.y = -800; // Position the text at 0,0
	self.addChild(textline1);
	// Create and add controls text to the HelpMenuBackground
	var textline2 = new Text2('Controls:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center'
	});
	textline2.anchor.set(0.5);
	textline2.x = 0;
	textline2.y = -650; // Position the text below textline1
	self.addChild(textline2);
	self.x = positionX;
	var textline3 = new Text2('Move your spaceship: For mouse, the spaceship will follow your cursor. For phone, tap where you want your ship to go.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline3.anchor.set(0.5);
	textline3.x = 0;
	textline3.y = -500; // Position the text below textline2
	self.addChild(textline3);
	var textline4 = new Text2('Fire bullets: Double Tap anywhere on the screen.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline4.anchor.set(0.5);
	textline4.x = 0;
	textline4.y = -350; // Position the text below textline3
	self.addChild(textline4);
	var textline5 = new Text2('Objective:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline5.anchor.set(0.5);
	textline5.x = 0;
	textline5.y = -200; // Position the text below textline4
	self.addChild(textline5);
	var textline6 = new Text2('Destroy the robotic android enemies to increase your score, Cosmic Credits, and replenish your bullets.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline6.anchor.set(0.5);
	textline6.x = 0;
	textline6.y = -100; // Position the text below textline5
	self.addChild(textline6);
	var textline7 = new Text2('Running out of bullets results in defeat, so keep an eye on your ammo!', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline7.anchor.set(0.5);
	textline7.x = 0;
	textline7.y = 0 + 50; // Position the text below textline6
	self.addChild(textline7);
	var textline8 = new Text2('Game Elements:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline8.anchor.set(0.5);
	textline8.x = 0;
	textline8.y = textline7.y + 150; // Position the text below textline7
	self.addChild(textline8);
	var textline9 = new Text2('Bullets: Start with 3 bullets. Shoot enemies to gain Cosmic Credits and earn back your bullets. Collect bullet packs to add 5 bullets instantly.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline9.anchor.set(0.5);
	textline9.x = 0;
	textline9.y = textline8.y + 150; // Position the text below textline8
	self.addChild(textline9);
	var textline10 = new Text2('Cosmic Credits (CC): Use CC to purchase bullets. Spend wisely to survive longer and achieve higher scores.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline10.anchor.set(0.5);
	textline10.x = 0;
	textline10.y = textline9.y + 200; // Position the text below textline9
	self.addChild(textline10);
	var textline11 = new Text2('Tips for Success:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline11.anchor.set(0.5);
	textline11.x = 0;
	textline11.y = textline10.y + 150; // Position the text below textline10
	self.addChild(textline11);
	var textline12 = new Text2('Prioritize enemies strategically to maximize your score and rewards.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline12.anchor.set(0.5);
	textline12.x = 0;
	textline12.y = textline11.y + 100; // Position the text below textline11
	self.addChild(textline12);
	var textline13 = new Text2('Master your spaceship\'s movements to navigate through challenging obstacles.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline13.anchor.set(0.5);
	textline13.x = 0;
	textline13.y = textline12.y + 150; // Position the text below textline12
	self.addChild(textline13);
	var textline14 = new Text2('Save up Cosmic Credits for crucial upgrades as you progress.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline14.anchor.set(0.5);
	textline14.x = 0;
	textline14.y = textline13.y + 175; // Position the text below textline13
	self.addChild(textline14);
	var textline15 = new Text2('This game is no longer updated.', {
		size: 45,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline15.anchor.set(0.5);
	textline15.x = 0;
	textline15.y = textline14.y + 150; // Position the text below textline14
	self.addChild(textline15);
	self.y = positionY;
});
var RestartButton = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('restartButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var restartText = new Text2('Restart', {
		size: 150,
		fill: "#ffffff",
		font: "Game Over"
	});
	restartText.anchor.set(0.5);
	self.addChild(restartText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
		LK.showGameOver();
	});
});
var ResumeButton = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('resume', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Create and add the resume text to the button
	var resumeText = new Text2('Resume', {
		size: 150,
		fill: "#ffffff",
		font: "Game Over"
	});
	resumeText.anchor.set(0.5);
	self.addChild(resumeText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
		isGamePaused = false;
		bulletAddedOnPause = false;
		pauseButton.interactive = true; // Re-enable the pause button
		self.destroy();
		pauseMenuBackground.destroy();
		restartButton.destroy();
		settingsButton.destroy();
	});
});
var PurchaseButtonWithText = Container.expand(function (buttonAssetId, buttonText, buttonSubText, positionX, positionY, onClickCallback) {
	var self = Container.call(this);
	var button = self.attachAsset('purchase1', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var text = new Text2(buttonText, {
		size: 45,
		fill: "#ffffff",
		font: "Game Over"
	});
	var subText = new Text2(buttonSubText, {
		size: 45,
		fill: "#ffffff",
		font: "Game Over"
	});
	text.anchor.set(0.5, 1);
	subText.anchor.set(0.5, 0);
	text.y = -button.height / 2 - 10;
	subText.y = button.height / 2 + 10;
	self.addChild(text);
	self.addChild(subText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
		onClickCallback();
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
	});
});
// BulletPack class
var BulletPack = Container.expand(function () {
	var self = Container.call(this);
	var bulletPackGraphics = self.attachAsset('bulletPack', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.move = function () {
		var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002;
		self.y += self.speed + speedIncreaseFactor;
		// Randomly change direction with a 10% chance each tick
		if (Math.random() < 0.1) {
			self.direction *= -1;
		}
		self.x += self.direction * (10 + speedIncreaseFactor);
		// Keep BulletPack within game bounds
		if (self.x < 0) {
			self.x = 0;
			self.direction *= -1;
		}
		if (self.x > game.width) {
			self.x = game.width;
			self.direction *= -1;
		}
	};
});
// Character class
var Hero = Container.expand(function () {
	var self = Container.call(this);
	var heroGraphics = self.attachAsset('hero', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.bulletLimit = 3; // Initialize bullet limit
	self.canShoot = true; // Allow shooting initially
	self.update = function () {
		// Hero update logic
	};
	self.shoot = function () {
		if (this.bulletLimit > 0 && this.canShoot && !isGamePaused) {
			var bullet = new Bullet();
			bullet.x = this.x;
			bullet.y = this.y - this.height / 2;
			heroBullets.push(bullet);
			game.addChild(bullet);
			this.bulletLimit--;
			bulletCountTxt.setText('Bullets: ' + this.bulletLimit); // Update bullet count display
			this.canShoot = false; // Set shooting cooldown
			LK.setTimeout(function () {
				self.canShoot = true;
			}, 500); // Cooldown of 500ms before next shot
		}
	};
});
// Bullet class
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var bulletGraphics = self.attachAsset('Bullet', {
		anchorX: 0.0625,
		anchorY: 0.0625
	});
	self.speed = -10;
	self.move = function () {
		self.y += self.speed;
	};
});
// Enemy class
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.move = function () {
		self.y += self.speed;
		var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002; // Increase the speed factor over time
		self.x += self.direction * (4 + speedIncreaseFactor);
		// Randomly change direction with a 5% chance each tick
		if (Math.random() < 0.05 || self.x < 0 || self.x > game.width) {
			self.direction *= -1;
		}
		// Keep enemy within game bounds
		if (self.x < 0) {
			self.x = 0;
		}
		if (self.x > game.width) {
			self.x = game.width;
		}
		self.speed += 0.02 + LK.ticks * 0.0001; // Increase speed over time with an accelerating factor
	};
});
var Button = Container.expand(function (text, positionX, positionY, onClickCallback) {
	var self = Container.call(this);
	var buttonText = new Text2(text, {
		size: 200,
		fill: "#ffffff"
	});
	buttonText.anchor.set(0.5);
	self.addChild(buttonText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
		onClickCallback();
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
	});
});
// JoystickAsset class
var JoystickAsset = Container.expand(function () {
	var self = Container.call(this);
	self.interactive = true;
	self.isDragging = false;
	self.onMoveCallback = null;
	self.setMoveCallback = function (callback) {
		self.onMoveCallback = function (direction) {
			callback({
				x: direction.x,
				y: 0
			});
		};
	};
	self.on('down', function (obj) {
		self.isDragging = true;
	});
	self.on('up', function (obj) {
		self.isDragging = false;
		stickGraphics.x = stickOrigin.x;
		stickGraphics.y = stickOrigin.y;
		if (self.onMoveCallback) {
			self.onMoveCallback({
				x: 0,
				y: 0
			});
		}
	});
	self.on('move', function (obj) {
		if (self.isDragging) {
			var event = obj.event;
			var pos = event.getLocalPosition(self);
			var dx = pos.x - stickOrigin.x;
			var maxDistance = stickGraphics.width * 0.5;
			if (Math.abs(dx) > maxDistance) {
				dx = maxDistance * (dx > 0 ? 1 : -1);
			}
			stickGraphics.x = stickOrigin.x + dx;
			stickGraphics.y = stickOrigin.y;
			if (self.onMoveCallback) {
				self.onMoveCallback({
					x: dx / maxDistance,
					y: 0
				});
			}
		}
	});
	self.containsPoint = function (point) {
		return point.x >= self.x - self.width / 2 && point.x <= self.x + self.width / 2 && point.y >= self.y - self.height / 2 && point.y <= self.y + self.height / 2;
	};
});
var SettingsButton = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('help', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Create and add the settings text to the button
	var settingsText = new Text2('Help', {
		size: 150,
		fill: "#ffffff",
		font: "Game Over"
	});
	settingsText.anchor.set(0.5);
	self.addChild(settingsText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
		var settingsMenuOpen = false;
		var helpMenuBackground = game.addChild(new HelpMenuBackground(game.width / 2, game.height / 2));
		settingsMenuOpen = true;
		// Add 'exit' asset to the settings menu
		var exitButton = helpMenuBackground.addChild(LK.getAsset('exit', {
			anchorX: 0.5,
			anchorY: 0.5,
			x: game.width / 2 - 1000,
			// Move 100 pixels to the left
			y: -1250
		}));
		exitButton.interactive = true;
		exitButton.on('down', function () {
			exitButton.alpha = 0.5;
		});
		exitButton.on('up', function () {
			exitButton.alpha = 1.0;
			helpMenuBackground.destroy(); // Close help menu
			settingsMenuOpen = false;
		});
	});
});
/**** 
* Initialize Game
****/
var game = new LK.Game({
	title: 'gameplaypage'
});
/**** 
* Game Code
****/
var backgrounds = ['gameBackground', 'gamebackground2', 'gamebackground3', 'gamebackground4', 'gamebackground5', 'gamebackground6', 'gamebackground7', 'gamebackground8', 'gamebackground9', 'gamebackground10'];
var selectedBackground = backgrounds[Math.floor(Math.random() * backgrounds.length)];
var background = game.addChild(LK.getAsset(selectedBackground, {
	width: game.width,
	height: game.height,
	x: game.width / 2,
	y: game.height / 2,
	anchorX: 0.5,
	anchorY: 0.5
}));
var pauseMenuBackground, resumeButton, restartButton, settingsButton;
function showPauseMenu() {
	if (isGamePaused) {
		pauseMenuBackground = game.addChild(LK.getAsset('pauseMenuBackground', {
			width: game.width,
			height: game.height,
			color: 0x000000,
			alpha: 0.5
		}));
		resumeButton = game.addChild(new ResumeButton(game.width / 2, game.height / 2 - 750));
		restartButton = game.addChild(new RestartButton(game.width / 2, game.height / 2 + 250));
		settingsButton = game.addChild(new SettingsButton(game.width / 2, game.height / 2 - 250));
	}
}
var isGamePaused = false,
	settingsMenuOpen = false; // Global variables to track the pause state of the game and settings menu state
var Purchase1 = game.addChild(new PurchaseButtonWithText('purchase1', '10 Bullets for:', '50 Cosmic Credits', 200, game.height - 200, function () {
	if (cosmicCredits >= 50) {
		cosmicCredits -= 50;
		hero.bulletLimit += 10;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
}));
Purchase1.interactive = true;
Purchase1.on('down', function () {
	Purchase1.alpha = 0.5;
	if (cosmicCredits >= 50) {
		cosmicCredits -= 50;
		hero.bulletLimit += 10;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
});
Purchase1.on('up', function () {
	Purchase1.alpha = 1.0;
});
var purchase2 = game.addChild(new PurchaseButtonWithText('purchase2', '20 Bullets for:', '75 Cosmic Credits', game.width - 200, game.height - 200, function () {
	if (cosmicCredits >= 75) {
		cosmicCredits -= 75;
		hero.bulletLimit += 20;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
}));
purchase2.interactive = true;
purchase2.on('down', function () {
	purchase2.alpha = 0.5;
	if (cosmicCredits >= 75) {
		cosmicCredits -= 75;
		hero.bulletLimit += 20;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
});
purchase2.on('up', function () {
	purchase2.alpha = 1.0;
});
// Initialize important asset arrays
var heroBullets = [];
var enemies = [];
// Create character
var hero = game.addChild(new Hero());
hero.x = game.width / 2;
hero.y = game.height - 100;
var cosmicCredits = 0; // Initialize cosmic credits
// Create score display
var scoreTxt = new Text2('Score: 0', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
});
var cosmicCreditsTxt = new Text2('Cosmic Credits: 0', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
}); // New currency display
scoreTxt.anchor.set(1, 0);
cosmicCreditsTxt.anchor.set(1, 0);
cosmicCreditsTxt.y = scoreTxt.y + scoreTxt.height + 20; // Position below the score display
LK.gui.topRight.addChild(scoreTxt);
LK.gui.topRight.addChild(cosmicCreditsTxt); // Add the cosmic credits display to the GUI
// Create version display
var versionTxt = new Text2('v0.3.0 BETA', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
});
versionTxt.anchor.set(1, 0);
versionTxt.y = cosmicCreditsTxt.y + cosmicCreditsTxt.height + 20; // Position below the cosmic credits display
LK.gui.topRight.addChild(versionTxt); // Add the version display to the GUI
// Create bullet count display
var bulletCountTxt = new Text2('Bullets: 3', {
	size: 100,
	fill: "#ffffff",
	font: "Game Over"
});
bulletCountTxt.anchor.set(0, 0);
bulletCountTxt.y = scoreTxt.height + 50; // Position below the score display
LK.gui.topLeft.addChild(bulletCountTxt);
// Create instructions display
var instructionsTxt = new Text2('Double tap anywhere to shoot', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
});
instructionsTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(instructionsTxt);
// Pause button event listener
var pauseButton = game.addChild(LK.getAsset('pause', {
	x: 1000
}));
pauseButton.interactive = true;
var bulletAddedOnPause = false;
pauseButton.on('down', function () {
	if (!isGamePaused && !settingsMenuOpen) {
		isGamePaused = true;
		pauseButton.interactive = false; // Disable the pause button
		// Make the bullet closest to the hero null
		var closestBullet = null;
		var closestDistance = Infinity;
		heroBullets.forEach(function (bullet) {
			var distance = hero.y - bullet.y;
			if (distance >= 0 && distance < closestDistance) {
				closestDistance = distance;
				closestBullet = bullet;
			}
		});
		if (closestBullet) {
			closestBullet.destroy();
			heroBullets.splice(heroBullets.indexOf(closestBullet), 1);
		}
		showPauseMenu();
	}
});
// Create a red line 3/4 down the screen
var redLine = LK.getAsset('redLine', {});
redLine.width = game.width;
redLine.height = 5;
redLine.y = game.height * 0.75;
game.addChild(redLine);
// Create joystick instance
var joystick = new JoystickAsset();
joystick.x = joystick.width / 2 + 150;
joystick.y = game.height - joystick.height / 2 - 150;
joystick.setMoveCallback(function (direction) {
	hero.x = Math.max(hero.width / 2, Math.min(game.width - hero.width / 2, hero.x + direction.x * 10));
});
game.addChild(joystick);
// Handle tap on the game stage to shoot bullets, excluding buttons
var dragNode = null;
var lastTapTime = 0;
game.on('down', function (obj) {
	var currentTime = Date.now();
	var event = obj.event;
	var pos = event.getLocalPosition(game);
	// Check if the tap is not on any button or the pause button
	var purchaseButtonBoundsLeft = Purchase1.getBounds();
	var purchaseButtonBoundsRight = purchase2.getBounds();
	var pauseButtonBounds = pauseButton.getBounds();
	if (!(pos.x >= purchaseButtonBoundsLeft.x && pos.x <= purchaseButtonBoundsLeft.x + purchaseButtonBoundsLeft.width && pos.y >= purchaseButtonBoundsLeft.y && pos.y <= purchaseButtonBoundsLeft.y + purchaseButtonBoundsLeft.height || pos.x >= purchaseButtonBoundsRight.x && pos.x <= purchaseButtonBoundsRight.x + purchaseButtonBoundsRight.width && pos.y >= purchaseButtonBoundsRight.y && pos.y <= purchaseButtonBoundsRight.y + purchaseButtonBoundsRight.height || pos.x >= pauseButtonBounds.x && pos.x <= pauseButtonBounds.x + pauseButtonBounds.width && pos.y >= pauseButtonBounds.y && pos.y <= pauseButtonBounds.y + pauseButtonBounds.height) && !joystick.containsPoint(pos)) {
		if (currentTime - lastTapTime < 300) {
			hero.shoot();
		}
		lastTapTime = currentTime;
	}
});
game.on('move', function (obj) {
	if (isGamePaused) {
		return;
	}
	var event = obj.event;
	var pos = event.getLocalPosition(game);
	hero.x = pos.x;
	// hero.y = pos.y; // Removed the line that sets the hero's y position
});
// Game tick event
LK.on('tick', function () {
	if (isGamePaused || settingsMenuOpen) {
		return;
	} // Stop updating if game is paused or settings menu is open
	// Update character
	hero.update();
	// Move and check bullets
	for (var i = heroBullets.length - 1; i >= 0; i--) {
		var bullet = heroBullets[i];
		bullet.move();
		// Check for bullet collision with enemies and bullet packs
		for (var j = enemies.length - 1; j >= 0; j--) {
			if (bullet.intersects(enemies[j])) {
				if (enemies[j] instanceof BulletPack) {
					// If the enemy is a bullet pack
					// Increment character's bullet limit by 5
					hero.bulletLimit += 5;
				} else {
					// If the enemy is an actual enemy
					// Update score and increase cosmic credits by 5
					var newScore = LK.getScore() + 1;
					LK.setScore(newScore);
					scoreTxt.setText('Score: ' + newScore);
					cosmicCredits += 5;
					cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
					if (typeof localStorage !== 'undefined' && newScore > highScore) {
						localStorage.setItem('highScore', newScore.toString());
					}
					// Increment character's bullet limit
					hero.bulletLimit++;
				}
				bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
				// Destroy enemy/bullet pack and bullet
				enemies[j].destroy();
				enemies.splice(j, 1);
				bullet.destroy();
				heroBullets.splice(i, 1);
				break;
			}
		}
		// Remove off-screen bullets and end the game if it's the last one
		if (bullet.y < 0) {
			bullet.destroy();
			heroBullets.splice(i, 1);
			if (heroBullets.length === 0 && hero.bulletLimit === 0) {
				LK.showGameOver(); // End the game when the last bullet is out of frame
			}
		}
	}
	// Move enemies and check if they pass the red line
	for (var k = enemies.length - 1; k >= 0; k--) {
		enemies[k].move();
		if (enemies[k].y > game.height * 0.75) {
			enemies[k].destroy();
			enemies[k] = null;
			enemies.splice(k, 1);
		}
	}
	var enemySpawnRate = 60; // Initialize enemy spawn rate
	// Spawn enemies and bullet packs
	if (LK.ticks % enemySpawnRate == 0) {
		var enemy = new Enemy();
		enemy.x = Math.random() * (game.width - enemy.width) + enemy.width / 2;
		enemy.y = -enemy.height;
		enemies.push(enemy);
		game.addChild(enemy);
		if (enemySpawnRate > 30) {
			enemySpawnRate -= 0.5;
		} // Decrease spawn rate over time to a minimum of 30 ticks
	}
	if (LK.ticks % 600 == 0) {
		// Spawn a bullet pack every 600 ticks
		var bulletPack = new BulletPack();
		bulletPack.x = Math.random() * (game.width - bulletPack.width) + bulletPack.width / 2;
		bulletPack.y = -bulletPack.height;
		enemies.push(bulletPack); // Add bullet pack to enemies array for collision detection
		game.addChild(bulletPack);
	}
}); /**** 
* Classes
****/
var HelpMenuBackground = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var backgroundGraphics = self.attachAsset('helpMenuBackground', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Create and add welcome text to the HelpMenuBackground
	var textline1 = new Text2('Welcome to Blast through the Cosmos - Your Ultimate Space Adventure!', {
		size: 60,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline1.anchor.set(0.5);
	textline1.x = 0;
	textline1.y = -800; // Position the text at 0,0
	self.addChild(textline1);
	// Create and add controls text to the HelpMenuBackground
	var textline2 = new Text2('Controls:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center'
	});
	textline2.anchor.set(0.5);
	textline2.x = 0;
	textline2.y = -650; // Position the text below textline1
	self.addChild(textline2);
	self.x = positionX;
	var textline3 = new Text2('Move your spaceship: For mouse, the spaceship will follow your cursor. For phone, tap where you want your ship to go.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline3.anchor.set(0.5);
	textline3.x = 0;
	textline3.y = -500; // Position the text below textline2
	self.addChild(textline3);
	var textline4 = new Text2('Fire bullets: Double Tap anywhere on the screen.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline4.anchor.set(0.5);
	textline4.x = 0;
	textline4.y = -350; // Position the text below textline3
	self.addChild(textline4);
	var textline5 = new Text2('Objective:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline5.anchor.set(0.5);
	textline5.x = 0;
	textline5.y = -200; // Position the text below textline4
	self.addChild(textline5);
	var textline6 = new Text2('Destroy the robotic android enemies to increase your score, Cosmic Credits, and replenish your bullets.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline6.anchor.set(0.5);
	textline6.x = 0;
	textline6.y = -100; // Position the text below textline5
	self.addChild(textline6);
	var textline7 = new Text2('Running out of bullets results in defeat, so keep an eye on your ammo!', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline7.anchor.set(0.5);
	textline7.x = 0;
	textline7.y = 0 + 50; // Position the text below textline6
	self.addChild(textline7);
	var textline8 = new Text2('Game Elements:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline8.anchor.set(0.5);
	textline8.x = 0;
	textline8.y = textline7.y + 150; // Position the text below textline7
	self.addChild(textline8);
	var textline9 = new Text2('Bullets: Start with 3 bullets. Shoot enemies to gain Cosmic Credits and earn back your bullets. Collect bullet packs to add 5 bullets instantly.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline9.anchor.set(0.5);
	textline9.x = 0;
	textline9.y = textline8.y + 150; // Position the text below textline8
	self.addChild(textline9);
	var textline10 = new Text2('Cosmic Credits (CC): Use CC to purchase bullets. Spend wisely to survive longer and achieve higher scores.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline10.anchor.set(0.5);
	textline10.x = 0;
	textline10.y = textline9.y + 200; // Position the text below textline9
	self.addChild(textline10);
	var textline11 = new Text2('Tips for Success:', {
		size: 50,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline11.anchor.set(0.5);
	textline11.x = 0;
	textline11.y = textline10.y + 150; // Position the text below textline10
	self.addChild(textline11);
	var textline12 = new Text2('Prioritize enemies strategically to maximize your score and rewards.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline12.anchor.set(0.5);
	textline12.x = 0;
	textline12.y = textline11.y + 100; // Position the text below textline11
	self.addChild(textline12);
	var textline13 = new Text2('Master your spaceship\'s movements to navigate through challenging obstacles.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline13.anchor.set(0.5);
	textline13.x = 0;
	textline13.y = textline12.y + 150; // Position the text below textline12
	self.addChild(textline13);
	var textline14 = new Text2('Save up Cosmic Credits for crucial upgrades as you progress.', {
		size: 70,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline14.anchor.set(0.5);
	textline14.x = 0;
	textline14.y = textline13.y + 175; // Position the text below textline13
	self.addChild(textline14);
	var textline15 = new Text2('This game is no longer updated.', {
		size: 45,
		fill: "#ffffff",
		font: "Game Over",
		align: 'center',
		wordWrap: true,
		wordWrapWidth: game.width * 0.8
	});
	textline15.anchor.set(0.5);
	textline15.x = 0;
	textline15.y = textline14.y + 150; // Position the text below textline14
	self.addChild(textline15);
	self.y = positionY;
});
var RestartButton = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('restartButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var restartText = new Text2('Restart', {
		size: 150,
		fill: "#ffffff",
		font: "Game Over"
	});
	restartText.anchor.set(0.5);
	self.addChild(restartText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
		LK.showGameOver();
	});
});
var ResumeButton = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('resume', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Create and add the resume text to the button
	var resumeText = new Text2('Resume', {
		size: 150,
		fill: "#ffffff",
		font: "Game Over"
	});
	resumeText.anchor.set(0.5);
	self.addChild(resumeText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
		isGamePaused = false;
		bulletAddedOnPause = false;
		pauseButton.interactive = true; // Re-enable the pause button
		self.destroy();
		pauseMenuBackground.destroy();
		restartButton.destroy();
		settingsButton.destroy();
	});
});
var PurchaseButtonWithText = Container.expand(function (buttonAssetId, buttonText, buttonSubText, positionX, positionY, onClickCallback) {
	var self = Container.call(this);
	var button = self.attachAsset('purchase1', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var text = new Text2(buttonText, {
		size: 45,
		fill: "#ffffff",
		font: "Game Over"
	});
	var subText = new Text2(buttonSubText, {
		size: 45,
		fill: "#ffffff",
		font: "Game Over"
	});
	text.anchor.set(0.5, 1);
	subText.anchor.set(0.5, 0);
	text.y = -button.height / 2 - 10;
	subText.y = button.height / 2 + 10;
	self.addChild(text);
	self.addChild(subText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
		onClickCallback();
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
	});
});
// BulletPack class
var BulletPack = Container.expand(function () {
	var self = Container.call(this);
	var bulletPackGraphics = self.attachAsset('bulletPack', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.move = function () {
		var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002;
		self.y += self.speed + speedIncreaseFactor;
		// Randomly change direction with a 10% chance each tick
		if (Math.random() < 0.1) {
			self.direction *= -1;
		}
		self.x += self.direction * (10 + speedIncreaseFactor);
		// Keep BulletPack within game bounds
		if (self.x < 0) {
			self.x = 0;
			self.direction *= -1;
		}
		if (self.x > game.width) {
			self.x = game.width;
			self.direction *= -1;
		}
	};
});
// Character class
var Hero = Container.expand(function () {
	var self = Container.call(this);
	var heroGraphics = self.attachAsset('hero', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.bulletLimit = 3; // Initialize bullet limit
	self.canShoot = true; // Allow shooting initially
	self.update = function () {
		// Hero update logic
	};
	self.shoot = function () {
		if (this.bulletLimit > 0 && this.canShoot && !isGamePaused) {
			var bullet = new Bullet();
			bullet.x = this.x;
			bullet.y = this.y - this.height / 2;
			heroBullets.push(bullet);
			game.addChild(bullet);
			this.bulletLimit--;
			bulletCountTxt.setText('Bullets: ' + this.bulletLimit); // Update bullet count display
			this.canShoot = false; // Set shooting cooldown
			LK.setTimeout(function () {
				self.canShoot = true;
			}, 500); // Cooldown of 500ms before next shot
		}
	};
});
// Bullet class
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var bulletGraphics = self.attachAsset('Bullet', {
		anchorX: 0.0625,
		anchorY: 0.0625
	});
	self.speed = -10;
	self.move = function () {
		self.y += self.speed;
	};
});
// Enemy class
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.move = function () {
		self.y += self.speed;
		var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002; // Increase the speed factor over time
		self.x += self.direction * (4 + speedIncreaseFactor);
		// Randomly change direction with a 5% chance each tick
		if (Math.random() < 0.05 || self.x < 0 || self.x > game.width) {
			self.direction *= -1;
		}
		// Keep enemy within game bounds
		if (self.x < 0) {
			self.x = 0;
		}
		if (self.x > game.width) {
			self.x = game.width;
		}
		self.speed += 0.02 + LK.ticks * 0.0001; // Increase speed over time with an accelerating factor
	};
});
var Button = Container.expand(function (text, positionX, positionY, onClickCallback) {
	var self = Container.call(this);
	var buttonText = new Text2(text, {
		size: 200,
		fill: "#ffffff"
	});
	buttonText.anchor.set(0.5);
	self.addChild(buttonText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
		onClickCallback();
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
	});
});
// JoystickAsset class
var JoystickAsset = Container.expand(function () {
	var self = Container.call(this);
	self.interactive = true;
	self.isDragging = false;
	self.onMoveCallback = null;
	self.setMoveCallback = function (callback) {
		self.onMoveCallback = function (direction) {
			callback({
				x: direction.x,
				y: 0
			});
		};
	};
	self.on('down', function (obj) {
		self.isDragging = true;
	});
	self.on('up', function (obj) {
		self.isDragging = false;
		stickGraphics.x = stickOrigin.x;
		stickGraphics.y = stickOrigin.y;
		if (self.onMoveCallback) {
			self.onMoveCallback({
				x: 0,
				y: 0
			});
		}
	});
	self.on('move', function (obj) {
		if (self.isDragging) {
			var event = obj.event;
			var pos = event.getLocalPosition(self);
			var dx = pos.x - stickOrigin.x;
			var maxDistance = stickGraphics.width * 0.5;
			if (Math.abs(dx) > maxDistance) {
				dx = maxDistance * (dx > 0 ? 1 : -1);
			}
			stickGraphics.x = stickOrigin.x + dx;
			stickGraphics.y = stickOrigin.y;
			if (self.onMoveCallback) {
				self.onMoveCallback({
					x: dx / maxDistance,
					y: 0
				});
			}
		}
	});
	self.containsPoint = function (point) {
		return point.x >= self.x - self.width / 2 && point.x <= self.x + self.width / 2 && point.y >= self.y - self.height / 2 && point.y <= self.y + self.height / 2;
	};
});
var SettingsButton = Container.expand(function (positionX, positionY) {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('help', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Create and add the settings text to the button
	var settingsText = new Text2('Help', {
		size: 150,
		fill: "#ffffff",
		font: "Game Over"
	});
	settingsText.anchor.set(0.5);
	self.addChild(settingsText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		self.alpha = 0.5;
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
		var settingsMenuOpen = false;
		var helpMenuBackground = game.addChild(new HelpMenuBackground(game.width / 2, game.height / 2));
		settingsMenuOpen = true;
		// Add 'exit' asset to the settings menu
		var exitButton = helpMenuBackground.addChild(LK.getAsset('exit', {
			anchorX: 0.5,
			anchorY: 0.5,
			x: game.width / 2 - 1000,
			// Move 100 pixels to the left
			y: -1250
		}));
		exitButton.interactive = true;
		exitButton.on('down', function () {
			exitButton.alpha = 0.5;
		});
		exitButton.on('up', function () {
			exitButton.alpha = 1.0;
			helpMenuBackground.destroy(); // Close help menu
			settingsMenuOpen = false;
		});
	});
});
/**** 
* Initialize Game
****/
var game = new LK.Game({
	title: 'gameplaypage'
});
/**** 
* Game Code
****/
var backgrounds = ['gameBackground', 'gamebackground2', 'gamebackground3', 'gamebackground4', 'gamebackground5', 'gamebackground6', 'gamebackground7', 'gamebackground8', 'gamebackground9', 'gamebackground10'];
var selectedBackground = backgrounds[Math.floor(Math.random() * backgrounds.length)];
var background = game.addChild(LK.getAsset(selectedBackground, {
	width: game.width,
	height: game.height,
	x: game.width / 2,
	y: game.height / 2,
	anchorX: 0.5,
	anchorY: 0.5
}));
var pauseMenuBackground, resumeButton, restartButton, settingsButton;
function showPauseMenu() {
	if (isGamePaused) {
		pauseMenuBackground = game.addChild(LK.getAsset('pauseMenuBackground', {
			width: game.width,
			height: game.height,
			color: 0x000000,
			alpha: 0.5
		}));
		resumeButton = game.addChild(new ResumeButton(game.width / 2, game.height / 2 - 750));
		restartButton = game.addChild(new RestartButton(game.width / 2, game.height / 2 + 250));
		settingsButton = game.addChild(new SettingsButton(game.width / 2, game.height / 2 - 250));
	}
}
var isGamePaused = false,
	settingsMenuOpen = false; // Global variables to track the pause state of the game and settings menu state
var Purchase1 = game.addChild(new PurchaseButtonWithText('purchase1', '10 Bullets for:', '50 Cosmic Credits', 200, game.height - 200, function () {
	if (cosmicCredits >= 50) {
		cosmicCredits -= 50;
		hero.bulletLimit += 10;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
}));
Purchase1.interactive = true;
Purchase1.on('down', function () {
	Purchase1.alpha = 0.5;
	if (cosmicCredits >= 50) {
		cosmicCredits -= 50;
		hero.bulletLimit += 10;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
});
Purchase1.on('up', function () {
	Purchase1.alpha = 1.0;
});
var purchase2 = game.addChild(new PurchaseButtonWithText('purchase2', '20 Bullets for:', '75 Cosmic Credits', game.width - 200, game.height - 200, function () {
	if (cosmicCredits >= 75) {
		cosmicCredits -= 75;
		hero.bulletLimit += 20;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
}));
purchase2.interactive = true;
purchase2.on('down', function () {
	purchase2.alpha = 0.5;
	if (cosmicCredits >= 75) {
		cosmicCredits -= 75;
		hero.bulletLimit += 20;
		bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
		cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
	}
});
purchase2.on('up', function () {
	purchase2.alpha = 1.0;
});
// Initialize important asset arrays
var heroBullets = [];
var enemies = [];
// Create character
var hero = game.addChild(new Hero());
hero.x = game.width / 2;
hero.y = game.height - 100;
var cosmicCredits = 0; // Initialize cosmic credits
// Create score display
var scoreTxt = new Text2('Score: 0', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
});
var cosmicCreditsTxt = new Text2('Cosmic Credits: 0', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
}); // New currency display
scoreTxt.anchor.set(1, 0);
cosmicCreditsTxt.anchor.set(1, 0);
cosmicCreditsTxt.y = scoreTxt.y + scoreTxt.height + 20; // Position below the score display
LK.gui.topRight.addChild(scoreTxt);
LK.gui.topRight.addChild(cosmicCreditsTxt); // Add the cosmic credits display to the GUI
// Create version display
var versionTxt = new Text2('v0.3.0 BETA', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
});
versionTxt.anchor.set(1, 0);
versionTxt.y = cosmicCreditsTxt.y + cosmicCreditsTxt.height + 20; // Position below the cosmic credits display
LK.gui.topRight.addChild(versionTxt); // Add the version display to the GUI
// Create bullet count display
var bulletCountTxt = new Text2('Bullets: 3', {
	size: 100,
	fill: "#ffffff",
	font: "Game Over"
});
bulletCountTxt.anchor.set(0, 0);
bulletCountTxt.y = scoreTxt.height + 50; // Position below the score display
LK.gui.topLeft.addChild(bulletCountTxt);
// Create instructions display
var instructionsTxt = new Text2('Double tap anywhere to shoot', {
	size: 50,
	fill: "#ffffff",
	font: "Game Over"
});
instructionsTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(instructionsTxt);
// Pause button event listener
var pauseButton = game.addChild(LK.getAsset('pause', {
	x: 1000
}));
pauseButton.interactive = true;
var bulletAddedOnPause = false;
pauseButton.on('down', function () {
	if (!isGamePaused && !settingsMenuOpen) {
		isGamePaused = true;
		pauseButton.interactive = false; // Disable the pause button
		// Make the bullet closest to the hero null
		var closestBullet = null;
		var closestDistance = Infinity;
		heroBullets.forEach(function (bullet) {
			var distance = hero.y - bullet.y;
			if (distance >= 0 && distance < closestDistance) {
				closestDistance = distance;
				closestBullet = bullet;
			}
		});
		if (closestBullet) {
			closestBullet.destroy();
			heroBullets.splice(heroBullets.indexOf(closestBullet), 1);
		}
		showPauseMenu();
	}
});
// Create a red line 3/4 down the screen
var redLine = LK.getAsset('redLine', {});
redLine.width = game.width;
redLine.height = 5;
redLine.y = game.height * 0.75;
game.addChild(redLine);
// Create joystick instance
var joystick = new JoystickAsset();
joystick.x = joystick.width / 2 + 150;
joystick.y = game.height - joystick.height / 2 - 150;
joystick.setMoveCallback(function (direction) {
	hero.x = Math.max(hero.width / 2, Math.min(game.width - hero.width / 2, hero.x + direction.x * 10));
});
game.addChild(joystick);
// Handle tap on the game stage to shoot bullets, excluding buttons
var dragNode = null;
var lastTapTime = 0;
game.on('down', function (obj) {
	var currentTime = Date.now();
	var event = obj.event;
	var pos = event.getLocalPosition(game);
	// Check if the tap is not on any button or the pause button
	var purchaseButtonBoundsLeft = Purchase1.getBounds();
	var purchaseButtonBoundsRight = purchase2.getBounds();
	var pauseButtonBounds = pauseButton.getBounds();
	if (!(pos.x >= purchaseButtonBoundsLeft.x && pos.x <= purchaseButtonBoundsLeft.x + purchaseButtonBoundsLeft.width && pos.y >= purchaseButtonBoundsLeft.y && pos.y <= purchaseButtonBoundsLeft.y + purchaseButtonBoundsLeft.height || pos.x >= purchaseButtonBoundsRight.x && pos.x <= purchaseButtonBoundsRight.x + purchaseButtonBoundsRight.width && pos.y >= purchaseButtonBoundsRight.y && pos.y <= purchaseButtonBoundsRight.y + purchaseButtonBoundsRight.height || pos.x >= pauseButtonBounds.x && pos.x <= pauseButtonBounds.x + pauseButtonBounds.width && pos.y >= pauseButtonBounds.y && pos.y <= pauseButtonBounds.y + pauseButtonBounds.height) && !joystick.containsPoint(pos)) {
		if (currentTime - lastTapTime < 300) {
			hero.shoot();
		}
		lastTapTime = currentTime;
	}
});
game.on('move', function (obj) {
	if (isGamePaused) {
		return;
	}
	var event = obj.event;
	var pos = event.getLocalPosition(game);
	hero.x = pos.x;
	// hero.y = pos.y; // Removed the line that sets the hero's y position
});
// Game tick event
LK.on('tick', function () {
	if (isGamePaused || settingsMenuOpen) {
		return;
	} // Stop updating if game is paused or settings menu is open
	// Update character
	hero.update();
	// Move and check bullets
	for (var i = heroBullets.length - 1; i >= 0; i--) {
		var bullet = heroBullets[i];
		bullet.move();
		// Check for bullet collision with enemies and bullet packs
		for (var j = enemies.length - 1; j >= 0; j--) {
			if (bullet.intersects(enemies[j])) {
				if (enemies[j] instanceof BulletPack) {
					// If the enemy is a bullet pack
					// Increment character's bullet limit by 5
					hero.bulletLimit += 5;
				} else {
					// If the enemy is an actual enemy
					// Update score and increase cosmic credits by 5
					var newScore = LK.getScore() + 1;
					LK.setScore(newScore);
					scoreTxt.setText('Score: ' + newScore);
					cosmicCredits += 5;
					cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
					if (typeof localStorage !== 'undefined' && newScore > highScore) {
						localStorage.setItem('highScore', newScore.toString());
					}
					// Increment character's bullet limit
					hero.bulletLimit++;
				}
				bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
				// Destroy enemy/bullet pack and bullet
				enemies[j].destroy();
				enemies.splice(j, 1);
				bullet.destroy();
				heroBullets.splice(i, 1);
				break;
			}
		}
		// Remove off-screen bullets and end the game if it's the last one
		if (bullet.y < 0) {
			bullet.destroy();
			heroBullets.splice(i, 1);
			if (heroBullets.length === 0 && hero.bulletLimit === 0) {
				LK.showGameOver(); // End the game when the last bullet is out of frame
			}
		}
	}
	// Move enemies and check if they pass the red line
	for (var k = enemies.length - 1; k >= 0; k--) {
		enemies[k].move();
		if (enemies[k].y > game.height * 0.75) {
			enemies[k].destroy();
			enemies[k] = null;
			enemies.splice(k, 1);
		}
	}
	var enemySpawnRate = 60; // Initialize enemy spawn rate
	// Spawn enemies and bullet packs
	if (LK.ticks % enemySpawnRate == 0) {
		var enemy = new Enemy();
		enemy.x = Math.random() * (game.width - enemy.width) + enemy.width / 2;
		enemy.y = -enemy.height;
		enemies.push(enemy);
		game.addChild(enemy);
		if (enemySpawnRate > 30) {
			enemySpawnRate -= 0.5;
		} // Decrease spawn rate over time to a minimum of 30 ticks
	}
	if (LK.ticks % 600 == 0) {
		// Spawn a bullet pack every 600 ticks
		var bulletPack = new BulletPack();
		bulletPack.x = Math.random() * (game.width - bulletPack.width) + bulletPack.width / 2;
		bulletPack.y = -bulletPack.height;
		enemies.push(bulletPack); // Add bullet pack to enemies array for collision detection
		game.addChild(bulletPack);
	}
});
:quality(85)/https://cdn.frvr.ai/65aa62cebca71288805c4d0a.png%3F3) 
 android. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65aa6901bca71288805c4d84.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65aa7a6f12d8ad61c57ee902.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65ac257b45869b8be6c9cd00.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65ac25b445869b8be6c9cd03.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65b15b784e5a44bf3a180420.png%3F3) 
 letter X png. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65b15be04e5a44bf3a180427.png%3F3) 
 space background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65b15c764e5a44bf3a180433.png%3F3) 
 galaxy background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65b15d0e4e5a44bf3a180440.png%3F3) 
 galaxy background. High quality
:quality(85)/https://cdn.frvr.ai/65b15de74e5a44bf3a18044a.png%3F3) 
 space background.. High contrast
:quality(85)/https://cdn.frvr.ai/65b15f544e5a44bf3a18045f.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65b15f704e5a44bf3a180462.png%3F3)