/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Banana = Container.expand(function () {
	var self = Container.call(this);
	var bananaGraphics = self.attachAsset('banana', {
		anchorX: 0.5,
		anchorY: 0.5,
		rotation: Math.PI / 4
	});
	self.isCollected = false;
	self.isDragging = false;
	self.down = function (x, y, obj) {
		if (!self.isCollected) {
			self.isDragging = true;
			LK.getSound('pickup').play();
		}
	};
	self.up = function (x, y, obj) {
		self.isDragging = false;
		if (self.intersects(collectionDesk) && !self.isCollected) {
			self.isCollected = true;
			// Animate banana to center of desk
			var deskGlobal = collectionDesk.toGlobal({
				x: 0,
				y: 0
			});
			var deskLocal = game.toLocal(deskGlobal);
			tween(self, {
				x: deskLocal.x + collectionDesk.width / 2,
				y: deskLocal.y + 50 + collectedBananas * 30
			}, {
				duration: 500,
				easing: tween.easeOut,
				onFinish: function onFinish() {
					collectedBananas++;
					updateCollectionCounter();
					LK.getSound('drop').play();
					if (collectedBananas === totalBananas) {
						LK.setTimeout(function () {
							LK.getSound('success').play();
							LK.showYouWin();
						}, 1000);
					}
				}
			});
		}
	};
	return self;
});
var CollectionDesk = Container.expand(function () {
	var self = Container.call(this);
	var deskGraphics = self.attachAsset('desk', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var labelText = new Text2('Collection Desk', {
		size: 40,
		fill: 0xFFFFFF
	});
	labelText.anchor.set(0.5, 0.5);
	labelText.position.set(0, -60);
	self.addChild(labelText);
	return self;
});
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('pillow', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8,
		tint: 0xFF0000 // Red tint for enemy
	});
	// Speed of enemy chasing player
	self.speed = 2;
	self.lastPosition = {
		x: 0,
		y: 0
	};
	self.lastIntersecting = false;
	self.update = function () {
		// Save last position for intersection detection
		self.lastPosition.x = self.x;
		self.lastPosition.y = self.y;
		if (player) {
			// Calculate direction to player
			var dx = player.x - self.x;
			var dy = player.y - self.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			// Normalize and apply speed
			if (distance > 0) {
				dx = dx / distance * self.speed;
				dy = dy / distance * self.speed;
				// Store potential new position
				var newX = self.x + dx;
				var newY = self.y + dy;
				// Check collision with map boundaries
				var enemyRadius = self.width * 0.4;
				var isColliding = false;
				// Map boundary collision
				if (newX < enemyRadius || newX > background.width - enemyRadius || newY < enemyRadius || newY > background.height - enemyRadius) {
					isColliding = true;
				}
				// Furniture collision
				if (!isColliding) {
					for (var i = 0; i < furniturePieces.length; i++) {
						var furniture = furniturePieces[i];
						// Calculate distance between centers
						var fdx = newX - furniture.x;
						var fdy = newY - furniture.y;
						var minDistX = enemyRadius + furniture.width / 2;
						var minDistY = enemyRadius + furniture.height / 2;
						// Check rectangular collision
						if (Math.abs(fdx) < minDistX && Math.abs(fdy) < minDistY) {
							isColliding = true;
							break;
						}
					}
				}
				// Only move if no collision
				if (!isColliding) {
					// Move towards player
					self.x = newX;
					self.y = newY;
				}
			}
		}
	};
	return self;
});
var FurniturePiece = Container.expand(function (assetName, width, height) {
	var self = Container.call(this);
	var furnitureGraphics = self.attachAsset(assetName, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = width;
	self.height = height;
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	// Create a simple player character using an existing shape
	var playerGraphics = self.attachAsset('pillow', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8,
		tint: 0x00AAFF // Blue tint to distinguish from other pillows
	});
	// Track if player is being dragged
	self.isDragging = false;
	self.down = function (x, y, obj) {
		self.isDragging = true;
	};
	self.up = function (x, y, obj) {
		self.isDragging = false;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0xF5F5DC
});
/**** 
* Game Code
****/ 
// Game constants
var totalBananas = 20;
var collectedBananas = 0;
var bananas = [];
var draggedBanana = null;
var player = null;
var enemy = null;
// Initialize game position for camera system
game.x = 0;
game.y = 0;
// Add room background
var background = game.addChild(LK.getAsset('roomBackground', {
	anchorX: 0,
	anchorY: 0
}));
background.width = 6144; // Triple the width
background.height = 8196; // Triple the height
// Add furniture pieces
var furniturePieces = [];
// Bed
var bed = new FurniturePiece('bed', 600, 300);
bed.x = 5000;
bed.y = 1500;
game.addChild(bed);
furniturePieces.push(bed);
// Table
var table = new FurniturePiece('table', 300, 150);
table.x = 1500;
table.y = 3800;
game.addChild(table);
furniturePieces.push(table);
// Sofa
var sofa = new FurniturePiece('sofa', 500, 200);
sofa.x = 1800;
sofa.y = 5600;
game.addChild(sofa);
furniturePieces.push(sofa);
// Bookshelf
var bookshelf = new FurniturePiece('bookshelf', 300, 500);
bookshelf.x = 5200;
bookshelf.y = 4500;
game.addChild(bookshelf);
furniturePieces.push(bookshelf);
// Plant
var plant = new FurniturePiece('plant', 150, 200);
plant.x = 4600;
plant.y = 6200;
game.addChild(plant);
furniturePieces.push(plant);
// Lamp
var lamp = new FurniturePiece('lamp', 100, 250);
lamp.x = 1000;
lamp.y = 1800;
game.addChild(lamp);
furniturePieces.push(lamp);
// Pillow
var pillow = new FurniturePiece('pillow', 150, 150);
pillow.x = 5400;
pillow.y = 2000;
game.addChild(pillow);
furniturePieces.push(pillow);
// Additional furniture
// Second bookshelf
var bookshelf2 = new FurniturePiece('bookshelf', 300, 500);
bookshelf2.x = 800;
bookshelf2.y = 4000;
game.addChild(bookshelf2);
furniturePieces.push(bookshelf2);
// Second desk
var desk2 = new FurniturePiece('desk', 400, 200);
desk2.x = 3500;
desk2.y = 2200;
game.addChild(desk2);
furniturePieces.push(desk2);
// Second plant
var plant2 = new FurniturePiece('plant', 150, 200);
plant2.x = 2600;
plant2.y = 1400;
game.addChild(plant2);
furniturePieces.push(plant2);
// Second lamp
var lamp2 = new FurniturePiece('lamp', 100, 250);
lamp2.x = 4800;
lamp2.y = 3300;
game.addChild(lamp2);
furniturePieces.push(lamp2);
// Second bed
var bed2 = new FurniturePiece('bed', 600, 300);
bed2.x = 3000;
bed2.y = 6000;
game.addChild(bed2);
furniturePieces.push(bed2);
// Armchair (using sofa asset with different size)
var armchair = new FurniturePiece('sofa', 300, 200);
armchair.x = 4200;
armchair.y = 1800;
game.addChild(armchair);
furniturePieces.push(armchair);
// Coffee table (using table with different dimensions)
var coffeeTable = new FurniturePiece('table', 250, 120);
coffeeTable.x = 2300;
coffeeTable.y = 2800;
game.addChild(coffeeTable);
furniturePieces.push(coffeeTable);
// Add collection desk
var collectionDesk = new CollectionDesk();
collectionDesk.x = 3072; // Center of larger map
collectionDesk.y = 7800; // Bottom of larger screen
game.addChild(collectionDesk);
// Add collection counter
var collectionCounter = new Text2('0/' + totalBananas + ' bananas', {
	size: 60,
	fill: 0x000000
});
collectionCounter.anchor.set(0.5, 0);
LK.gui.top.addChild(collectionCounter);
function updateCollectionCounter() {
	collectionCounter.setText(collectedBananas + "/" + totalBananas + " bananas");
}
updateCollectionCounter();
// Create and hide bananas around the room
function createBananas() {
	var bananaPositions = [{
		x: 5100,
		y: 1300
	},
	// Near the bed
	{
		x: 1600,
		y: 3700
	},
	// On the table
	{
		x: 1400,
		y: 5500
	},
	// Behind the sofa
	{
		x: 5300,
		y: 4200
	},
	// On bookshelf
	{
		x: 4700,
		y: 6100
	},
	// Behind plant
	{
		x: 900,
		y: 1700
	},
	// Near lamp
	{
		x: 5500,
		y: 2100
	},
	// Under pillow
	// Additional banana positions
	{
		x: 3800,
		y: 1400
	},
	// Near top center
	{
		x: 1200,
		y: 3200
	},
	// Left middle area
	{
		x: 2300,
		y: 4700
	},
	// Middle area
	{
		x: 4300,
		y: 5500
	},
	// Right middle area
	{
		x: 800,
		y: 7000
	},
	// Bottom left corner
	{
		x: 2700,
		y: 7500
	},
	// Near collection desk
	{
		x: 4500,
		y: 7200
	},
	// Bottom right area
	{
		x: 5800,
		y: 2800
	},
	// Far right middle
	{
		x: 3400,
		y: 2600
	},
	// Upper middle
	{
		x: 1900,
		y: 1900
	},
	// Upper left
	{
		x: 4000,
		y: 4100
	},
	// Dead center
	{
		x: 5700,
		y: 5000
	},
	// Lower right
	{
		x: 600,
		y: 5000
	} // Lower left
	];
	for (var i = 0; i < totalBananas; i++) {
		var banana = new Banana();
		banana.x = bananaPositions[i].x;
		banana.y = bananaPositions[i].y;
		// Add slight random rotation
		banana.rotation = (Math.random() - 0.5) * 0.5;
		bananas.push(banana);
		game.addChild(banana);
	}
}
createBananas();
// Add Math.lerp utility function for smooth interpolation
Math.lerp = function (start, end, amt) {
	return (1 - amt) * start + amt * end;
};
// Create and add player character
player = new Player();
player.x = 3072; // Start at center of larger map horizontally
player.y = 4098; // Middle of the larger map vertically
game.addChild(player);
// Create and add enemy character
enemy = new Enemy();
enemy.x = 800; // Start at left side of screen
enemy.y = 800; // Top portion of screen
game.addChild(enemy);
// Game event handlers
game.down = function (x, y, obj) {
	// Check if player was clicked
	if (obj.target === player) {
		player.isDragging = true;
	}
};
game.move = function (x, y, obj) {
	// Move any dragged banana
	for (var i = 0; i < bananas.length; i++) {
		if (bananas[i].isDragging) {
			bananas[i].x = x;
			bananas[i].y = y;
		}
	}
	// Move player if being dragged
	if (player && player.isDragging) {
		// Direct movement - same speed as enemy
		player.x = x;
		player.y = y;
	}
};
game.up = function (x, y, obj) {
	// Handled by individual banana objects
	if (player) {
		player.isDragging = false;
	}
};
// Update function to check for player-banana collisions and handle camera
game.update = function () {
	// Keep track of player's previous position to restore on collision
	if (!player.lastX) player.lastX = player.x;
	if (!player.lastY) player.lastY = player.y;
	// Check wall boundaries
	var playerRadius = player.width * 0.4; // Assuming player size
	var isColliding = false;
	// Collision with map boundaries
	if (player.x < playerRadius || player.x > background.width - playerRadius || player.y < playerRadius || player.y > background.height - playerRadius) {
		isColliding = true;
	}
	// Collision with furniture
	for (var i = 0; i < furniturePieces.length; i++) {
		var furniture = furniturePieces[i];
		// Calculate distance between centers
		var dx = player.x - furniture.x;
		var dy = player.y - furniture.y;
		var minDistX = playerRadius + furniture.width / 2;
		var minDistY = playerRadius + furniture.height / 2;
		// Check rectangular collision
		if (Math.abs(dx) < minDistX && Math.abs(dy) < minDistY) {
			isColliding = true;
			break;
		}
	}
	// If collision detected, restore previous position
	if (isColliding) {
		player.x = player.lastX;
		player.y = player.lastY;
	} else {
		// Save current valid position
		player.lastX = player.x;
		player.lastY = player.y;
	}
	// Update camera position to follow player
	if (player) {
		// Calculate camera target position
		var cameraX = Math.max(1024, Math.min(background.width - 1024, player.x));
		var cameraY = Math.max(1366, Math.min(background.height - 1366, player.y));
		// Smoothly move the camera (game position) to follow the player
		game.x = Math.lerp(game.x, -cameraX + 1024, 0.1);
		game.y = Math.lerp(game.y, -cameraY + 1366, 0.1);
		// Update enemy
		if (enemy) {
			// Save last intersection status
			enemy.lastIntersecting = enemy.intersects(player);
			// Update enemy position (chase player)
			enemy.update();
			// Check if enemy touches player (automatic kill)
			if (enemy.intersects(player)) {
				// Flash screen red for game over effect
				LK.effects.flashScreen(0xFF0000, 1000);
				// Show game over
				LK.showGameOver();
			}
		}
		// Check if player touches any banana
		for (var i = 0; i < bananas.length; i++) {
			if (!bananas[i].isCollected && !bananas[i].isDragging && player.intersects(bananas[i])) {
				// Collect the banana
				bananas[i].isCollected = true;
				// Animate banana to center of desk
				var deskGlobal = collectionDesk.toGlobal({
					x: 0,
					y: 0
				});
				var deskLocal = game.toLocal(deskGlobal);
				// Play pickup sound
				LK.getSound('pickup').play();
				tween(bananas[i], {
					x: deskLocal.x + collectionDesk.width / 2,
					y: deskLocal.y + 50 + collectedBananas * 30
				}, {
					duration: 500,
					easing: tween.easeOut,
					onFinish: function onFinish() {
						collectedBananas++;
						updateCollectionCounter();
						LK.getSound('drop').play();
						if (collectedBananas === totalBananas) {
							LK.setTimeout(function () {
								LK.getSound('success').play();
								LK.showYouWin();
							}, 1000);
						}
					}
				});
			}
		}
	}
};
// Play background music
LK.playMusic('bgmusic');
// Instructions
var instructionsText = new Text2("Find 20 hidden bananas and\ndrag them to the collection desk!\nAvoid the red enemy!", {
	size: 50,
	fill: 0x000000
});
instructionsText.anchor.set(0.5, 0);
instructionsText.y = 100;
LK.gui.top.addChild(instructionsText);
// Auto-hide instructions after 5 seconds
LK.setTimeout(function () {
	tween(instructionsText, {
		alpha: 0
	}, {
		duration: 1000,
		easing: tween.easeOut
	});
}, 5000); /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Banana = Container.expand(function () {
	var self = Container.call(this);
	var bananaGraphics = self.attachAsset('banana', {
		anchorX: 0.5,
		anchorY: 0.5,
		rotation: Math.PI / 4
	});
	self.isCollected = false;
	self.isDragging = false;
	self.down = function (x, y, obj) {
		if (!self.isCollected) {
			self.isDragging = true;
			LK.getSound('pickup').play();
		}
	};
	self.up = function (x, y, obj) {
		self.isDragging = false;
		if (self.intersects(collectionDesk) && !self.isCollected) {
			self.isCollected = true;
			// Animate banana to center of desk
			var deskGlobal = collectionDesk.toGlobal({
				x: 0,
				y: 0
			});
			var deskLocal = game.toLocal(deskGlobal);
			tween(self, {
				x: deskLocal.x + collectionDesk.width / 2,
				y: deskLocal.y + 50 + collectedBananas * 30
			}, {
				duration: 500,
				easing: tween.easeOut,
				onFinish: function onFinish() {
					collectedBananas++;
					updateCollectionCounter();
					LK.getSound('drop').play();
					if (collectedBananas === totalBananas) {
						LK.setTimeout(function () {
							LK.getSound('success').play();
							LK.showYouWin();
						}, 1000);
					}
				}
			});
		}
	};
	return self;
});
var CollectionDesk = Container.expand(function () {
	var self = Container.call(this);
	var deskGraphics = self.attachAsset('desk', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	var labelText = new Text2('Collection Desk', {
		size: 40,
		fill: 0xFFFFFF
	});
	labelText.anchor.set(0.5, 0.5);
	labelText.position.set(0, -60);
	self.addChild(labelText);
	return self;
});
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('pillow', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8,
		tint: 0xFF0000 // Red tint for enemy
	});
	// Speed of enemy chasing player
	self.speed = 2;
	self.lastPosition = {
		x: 0,
		y: 0
	};
	self.lastIntersecting = false;
	self.update = function () {
		// Save last position for intersection detection
		self.lastPosition.x = self.x;
		self.lastPosition.y = self.y;
		if (player) {
			// Calculate direction to player
			var dx = player.x - self.x;
			var dy = player.y - self.y;
			var distance = Math.sqrt(dx * dx + dy * dy);
			// Normalize and apply speed
			if (distance > 0) {
				dx = dx / distance * self.speed;
				dy = dy / distance * self.speed;
				// Store potential new position
				var newX = self.x + dx;
				var newY = self.y + dy;
				// Check collision with map boundaries
				var enemyRadius = self.width * 0.4;
				var isColliding = false;
				// Map boundary collision
				if (newX < enemyRadius || newX > background.width - enemyRadius || newY < enemyRadius || newY > background.height - enemyRadius) {
					isColliding = true;
				}
				// Furniture collision
				if (!isColliding) {
					for (var i = 0; i < furniturePieces.length; i++) {
						var furniture = furniturePieces[i];
						// Calculate distance between centers
						var fdx = newX - furniture.x;
						var fdy = newY - furniture.y;
						var minDistX = enemyRadius + furniture.width / 2;
						var minDistY = enemyRadius + furniture.height / 2;
						// Check rectangular collision
						if (Math.abs(fdx) < minDistX && Math.abs(fdy) < minDistY) {
							isColliding = true;
							break;
						}
					}
				}
				// Only move if no collision
				if (!isColliding) {
					// Move towards player
					self.x = newX;
					self.y = newY;
				}
			}
		}
	};
	return self;
});
var FurniturePiece = Container.expand(function (assetName, width, height) {
	var self = Container.call(this);
	var furnitureGraphics = self.attachAsset(assetName, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = width;
	self.height = height;
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	// Create a simple player character using an existing shape
	var playerGraphics = self.attachAsset('pillow', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8,
		tint: 0x00AAFF // Blue tint to distinguish from other pillows
	});
	// Track if player is being dragged
	self.isDragging = false;
	self.down = function (x, y, obj) {
		self.isDragging = true;
	};
	self.up = function (x, y, obj) {
		self.isDragging = false;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0xF5F5DC
});
/**** 
* Game Code
****/ 
// Game constants
var totalBananas = 20;
var collectedBananas = 0;
var bananas = [];
var draggedBanana = null;
var player = null;
var enemy = null;
// Initialize game position for camera system
game.x = 0;
game.y = 0;
// Add room background
var background = game.addChild(LK.getAsset('roomBackground', {
	anchorX: 0,
	anchorY: 0
}));
background.width = 6144; // Triple the width
background.height = 8196; // Triple the height
// Add furniture pieces
var furniturePieces = [];
// Bed
var bed = new FurniturePiece('bed', 600, 300);
bed.x = 5000;
bed.y = 1500;
game.addChild(bed);
furniturePieces.push(bed);
// Table
var table = new FurniturePiece('table', 300, 150);
table.x = 1500;
table.y = 3800;
game.addChild(table);
furniturePieces.push(table);
// Sofa
var sofa = new FurniturePiece('sofa', 500, 200);
sofa.x = 1800;
sofa.y = 5600;
game.addChild(sofa);
furniturePieces.push(sofa);
// Bookshelf
var bookshelf = new FurniturePiece('bookshelf', 300, 500);
bookshelf.x = 5200;
bookshelf.y = 4500;
game.addChild(bookshelf);
furniturePieces.push(bookshelf);
// Plant
var plant = new FurniturePiece('plant', 150, 200);
plant.x = 4600;
plant.y = 6200;
game.addChild(plant);
furniturePieces.push(plant);
// Lamp
var lamp = new FurniturePiece('lamp', 100, 250);
lamp.x = 1000;
lamp.y = 1800;
game.addChild(lamp);
furniturePieces.push(lamp);
// Pillow
var pillow = new FurniturePiece('pillow', 150, 150);
pillow.x = 5400;
pillow.y = 2000;
game.addChild(pillow);
furniturePieces.push(pillow);
// Additional furniture
// Second bookshelf
var bookshelf2 = new FurniturePiece('bookshelf', 300, 500);
bookshelf2.x = 800;
bookshelf2.y = 4000;
game.addChild(bookshelf2);
furniturePieces.push(bookshelf2);
// Second desk
var desk2 = new FurniturePiece('desk', 400, 200);
desk2.x = 3500;
desk2.y = 2200;
game.addChild(desk2);
furniturePieces.push(desk2);
// Second plant
var plant2 = new FurniturePiece('plant', 150, 200);
plant2.x = 2600;
plant2.y = 1400;
game.addChild(plant2);
furniturePieces.push(plant2);
// Second lamp
var lamp2 = new FurniturePiece('lamp', 100, 250);
lamp2.x = 4800;
lamp2.y = 3300;
game.addChild(lamp2);
furniturePieces.push(lamp2);
// Second bed
var bed2 = new FurniturePiece('bed', 600, 300);
bed2.x = 3000;
bed2.y = 6000;
game.addChild(bed2);
furniturePieces.push(bed2);
// Armchair (using sofa asset with different size)
var armchair = new FurniturePiece('sofa', 300, 200);
armchair.x = 4200;
armchair.y = 1800;
game.addChild(armchair);
furniturePieces.push(armchair);
// Coffee table (using table with different dimensions)
var coffeeTable = new FurniturePiece('table', 250, 120);
coffeeTable.x = 2300;
coffeeTable.y = 2800;
game.addChild(coffeeTable);
furniturePieces.push(coffeeTable);
// Add collection desk
var collectionDesk = new CollectionDesk();
collectionDesk.x = 3072; // Center of larger map
collectionDesk.y = 7800; // Bottom of larger screen
game.addChild(collectionDesk);
// Add collection counter
var collectionCounter = new Text2('0/' + totalBananas + ' bananas', {
	size: 60,
	fill: 0x000000
});
collectionCounter.anchor.set(0.5, 0);
LK.gui.top.addChild(collectionCounter);
function updateCollectionCounter() {
	collectionCounter.setText(collectedBananas + "/" + totalBananas + " bananas");
}
updateCollectionCounter();
// Create and hide bananas around the room
function createBananas() {
	var bananaPositions = [{
		x: 5100,
		y: 1300
	},
	// Near the bed
	{
		x: 1600,
		y: 3700
	},
	// On the table
	{
		x: 1400,
		y: 5500
	},
	// Behind the sofa
	{
		x: 5300,
		y: 4200
	},
	// On bookshelf
	{
		x: 4700,
		y: 6100
	},
	// Behind plant
	{
		x: 900,
		y: 1700
	},
	// Near lamp
	{
		x: 5500,
		y: 2100
	},
	// Under pillow
	// Additional banana positions
	{
		x: 3800,
		y: 1400
	},
	// Near top center
	{
		x: 1200,
		y: 3200
	},
	// Left middle area
	{
		x: 2300,
		y: 4700
	},
	// Middle area
	{
		x: 4300,
		y: 5500
	},
	// Right middle area
	{
		x: 800,
		y: 7000
	},
	// Bottom left corner
	{
		x: 2700,
		y: 7500
	},
	// Near collection desk
	{
		x: 4500,
		y: 7200
	},
	// Bottom right area
	{
		x: 5800,
		y: 2800
	},
	// Far right middle
	{
		x: 3400,
		y: 2600
	},
	// Upper middle
	{
		x: 1900,
		y: 1900
	},
	// Upper left
	{
		x: 4000,
		y: 4100
	},
	// Dead center
	{
		x: 5700,
		y: 5000
	},
	// Lower right
	{
		x: 600,
		y: 5000
	} // Lower left
	];
	for (var i = 0; i < totalBananas; i++) {
		var banana = new Banana();
		banana.x = bananaPositions[i].x;
		banana.y = bananaPositions[i].y;
		// Add slight random rotation
		banana.rotation = (Math.random() - 0.5) * 0.5;
		bananas.push(banana);
		game.addChild(banana);
	}
}
createBananas();
// Add Math.lerp utility function for smooth interpolation
Math.lerp = function (start, end, amt) {
	return (1 - amt) * start + amt * end;
};
// Create and add player character
player = new Player();
player.x = 3072; // Start at center of larger map horizontally
player.y = 4098; // Middle of the larger map vertically
game.addChild(player);
// Create and add enemy character
enemy = new Enemy();
enemy.x = 800; // Start at left side of screen
enemy.y = 800; // Top portion of screen
game.addChild(enemy);
// Game event handlers
game.down = function (x, y, obj) {
	// Check if player was clicked
	if (obj.target === player) {
		player.isDragging = true;
	}
};
game.move = function (x, y, obj) {
	// Move any dragged banana
	for (var i = 0; i < bananas.length; i++) {
		if (bananas[i].isDragging) {
			bananas[i].x = x;
			bananas[i].y = y;
		}
	}
	// Move player if being dragged
	if (player && player.isDragging) {
		// Direct movement - same speed as enemy
		player.x = x;
		player.y = y;
	}
};
game.up = function (x, y, obj) {
	// Handled by individual banana objects
	if (player) {
		player.isDragging = false;
	}
};
// Update function to check for player-banana collisions and handle camera
game.update = function () {
	// Keep track of player's previous position to restore on collision
	if (!player.lastX) player.lastX = player.x;
	if (!player.lastY) player.lastY = player.y;
	// Check wall boundaries
	var playerRadius = player.width * 0.4; // Assuming player size
	var isColliding = false;
	// Collision with map boundaries
	if (player.x < playerRadius || player.x > background.width - playerRadius || player.y < playerRadius || player.y > background.height - playerRadius) {
		isColliding = true;
	}
	// Collision with furniture
	for (var i = 0; i < furniturePieces.length; i++) {
		var furniture = furniturePieces[i];
		// Calculate distance between centers
		var dx = player.x - furniture.x;
		var dy = player.y - furniture.y;
		var minDistX = playerRadius + furniture.width / 2;
		var minDistY = playerRadius + furniture.height / 2;
		// Check rectangular collision
		if (Math.abs(dx) < minDistX && Math.abs(dy) < minDistY) {
			isColliding = true;
			break;
		}
	}
	// If collision detected, restore previous position
	if (isColliding) {
		player.x = player.lastX;
		player.y = player.lastY;
	} else {
		// Save current valid position
		player.lastX = player.x;
		player.lastY = player.y;
	}
	// Update camera position to follow player
	if (player) {
		// Calculate camera target position
		var cameraX = Math.max(1024, Math.min(background.width - 1024, player.x));
		var cameraY = Math.max(1366, Math.min(background.height - 1366, player.y));
		// Smoothly move the camera (game position) to follow the player
		game.x = Math.lerp(game.x, -cameraX + 1024, 0.1);
		game.y = Math.lerp(game.y, -cameraY + 1366, 0.1);
		// Update enemy
		if (enemy) {
			// Save last intersection status
			enemy.lastIntersecting = enemy.intersects(player);
			// Update enemy position (chase player)
			enemy.update();
			// Check if enemy touches player (automatic kill)
			if (enemy.intersects(player)) {
				// Flash screen red for game over effect
				LK.effects.flashScreen(0xFF0000, 1000);
				// Show game over
				LK.showGameOver();
			}
		}
		// Check if player touches any banana
		for (var i = 0; i < bananas.length; i++) {
			if (!bananas[i].isCollected && !bananas[i].isDragging && player.intersects(bananas[i])) {
				// Collect the banana
				bananas[i].isCollected = true;
				// Animate banana to center of desk
				var deskGlobal = collectionDesk.toGlobal({
					x: 0,
					y: 0
				});
				var deskLocal = game.toLocal(deskGlobal);
				// Play pickup sound
				LK.getSound('pickup').play();
				tween(bananas[i], {
					x: deskLocal.x + collectionDesk.width / 2,
					y: deskLocal.y + 50 + collectedBananas * 30
				}, {
					duration: 500,
					easing: tween.easeOut,
					onFinish: function onFinish() {
						collectedBananas++;
						updateCollectionCounter();
						LK.getSound('drop').play();
						if (collectedBananas === totalBananas) {
							LK.setTimeout(function () {
								LK.getSound('success').play();
								LK.showYouWin();
							}, 1000);
						}
					}
				});
			}
		}
	}
};
// Play background music
LK.playMusic('bgmusic');
// Instructions
var instructionsText = new Text2("Find 20 hidden bananas and\ndrag them to the collection desk!\nAvoid the red enemy!", {
	size: 50,
	fill: 0x000000
});
instructionsText.anchor.set(0.5, 0);
instructionsText.y = 100;
LK.gui.top.addChild(instructionsText);
// Auto-hide instructions after 5 seconds
LK.setTimeout(function () {
	tween(instructionsText, {
		alpha: 0
	}, {
		duration: 1000,
		easing: tween.easeOut
	});
}, 5000);