/**** 
* Classes
****/ 
// Define a class for the player's bullets
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.x += self.speed;
		if (self.x > 2048 + 50) {
			self.destroy();
		}
	};
});
// Define a custom Button class to replace the undefined LK.UI.Button
var Button = Container.expand(function () {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('button', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.text = '';
	self.onClick = function () {};
	self.update = function () {
		// Add any update logic if necessary
	};
	self.setText = function (text) {
		self.text = text;
	};
	self.setOnClick = function (callback) {
		self.onClick = callback;
	};
	self.down = function (x, y, obj) {
		self.onClick();
	};
});
// Define a class for the emeralds
var Emerald = Container.expand(function () {
	var self = Container.call(this);
	var emeraldGraphics = self.attachAsset('emerald', {
		anchorX: 0.5,
		anchorY: 0.5,
		shape: 'box'
	});
	self.speed = 5;
	self.update = function () {
		self.x -= self.speed;
		if (self.x < -50) {
			self.destroy();
		}
	};
});
// Define a class for enemies
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.x -= self.speed;
		if (self.x < -50) {
			self.destroy();
		}
	};
});
// Define a class for flying enemies
var FlyingEnemy = Container.expand(function () {
	var self = Container.call(this);
	var flyingEnemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3;
	self.update = function () {
		self.x -= self.speed;
		self.y = 200 + Math.sin(self.x / 100) * 100; // Sine wave pattern
		if (self.x < -50) {
			self.destroy();
		}
	};
});
//<Assets used in the game will automatically appear here>
// Define a class for the player character
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.jumpHeight = 40;
	self.isJumping = false;
	self.velocityY = 0;
	self.update = function () {
		if (self.isJumping) {
			self.y += self.velocityY;
			self.velocityY += 0.7; // Decreased gravity effect by 30%
			if (self.y >= 2732 / 2) {
				// Ground level
				self.y = 2732 / 2;
				self.isJumping = false;
				self.velocityY = 0;
			}
		}
	};
	self.jump = function () {
		if (!self.isJumping) {
			self.isJumping = true;
			self.velocityY = -self.jumpHeight;
		}
	};
	self.shoot = function () {
		if (self.isJumping) {
			// Allow shooting only when in the air
			// Shoot a bullet
			var bullet = new Bullet();
			bullet.x = self.x;
			bullet.y = self.y;
			game.addChild(bullet);
		}
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB // Sky blue background
});
/**** 
* Game Code
****/ 
var background1 = game.addChild(LK.getAsset('background', {
	anchorX: 0,
	anchorY: 0
}));
background1.x = 0;
background1.y = 0;
var background2 = game.addChild(LK.getAsset('background', {
	anchorX: 0,
	anchorY: 0
}));
background2.x = 2048;
background2.y = 0;
// Play background music that loops continuously
LK.playMusic('Oyunmuzik', {
	loop: true
});
// Ensure music plays at the start of each game session
game.on('start', function () {
	LK.playMusic('Oyunmuzik', {
		loop: true
	});
});
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
// Initialize level
var level = 1;
var levelText = new Text2('Level: 1', {
	size: 100,
	fill: 0x000000
});
LK.gui.topLeft.addChild(levelText);
levelText.x = 0;
levelText.y = 240;
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
// Create a new Text2 object to display the score
var scoreText = new Text2('Score: 0', {
	size: 100,
	fill: 0x000000,
	font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Custom font
});
// Add the score text to the game GUI at the top-left corner of the screen
LK.gui.topLeft.addChild(scoreText);
scoreText.x = 0;
scoreText.y = 0;
// Initialize emeraldScore
var emeraldScore = 0;
// Initialize emeraldScoreText
var emeraldScoreText = new Text2('Emerald Score: 0', {
	size: 100,
	fill: 0x000000
});
// Add the score texts to the game GUI at the top-left corner of the screen, vertically aligned
LK.gui.topLeft.addChild(scoreText);
LK.gui.topLeft.addChild(emeraldScoreText);
scoreText.x = 0;
scoreText.y = 0;
emeraldScoreText.x = 0;
emeraldScoreText.y = 120;
// Handle game updates
game.update = function () {
	background1.x -= 2;
	background2.x -= 2;
	if (background1.x <= -2048) {
		background1.x = background2.x + 2048;
	}
	if (background2.x <= -2048) {
		background2.x = background1.x + 2048;
	}
	player.update();
	// Spawn enemies and emeralds
	enemySpawnCounter++;
	if (enemySpawnCounter >= enemySpawnInterval) {
		var enemy = new Enemy();
		enemy.x = 2048;
		enemy.y = 2732 / 2;
		enemies.push(enemy);
		game.addChild(enemy);
		// Spawn a flying enemy every second enemy
		if (enemies.length % 2 === 0) {
			var flyingEnemy = new FlyingEnemy();
			flyingEnemy.x = 2048;
			flyingEnemy.y = 200; // Start flying enemy higher
			enemies.push(flyingEnemy);
			game.addChild(flyingEnemy);
		}
		// Spawn an emerald along with every third enemy
		if (enemies.length % 3 === 0) {
			var emerald = new Emerald();
			emerald.x = 2048;
			emerald.y = 2732 / 2;
			game.addChild(emerald);
		}
		// Randomize the spawn interval for the next enemy
		enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
		enemySpawnCounter = 0;
	}
	// Update enemies
	for (var j = enemies.length - 1; j >= 0; j--) {
		enemies[j].update();
		if (player.intersects(enemies[j])) {
			if (!player.lastWasIntersecting) {
				LK.effects.flashObject(player, 0xff0000, 1000);
				LK.showGameOver();
				var congratsText = new Text2('Congratulations!', {
					size: 150,
					fill: 0x00FF00,
					font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
				});
				LK.gui.center.addChild(congratsText);
				congratsText.anchor.set(0.5, 0.5);
				congratsText.x = 2048 / 2;
				congratsText.y = 2732 / 2;
				enemies[j].destroy(); // Destroy the enemy upon collision
				enemies.splice(j, 1); // Remove the enemy from the array
			}
			player.lastWasIntersecting = true;
		} else {
			player.lastWasIntersecting = false;
			if (player.x > enemies[j].x && !enemies[j].passed) {
				enemies[j].passed = true;
				LK.setScore(LK.getScore() + 1);
				scoreText.setText('Score: ' + LK.getScore());
				// Increase level and difficulty based on score
				if (LK.getScore() === 5) {
					level = 2;
					levelText.setText('Level: ' + level);
				} else if (LK.getScore() === 10) {
					level = 3;
					levelText.setText('Level: ' + level);
				} else if (LK.getScore() === 15) {
					level = 4;
					levelText.setText('Level: ' + level);
				} else if (LK.getScore() === 20) {
					level = 5;
					levelText.setText('Level: ' + level);
					LK.showYouWin();
				}
			}
		}
		// Check for bullet and emerald collisions
		for (var i = game.children.length - 1; i >= 0; i--) {
			if (game.children[i] instanceof Bullet && game.children[i].intersects(enemies[j])) {
				game.children[i].destroy();
				enemies[j].destroy();
				enemies.splice(j, 1);
				break;
			} else if (game.children[i] instanceof Emerald && player.intersects(game.children[i])) {
				game.children[i].destroy();
				LK.setScore(LK.getScore() + 1);
				scoreText.setText('Score: ' + LK.getScore());
				// Player earns 3 fire rights for every 10 emeralds collected
				if (emeraldScore % 10 === 0) {
					player.fireRights += 3;
				}
				// Update emerald score
				emeraldScore += 1;
				emeraldScoreText.setText('Emerald Score: ' + emeraldScore);
			}
		}
	}
};
// Handle player jump and shooting
var lastTap = 0;
game.down = function (x, y, obj) {
	var currentTime = new Date().getTime();
	if (currentTime - lastTap < 300) {
		player.shoot();
	} else {
		player.jump();
	}
	lastTap = currentTime;
};
// Add a button for shooting
var shootButton = new Button();
shootButton.setText('Shoot');
shootButton.x = 1800;
shootButton.y = 2500;
shootButton.setOnClick(function () {
	player.shoot();
});
LK.gui.bottomRight.addChild(shootButton);
LK.gui.bottomRight.addChild(shootButton); /**** 
* Classes
****/ 
// Define a class for the player's bullets
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.x += self.speed;
		if (self.x > 2048 + 50) {
			self.destroy();
		}
	};
});
// Define a custom Button class to replace the undefined LK.UI.Button
var Button = Container.expand(function () {
	var self = Container.call(this);
	var buttonGraphics = self.attachAsset('button', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.text = '';
	self.onClick = function () {};
	self.update = function () {
		// Add any update logic if necessary
	};
	self.setText = function (text) {
		self.text = text;
	};
	self.setOnClick = function (callback) {
		self.onClick = callback;
	};
	self.down = function (x, y, obj) {
		self.onClick();
	};
});
// Define a class for the emeralds
var Emerald = Container.expand(function () {
	var self = Container.call(this);
	var emeraldGraphics = self.attachAsset('emerald', {
		anchorX: 0.5,
		anchorY: 0.5,
		shape: 'box'
	});
	self.speed = 5;
	self.update = function () {
		self.x -= self.speed;
		if (self.x < -50) {
			self.destroy();
		}
	};
});
// Define a class for enemies
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.x -= self.speed;
		if (self.x < -50) {
			self.destroy();
		}
	};
});
// Define a class for flying enemies
var FlyingEnemy = Container.expand(function () {
	var self = Container.call(this);
	var flyingEnemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3;
	self.update = function () {
		self.x -= self.speed;
		self.y = 200 + Math.sin(self.x / 100) * 100; // Sine wave pattern
		if (self.x < -50) {
			self.destroy();
		}
	};
});
//<Assets used in the game will automatically appear here>
// Define a class for the player character
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.jumpHeight = 40;
	self.isJumping = false;
	self.velocityY = 0;
	self.update = function () {
		if (self.isJumping) {
			self.y += self.velocityY;
			self.velocityY += 0.7; // Decreased gravity effect by 30%
			if (self.y >= 2732 / 2) {
				// Ground level
				self.y = 2732 / 2;
				self.isJumping = false;
				self.velocityY = 0;
			}
		}
	};
	self.jump = function () {
		if (!self.isJumping) {
			self.isJumping = true;
			self.velocityY = -self.jumpHeight;
		}
	};
	self.shoot = function () {
		if (self.isJumping) {
			// Allow shooting only when in the air
			// Shoot a bullet
			var bullet = new Bullet();
			bullet.x = self.x;
			bullet.y = self.y;
			game.addChild(bullet);
		}
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x87CEEB // Sky blue background
});
/**** 
* Game Code
****/ 
var background1 = game.addChild(LK.getAsset('background', {
	anchorX: 0,
	anchorY: 0
}));
background1.x = 0;
background1.y = 0;
var background2 = game.addChild(LK.getAsset('background', {
	anchorX: 0,
	anchorY: 0
}));
background2.x = 2048;
background2.y = 0;
// Play background music that loops continuously
LK.playMusic('Oyunmuzik', {
	loop: true
});
// Ensure music plays at the start of each game session
game.on('start', function () {
	LK.playMusic('Oyunmuzik', {
		loop: true
	});
});
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
// Initialize level
var level = 1;
var levelText = new Text2('Level: 1', {
	size: 100,
	fill: 0x000000
});
LK.gui.topLeft.addChild(levelText);
levelText.x = 0;
levelText.y = 240;
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
// Create a new Text2 object to display the score
var scoreText = new Text2('Score: 0', {
	size: 100,
	fill: 0x000000,
	font: "'GillSans-Bold',Impact,'Arial Black',Tahoma" // Custom font
});
// Add the score text to the game GUI at the top-left corner of the screen
LK.gui.topLeft.addChild(scoreText);
scoreText.x = 0;
scoreText.y = 0;
// Initialize emeraldScore
var emeraldScore = 0;
// Initialize emeraldScoreText
var emeraldScoreText = new Text2('Emerald Score: 0', {
	size: 100,
	fill: 0x000000
});
// Add the score texts to the game GUI at the top-left corner of the screen, vertically aligned
LK.gui.topLeft.addChild(scoreText);
LK.gui.topLeft.addChild(emeraldScoreText);
scoreText.x = 0;
scoreText.y = 0;
emeraldScoreText.x = 0;
emeraldScoreText.y = 120;
// Handle game updates
game.update = function () {
	background1.x -= 2;
	background2.x -= 2;
	if (background1.x <= -2048) {
		background1.x = background2.x + 2048;
	}
	if (background2.x <= -2048) {
		background2.x = background1.x + 2048;
	}
	player.update();
	// Spawn enemies and emeralds
	enemySpawnCounter++;
	if (enemySpawnCounter >= enemySpawnInterval) {
		var enemy = new Enemy();
		enemy.x = 2048;
		enemy.y = 2732 / 2;
		enemies.push(enemy);
		game.addChild(enemy);
		// Spawn a flying enemy every second enemy
		if (enemies.length % 2 === 0) {
			var flyingEnemy = new FlyingEnemy();
			flyingEnemy.x = 2048;
			flyingEnemy.y = 200; // Start flying enemy higher
			enemies.push(flyingEnemy);
			game.addChild(flyingEnemy);
		}
		// Spawn an emerald along with every third enemy
		if (enemies.length % 3 === 0) {
			var emerald = new Emerald();
			emerald.x = 2048;
			emerald.y = 2732 / 2;
			game.addChild(emerald);
		}
		// Randomize the spawn interval for the next enemy
		enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
		enemySpawnCounter = 0;
	}
	// Update enemies
	for (var j = enemies.length - 1; j >= 0; j--) {
		enemies[j].update();
		if (player.intersects(enemies[j])) {
			if (!player.lastWasIntersecting) {
				LK.effects.flashObject(player, 0xff0000, 1000);
				LK.showGameOver();
				var congratsText = new Text2('Congratulations!', {
					size: 150,
					fill: 0x00FF00,
					font: "'GillSans-Bold',Impact,'Arial Black',Tahoma"
				});
				LK.gui.center.addChild(congratsText);
				congratsText.anchor.set(0.5, 0.5);
				congratsText.x = 2048 / 2;
				congratsText.y = 2732 / 2;
				enemies[j].destroy(); // Destroy the enemy upon collision
				enemies.splice(j, 1); // Remove the enemy from the array
			}
			player.lastWasIntersecting = true;
		} else {
			player.lastWasIntersecting = false;
			if (player.x > enemies[j].x && !enemies[j].passed) {
				enemies[j].passed = true;
				LK.setScore(LK.getScore() + 1);
				scoreText.setText('Score: ' + LK.getScore());
				// Increase level and difficulty based on score
				if (LK.getScore() === 5) {
					level = 2;
					levelText.setText('Level: ' + level);
				} else if (LK.getScore() === 10) {
					level = 3;
					levelText.setText('Level: ' + level);
				} else if (LK.getScore() === 15) {
					level = 4;
					levelText.setText('Level: ' + level);
				} else if (LK.getScore() === 20) {
					level = 5;
					levelText.setText('Level: ' + level);
					LK.showYouWin();
				}
			}
		}
		// Check for bullet and emerald collisions
		for (var i = game.children.length - 1; i >= 0; i--) {
			if (game.children[i] instanceof Bullet && game.children[i].intersects(enemies[j])) {
				game.children[i].destroy();
				enemies[j].destroy();
				enemies.splice(j, 1);
				break;
			} else if (game.children[i] instanceof Emerald && player.intersects(game.children[i])) {
				game.children[i].destroy();
				LK.setScore(LK.getScore() + 1);
				scoreText.setText('Score: ' + LK.getScore());
				// Player earns 3 fire rights for every 10 emeralds collected
				if (emeraldScore % 10 === 0) {
					player.fireRights += 3;
				}
				// Update emerald score
				emeraldScore += 1;
				emeraldScoreText.setText('Emerald Score: ' + emeraldScore);
			}
		}
	}
};
// Handle player jump and shooting
var lastTap = 0;
game.down = function (x, y, obj) {
	var currentTime = new Date().getTime();
	if (currentTime - lastTap < 300) {
		player.shoot();
	} else {
		player.jump();
	}
	lastTap = currentTime;
};
// Add a button for shooting
var shootButton = new Button();
shootButton.setText('Shoot');
shootButton.x = 1800;
shootButton.y = 2500;
shootButton.setOnClick(function () {
	player.shoot();
});
LK.gui.bottomRight.addChild(shootButton);
LK.gui.bottomRight.addChild(shootButton);