/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	highScores: []
});
/**** 
* Classes
****/ 
var Food = Container.expand(function (type) {
	var self = Container.call(this);
	self.type = type || 'insect';
	self.value = self.type === 'insect' ? 5 : 10; // Shrimp gives more energy
	var graphic = self.attachAsset(self.type, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Random movement
	self.speedX = (Math.random() - 0.5) * 2;
	self.speedY = (Math.random() - 0.5) * 2;
	self.update = function () {
		self.x += self.speedX;
		self.y += self.speedY;
		// Bounce off edges
		if (self.x < 50 || self.x > 2048 - 50) {
			self.speedX *= -1;
		}
		if (self.y < 50 || self.y > 2732 - 50) {
			self.speedY *= -1;
		}
	};
	return self;
});
var HideSpot = Container.expand(function () {
	var self = Container.call(this);
	var graphic = self.attachAsset('hideSpot', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0.7
	});
	return self;
});
var Platypus = Container.expand(function () {
	var self = Container.call(this);
	// Create platypus body
	var body = self.attachAsset('platypus', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Platypus properties
	self.speed = 8;
	self.energy = 100;
	self.maxEnergy = 100;
	self.hidden = false;
	self.invulnerable = false;
	// Movement target for smooth motion
	self.targetX = 0;
	self.targetY = 0;
	self.update = function () {
		// Move towards target position smoothly
		if (Math.abs(self.x - self.targetX) > 5 || Math.abs(self.y - self.targetY) > 5) {
			var dx = self.targetX - self.x;
			var dy = self.targetY - self.y;
			var angle = Math.atan2(dy, dx);
			self.x += Math.cos(angle) * self.speed;
			self.y += Math.sin(angle) * self.speed;
			// Rotate platypus to face movement direction
			self.rotation = angle;
		}
		// Decrease energy over time
		if (LK.ticks % 60 === 0 && !self.hidden) {
			self.energy -= 1;
			if (self.energy <= 0) {
				self.energy = 0;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				scoreTxt.anchor.set(0.5, 0.5);
				LK.gui.center.addChild(scoreTxt);
				scoreTxt.y = 0;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				LK.showGameOver();
			}
		}
	};
	self.hide = function () {
		if (!self.hidden) {
			self.hidden = true;
			LK.getSound('hide').play();
			tween(self, {
				alpha: 0.3
			}, {
				duration: 300
			});
		}
	};
	self.unhide = function () {
		if (self.hidden) {
			self.hidden = true;
			tween(self, {
				alpha: 1
			}, {
				duration: 300,
				onFinish: function onFinish() {
					self.hidden = false;
				}
			});
		}
	};
	self.makeInvulnerable = function (duration) {
		self.invulnerable = true;
		// Flash effect to show invulnerability
		var flashCount = 0;
		var flashInterval = LK.setInterval(function () {
			body.alpha = body.alpha === 1 ? 0.3 : 1;
			// Removed reference to undefined 'bill'
			flashCount++;
			if (flashCount >= 10) {
				LK.clearInterval(flashInterval);
				body.alpha = 1;
				self.invulnerable = false;
			}
		}, 150);
	};
	self.takeDamage = function (amount) {
		if (!self.invulnerable && !self.hidden) {
			self.energy -= amount;
			LK.getSound('damage').play();
			LK.effects.flashScreen(0xFF0000, 300);
			if (self.energy <= 0) {
				self.energy = 0;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				scoreTxt.anchor.set(0.5, 0.5);
				LK.gui.center.addChild(scoreTxt);
				scoreTxt.y = 0;
				LK.showGameOver();
			} else {
				self.makeInvulnerable(1500);
			}
		}
	};
	return self;
});
var Predator = Container.expand(function (type) {
	var self = Container.call(this);
	self.type = type || 'snake';
	// Different predators have different damage and speed
	switch (self.type) {
		case 'snake':
			self.damage = 20;
			self.moveSpeed = 3;
			break;
		case 'waterRat':
			self.damage = 15;
			self.moveSpeed = 4;
			break;
		case 'goanna':
			self.damage = 25;
			self.moveSpeed = 2.5;
			break;
		default:
			self.damage = 15;
			self.moveSpeed = 3;
	}
	var graphic = self.attachAsset(self.type, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Target positions for movement
	self.targetX = 0;
	self.targetY = 0;
	self.active = true;
	self.update = function () {
		if (self.active) {
			// Move towards target
			var dx = self.targetX - self.x;
			var dy = self.targetY - self.y;
			var angle = Math.atan2(dy, dx);
			self.x += Math.cos(angle) * self.moveSpeed;
			self.y += Math.sin(angle) * self.moveSpeed;
			// Rotate to face movement direction
			self.rotation = angle;
			// Change direction occasionally or if close to target
			if (LK.ticks % 120 === 0 || Math.abs(dx) < 20 && Math.abs(dy) < 20) {
				self.pickNewTarget();
			}
		}
	};
	self.pickNewTarget = function () {
		self.targetX = 100 + Math.random() * (2048 - 200);
		self.targetY = 100 + Math.random() * (2732 - 200);
	};
	// Initial target
	self.pickNewTarget();
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x4DA6FF
});
/**** 
* Game Code
****/ 
var background = LK.getAsset('waterBackground', {
	anchorX: 0,
	anchorY: 0,
	x: 0,
	y: 0
});
game.addChild(background);
// Create game title
var gameTitle = new Text2('Platypus Adventure', {
	size: 100,
	fill: 0x000000,
	fontWeight: 'bold'
});
gameTitle.anchor.set(0.5, 0.5);
LK.gui.center.addChild(gameTitle);
gameTitle.y = -200;
// Create UI 
var score = 0;
var level = 1;
var foodEaten = 0;
var foodItems = [];
var predators = [];
var hideSpots = [];
var gameStarted = false;
var spawnInterval = null;
var predatorInterval = null;
var dragNode = null;
// Create platypus
var platypus = new Platypus();
platypus.x = 2048 / 2;
platypus.y = 2732 / 2;
game.addChild(platypus);
// Create hide spots
function createHideSpots() {
	// Create 5 hide spots around the pond
	for (var i = 0; i < 5; i++) {
		var hideSpot = new HideSpot();
		hideSpot.x = 300 + Math.random() * (2048 - 600);
		hideSpot.y = 300 + Math.random() * (2732 - 600);
		game.addChild(hideSpot);
		hideSpots.push(hideSpot);
	}
}
// Create UI
var scoreTxt = new Text2('Score: 0', {
	size: 80,
	// Increased size to make the text larger 
	fill: 0x000000,
	fontWeight: 'bold' // Make text bolder and thicker
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 60;
// Energy bar background
var energyBarBg = LK.getAsset('energyBarBg', {
	anchorX: 0.5,
	anchorY: 0.5
});
LK.gui.bottom.addChild(energyBarBg);
energyBarBg.y = -100;
// Energy bar
var energyBar = LK.getAsset('energyBar', {
	anchorX: 0,
	anchorY: 0.5,
	x: -250,
	y: 0
});
energyBarBg.addChild(energyBar);
// Instructions text
var instructionsTxt = new Text2('Tap to guide your platypus. Catch food and avoid predators!', {
	size: 40,
	fill: 0x000000,
	fontWeight: 'bold' // Make text bolder and thicker
});
instructionsTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionsTxt);
// Start game function
function startGame() {
	if (!gameStarted) {
		// Remove game title
		gameTitle.destroy();
		gameStarted = true;
		createHideSpots();
		// Remove instructions
		instructionsTxt.destroy();
		// Schedule food spawning
		spawnInterval = LK.setInterval(function () {
			spawnFood();
		}, 2000);
		// Schedule predator spawning
		predatorInterval = LK.setInterval(function () {
			spawnPredator();
		}, 5000);
		// Play background music
		LK.playMusic('gameMusic');
	}
}
// Spawn food
function spawnFood() {
	var foodType = Math.random() < 0.7 ? 'insect' : 'shrimp';
	var food = new Food(foodType);
	// Spawn food at random positions, but not too close to the edges
	food.x = 100 + Math.random() * (2048 - 200);
	food.y = 100 + Math.random() * (2732 - 200);
	game.addChild(food);
	foodItems.push(food);
	// Food automatically disappears after some time
	LK.setTimeout(function () {
		if (foodItems.indexOf(food) !== -1) {
			foodItems.splice(foodItems.indexOf(food), 1);
			food.destroy();
		}
	}, 10000);
}
// Spawn predator
function spawnPredator() {
	// Don't spawn too many predators
	if (predators.length >= 5) {
		return;
	}
	// Choose predator type based on the current level
	var types = [];
	if (level >= 1) {
		types.push('waterRat');
	}
	if (level >= 2) {
		types.push('snake');
	}
	if (level >= 3) {
		types.push('goanna');
	}
	var randomType = types[Math.floor(Math.random() * types.length)];
	var predator = new Predator(randomType);
	// Spawn predator at edge of screen
	var side = Math.floor(Math.random() * 4);
	switch (side) {
		case 0:
			// Top
			predator.x = Math.random() * 2048;
			predator.y = -50;
			break;
		case 1:
			// Right
			predator.x = 2048 + 50;
			predator.y = Math.random() * 2732;
			break;
		case 2:
			// Bottom
			predator.x = Math.random() * 2048;
			predator.y = 2732 + 50;
			break;
		case 3:
			// Left
			predator.x = -50;
			predator.y = Math.random() * 2732;
			break;
	}
	game.addChild(predator);
	predators.push(predator);
	// Predator leaves after some time
	LK.setTimeout(function () {
		if (predators.indexOf(predator) !== -1) {
			predators.splice(predators.indexOf(predator), 1);
			predator.destroy();
		}
	}, 15000 + Math.random() * 10000);
}
// Check if platypus is in a hide spot
function checkHideSpots() {
	var inHideSpot = false;
	for (var i = 0; i < hideSpots.length; i++) {
		if (platypus.intersects(hideSpots[i])) {
			inHideSpot = true;
			if (!platypus.hidden) {
				platypus.hide();
			}
			break;
		}
	}
	if (!inHideSpot && platypus.hidden) {
		platypus.unhide();
	}
}
// Handle game input
function handleMove(x, y, obj) {
	if (dragNode) {
		dragNode.targetX = x;
		dragNode.targetY = y;
	}
}
game.move = handleMove;
game.down = function (x, y, obj) {
	if (!gameStarted) {
		startGame();
	}
	dragNode = platypus;
	platypus.targetX = x;
	platypus.targetY = y;
	handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
	dragNode = null;
};
// Main game update
game.update = function () {
	// Update energy bar
	energyBar.width = platypus.energy / platypus.maxEnergy * 500;
	// Check if platypus is in a hide spot
	checkHideSpots();
	// Check for food collisions
	for (var i = foodItems.length - 1; i >= 0; i--) {
		if (platypus.intersects(foodItems[i])) {
			// Eat food
			var food = foodItems[i];
			platypus.energy = Math.min(platypus.maxEnergy, platypus.energy + food.value);
			score += food.value;
			scoreTxt.setText("Score: " + score + " | Level: " + level);
			foodEaten += 1;
			if (score >= level * 100) {
				level += 1;
				console.log("Level Up! Current Level: " + level);
				// Increase predator speed with each level up
				predators.forEach(function (predator) {
					predator.moveSpeed += 0.5; // Increase speed by 0.5 for each level
				});
				// Remove one hiding spot every level up
				if (hideSpots.length > 0) {
					var removedHideSpot = hideSpots.pop();
					removedHideSpot.destroy();
				}
			}
			scoreTxt.setText("Score: " + score + " | Level: " + level);
			// Remove food
			foodItems.splice(i, 1);
			food.destroy();
			// Create splash effect
			var splash = LK.getAsset('splash', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: food.x,
				y: food.y,
				alpha: 0.7
			});
			game.addChild(splash);
			tween(splash, {
				alpha: 0
			}, {
				duration: 800,
				onFinish: function onFinish() {
					splash.destroy();
				}
			});
			// Play eat sound
			LK.getSound('eat').play();
		}
	}
	// Check for predator collisions
	for (var j = 0; j < predators.length; j++) {
		var predator = predators[j];
		// Predator follows platypus if not hidden
		if (!platypus.hidden && LK.ticks % 60 === 0) {
			var chaseChance = 0.7;
			if (Math.random() < chaseChance) {
				predator.targetX = platypus.x;
				predator.targetY = platypus.y;
			}
		}
		// Check collision with platypus
		if (platypus.intersects(predator) && !platypus.hidden) {
			platypus.takeDamage(predator.damage);
			score = Math.max(0, score - 2); // Deduct 2 points, ensuring score doesn't go below 0
			scoreTxt.setText("Score: " + score + " | Level: " + level);
			// Push predator away from platypus
			var pushAngle = Math.atan2(predator.y - platypus.y, predator.x - platypus.x);
			predator.x += Math.cos(pushAngle) * 150;
			predator.y += Math.sin(pushAngle) * 150;
			predator.pickNewTarget();
		}
	}
	// Spawn initial food if game has started
	if (gameStarted && foodItems.length === 0 && LK.ticks === 10) {
		for (var k = 0; k < 3; k++) {
			spawnFood();
		}
	}
}; /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
	highScores: []
});
/**** 
* Classes
****/ 
var Food = Container.expand(function (type) {
	var self = Container.call(this);
	self.type = type || 'insect';
	self.value = self.type === 'insect' ? 5 : 10; // Shrimp gives more energy
	var graphic = self.attachAsset(self.type, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Random movement
	self.speedX = (Math.random() - 0.5) * 2;
	self.speedY = (Math.random() - 0.5) * 2;
	self.update = function () {
		self.x += self.speedX;
		self.y += self.speedY;
		// Bounce off edges
		if (self.x < 50 || self.x > 2048 - 50) {
			self.speedX *= -1;
		}
		if (self.y < 50 || self.y > 2732 - 50) {
			self.speedY *= -1;
		}
	};
	return self;
});
var HideSpot = Container.expand(function () {
	var self = Container.call(this);
	var graphic = self.attachAsset('hideSpot', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0.7
	});
	return self;
});
var Platypus = Container.expand(function () {
	var self = Container.call(this);
	// Create platypus body
	var body = self.attachAsset('platypus', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Platypus properties
	self.speed = 8;
	self.energy = 100;
	self.maxEnergy = 100;
	self.hidden = false;
	self.invulnerable = false;
	// Movement target for smooth motion
	self.targetX = 0;
	self.targetY = 0;
	self.update = function () {
		// Move towards target position smoothly
		if (Math.abs(self.x - self.targetX) > 5 || Math.abs(self.y - self.targetY) > 5) {
			var dx = self.targetX - self.x;
			var dy = self.targetY - self.y;
			var angle = Math.atan2(dy, dx);
			self.x += Math.cos(angle) * self.speed;
			self.y += Math.sin(angle) * self.speed;
			// Rotate platypus to face movement direction
			self.rotation = angle;
		}
		// Decrease energy over time
		if (LK.ticks % 60 === 0 && !self.hidden) {
			self.energy -= 1;
			if (self.energy <= 0) {
				self.energy = 0;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				scoreTxt.anchor.set(0.5, 0.5);
				LK.gui.center.addChild(scoreTxt);
				scoreTxt.y = 0;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				LK.showGameOver();
			}
		}
	};
	self.hide = function () {
		if (!self.hidden) {
			self.hidden = true;
			LK.getSound('hide').play();
			tween(self, {
				alpha: 0.3
			}, {
				duration: 300
			});
		}
	};
	self.unhide = function () {
		if (self.hidden) {
			self.hidden = true;
			tween(self, {
				alpha: 1
			}, {
				duration: 300,
				onFinish: function onFinish() {
					self.hidden = false;
				}
			});
		}
	};
	self.makeInvulnerable = function (duration) {
		self.invulnerable = true;
		// Flash effect to show invulnerability
		var flashCount = 0;
		var flashInterval = LK.setInterval(function () {
			body.alpha = body.alpha === 1 ? 0.3 : 1;
			// Removed reference to undefined 'bill'
			flashCount++;
			if (flashCount >= 10) {
				LK.clearInterval(flashInterval);
				body.alpha = 1;
				self.invulnerable = false;
			}
		}, 150);
	};
	self.takeDamage = function (amount) {
		if (!self.invulnerable && !self.hidden) {
			self.energy -= amount;
			LK.getSound('damage').play();
			LK.effects.flashScreen(0xFF0000, 300);
			if (self.energy <= 0) {
				self.energy = 0;
				// Update high score list
				var highScores = storage.highScores;
				highScores.push(score);
				highScores.sort(function (a, b) {
					return b - a;
				});
				if (highScores.length > 5) {
					highScores.pop(); // Keep only top 5 scores
				}
				storage.highScores = highScores;
				scoreTxt.anchor.set(0.5, 0.5);
				LK.gui.center.addChild(scoreTxt);
				scoreTxt.y = 0;
				LK.showGameOver();
			} else {
				self.makeInvulnerable(1500);
			}
		}
	};
	return self;
});
var Predator = Container.expand(function (type) {
	var self = Container.call(this);
	self.type = type || 'snake';
	// Different predators have different damage and speed
	switch (self.type) {
		case 'snake':
			self.damage = 20;
			self.moveSpeed = 3;
			break;
		case 'waterRat':
			self.damage = 15;
			self.moveSpeed = 4;
			break;
		case 'goanna':
			self.damage = 25;
			self.moveSpeed = 2.5;
			break;
		default:
			self.damage = 15;
			self.moveSpeed = 3;
	}
	var graphic = self.attachAsset(self.type, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	// Target positions for movement
	self.targetX = 0;
	self.targetY = 0;
	self.active = true;
	self.update = function () {
		if (self.active) {
			// Move towards target
			var dx = self.targetX - self.x;
			var dy = self.targetY - self.y;
			var angle = Math.atan2(dy, dx);
			self.x += Math.cos(angle) * self.moveSpeed;
			self.y += Math.sin(angle) * self.moveSpeed;
			// Rotate to face movement direction
			self.rotation = angle;
			// Change direction occasionally or if close to target
			if (LK.ticks % 120 === 0 || Math.abs(dx) < 20 && Math.abs(dy) < 20) {
				self.pickNewTarget();
			}
		}
	};
	self.pickNewTarget = function () {
		self.targetX = 100 + Math.random() * (2048 - 200);
		self.targetY = 100 + Math.random() * (2732 - 200);
	};
	// Initial target
	self.pickNewTarget();
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x4DA6FF
});
/**** 
* Game Code
****/ 
var background = LK.getAsset('waterBackground', {
	anchorX: 0,
	anchorY: 0,
	x: 0,
	y: 0
});
game.addChild(background);
// Create game title
var gameTitle = new Text2('Platypus Adventure', {
	size: 100,
	fill: 0x000000,
	fontWeight: 'bold'
});
gameTitle.anchor.set(0.5, 0.5);
LK.gui.center.addChild(gameTitle);
gameTitle.y = -200;
// Create UI 
var score = 0;
var level = 1;
var foodEaten = 0;
var foodItems = [];
var predators = [];
var hideSpots = [];
var gameStarted = false;
var spawnInterval = null;
var predatorInterval = null;
var dragNode = null;
// Create platypus
var platypus = new Platypus();
platypus.x = 2048 / 2;
platypus.y = 2732 / 2;
game.addChild(platypus);
// Create hide spots
function createHideSpots() {
	// Create 5 hide spots around the pond
	for (var i = 0; i < 5; i++) {
		var hideSpot = new HideSpot();
		hideSpot.x = 300 + Math.random() * (2048 - 600);
		hideSpot.y = 300 + Math.random() * (2732 - 600);
		game.addChild(hideSpot);
		hideSpots.push(hideSpot);
	}
}
// Create UI
var scoreTxt = new Text2('Score: 0', {
	size: 80,
	// Increased size to make the text larger 
	fill: 0x000000,
	fontWeight: 'bold' // Make text bolder and thicker
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 60;
// Energy bar background
var energyBarBg = LK.getAsset('energyBarBg', {
	anchorX: 0.5,
	anchorY: 0.5
});
LK.gui.bottom.addChild(energyBarBg);
energyBarBg.y = -100;
// Energy bar
var energyBar = LK.getAsset('energyBar', {
	anchorX: 0,
	anchorY: 0.5,
	x: -250,
	y: 0
});
energyBarBg.addChild(energyBar);
// Instructions text
var instructionsTxt = new Text2('Tap to guide your platypus. Catch food and avoid predators!', {
	size: 40,
	fill: 0x000000,
	fontWeight: 'bold' // Make text bolder and thicker
});
instructionsTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionsTxt);
// Start game function
function startGame() {
	if (!gameStarted) {
		// Remove game title
		gameTitle.destroy();
		gameStarted = true;
		createHideSpots();
		// Remove instructions
		instructionsTxt.destroy();
		// Schedule food spawning
		spawnInterval = LK.setInterval(function () {
			spawnFood();
		}, 2000);
		// Schedule predator spawning
		predatorInterval = LK.setInterval(function () {
			spawnPredator();
		}, 5000);
		// Play background music
		LK.playMusic('gameMusic');
	}
}
// Spawn food
function spawnFood() {
	var foodType = Math.random() < 0.7 ? 'insect' : 'shrimp';
	var food = new Food(foodType);
	// Spawn food at random positions, but not too close to the edges
	food.x = 100 + Math.random() * (2048 - 200);
	food.y = 100 + Math.random() * (2732 - 200);
	game.addChild(food);
	foodItems.push(food);
	// Food automatically disappears after some time
	LK.setTimeout(function () {
		if (foodItems.indexOf(food) !== -1) {
			foodItems.splice(foodItems.indexOf(food), 1);
			food.destroy();
		}
	}, 10000);
}
// Spawn predator
function spawnPredator() {
	// Don't spawn too many predators
	if (predators.length >= 5) {
		return;
	}
	// Choose predator type based on the current level
	var types = [];
	if (level >= 1) {
		types.push('waterRat');
	}
	if (level >= 2) {
		types.push('snake');
	}
	if (level >= 3) {
		types.push('goanna');
	}
	var randomType = types[Math.floor(Math.random() * types.length)];
	var predator = new Predator(randomType);
	// Spawn predator at edge of screen
	var side = Math.floor(Math.random() * 4);
	switch (side) {
		case 0:
			// Top
			predator.x = Math.random() * 2048;
			predator.y = -50;
			break;
		case 1:
			// Right
			predator.x = 2048 + 50;
			predator.y = Math.random() * 2732;
			break;
		case 2:
			// Bottom
			predator.x = Math.random() * 2048;
			predator.y = 2732 + 50;
			break;
		case 3:
			// Left
			predator.x = -50;
			predator.y = Math.random() * 2732;
			break;
	}
	game.addChild(predator);
	predators.push(predator);
	// Predator leaves after some time
	LK.setTimeout(function () {
		if (predators.indexOf(predator) !== -1) {
			predators.splice(predators.indexOf(predator), 1);
			predator.destroy();
		}
	}, 15000 + Math.random() * 10000);
}
// Check if platypus is in a hide spot
function checkHideSpots() {
	var inHideSpot = false;
	for (var i = 0; i < hideSpots.length; i++) {
		if (platypus.intersects(hideSpots[i])) {
			inHideSpot = true;
			if (!platypus.hidden) {
				platypus.hide();
			}
			break;
		}
	}
	if (!inHideSpot && platypus.hidden) {
		platypus.unhide();
	}
}
// Handle game input
function handleMove(x, y, obj) {
	if (dragNode) {
		dragNode.targetX = x;
		dragNode.targetY = y;
	}
}
game.move = handleMove;
game.down = function (x, y, obj) {
	if (!gameStarted) {
		startGame();
	}
	dragNode = platypus;
	platypus.targetX = x;
	platypus.targetY = y;
	handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
	dragNode = null;
};
// Main game update
game.update = function () {
	// Update energy bar
	energyBar.width = platypus.energy / platypus.maxEnergy * 500;
	// Check if platypus is in a hide spot
	checkHideSpots();
	// Check for food collisions
	for (var i = foodItems.length - 1; i >= 0; i--) {
		if (platypus.intersects(foodItems[i])) {
			// Eat food
			var food = foodItems[i];
			platypus.energy = Math.min(platypus.maxEnergy, platypus.energy + food.value);
			score += food.value;
			scoreTxt.setText("Score: " + score + " | Level: " + level);
			foodEaten += 1;
			if (score >= level * 100) {
				level += 1;
				console.log("Level Up! Current Level: " + level);
				// Increase predator speed with each level up
				predators.forEach(function (predator) {
					predator.moveSpeed += 0.5; // Increase speed by 0.5 for each level
				});
				// Remove one hiding spot every level up
				if (hideSpots.length > 0) {
					var removedHideSpot = hideSpots.pop();
					removedHideSpot.destroy();
				}
			}
			scoreTxt.setText("Score: " + score + " | Level: " + level);
			// Remove food
			foodItems.splice(i, 1);
			food.destroy();
			// Create splash effect
			var splash = LK.getAsset('splash', {
				anchorX: 0.5,
				anchorY: 0.5,
				x: food.x,
				y: food.y,
				alpha: 0.7
			});
			game.addChild(splash);
			tween(splash, {
				alpha: 0
			}, {
				duration: 800,
				onFinish: function onFinish() {
					splash.destroy();
				}
			});
			// Play eat sound
			LK.getSound('eat').play();
		}
	}
	// Check for predator collisions
	for (var j = 0; j < predators.length; j++) {
		var predator = predators[j];
		// Predator follows platypus if not hidden
		if (!platypus.hidden && LK.ticks % 60 === 0) {
			var chaseChance = 0.7;
			if (Math.random() < chaseChance) {
				predator.targetX = platypus.x;
				predator.targetY = platypus.y;
			}
		}
		// Check collision with platypus
		if (platypus.intersects(predator) && !platypus.hidden) {
			platypus.takeDamage(predator.damage);
			score = Math.max(0, score - 2); // Deduct 2 points, ensuring score doesn't go below 0
			scoreTxt.setText("Score: " + score + " | Level: " + level);
			// Push predator away from platypus
			var pushAngle = Math.atan2(predator.y - platypus.y, predator.x - platypus.x);
			predator.x += Math.cos(pushAngle) * 150;
			predator.y += Math.sin(pushAngle) * 150;
			predator.pickNewTarget();
		}
	}
	// Spawn initial food if game has started
	if (gameStarted && foodItems.length === 0 && LK.ticks === 10) {
		for (var k = 0; k < 3; k++) {
			spawnFood();
		}
	}
};
 Cute Platypus swimming. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. In game asset main character 2d
 Dragonfly, small but detailed. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
 Green reeds with Lilly pad. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
 Light Brown moving snake top down view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
 Goanna swimming top down view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
 Pink shrimp. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
 Water rat swimming top down view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
 
 Small splash in water. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
 Green water energy bar. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows