/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Ball = Container.expand(function () {
	var self = Container.call(this);
	var ballGraphics = self.attachAsset('ball', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.velocityX = 0;
	self.velocityY = 0;
	self.friction = 0.95;
	self.isMoving = false;
	self.update = function () {
		if (self.isMoving) {
			self.x += self.velocityX;
			self.y += self.velocityY;
			self.velocityX *= self.friction;
			self.velocityY *= self.friction;
			// Stop ball if velocity is very low
			if (Math.abs(self.velocityX) < 0.5 && Math.abs(self.velocityY) < 0.5) {
				self.velocityX = 0;
				self.velocityY = 0;
				self.isMoving = false;
			}
			// Field boundaries
			if (self.x < 50) {
				self.x = 50;
				self.velocityX = -self.velocityX * 0.8;
			}
			if (self.x > 1998) {
				self.x = 1998;
				self.velocityX = -self.velocityX * 0.8;
			}
			if (self.y < 300) {
				self.y = 300;
				self.velocityY = -self.velocityY * 0.8;
			}
			if (self.y > 1800) {
				self.y = 1800;
				self.velocityY = -self.velocityY * 0.8;
			}
		}
	};
	self.shoot = function (targetX, targetY) {
		var dx = targetX - self.x;
		var dy = targetY - self.y;
		var distance = Math.sqrt(dx * dx + dy * dy);
		self.velocityX = dx / distance * 15;
		self.velocityY = dy / distance * 15;
		self.isMoving = true;
		LK.getSound('kick').play();
	};
	return self;
});
var Defender = Container.expand(function () {
	var self = Container.call(this);
	var defenderGraphics = self.attachAsset('defender', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3;
	self.targetX = 0;
	self.targetY = 0;
	self.update = function () {
		// Move towards target
		var dx = self.targetX - self.x;
		var dy = self.targetY - self.y;
		var distance = Math.sqrt(dx * dx + dy * dy);
		if (distance > 5) {
			self.x += dx / distance * self.speed;
			self.y += dy / distance * self.speed;
		}
	};
	return self;
});
var Goalkeeper = Container.expand(function () {
	var self = Container.call(this);
	var goalkeeperGraphics = self.attachAsset('goalkeeper', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = 1;
	self.centerX = 0;
	self.baseY = 0; // Will be set when goalkeeper is positioned
	self.isMovingForward = false;
	self.lastPlayerDistance = 1000;
	self.update = function () {
		// Horizontal movement between goal posts
		self.x += self.direction * self.speed;
		// Bounce between goal posts
		if (self.x < self.centerX - 150 || self.x > self.centerX + 150) {
			self.direction *= -1;
		}
		// Check distance to player for forward movement
		if (typeof player !== 'undefined' && player) {
			var distanceToPlayer = Math.sqrt((player.x - self.x) * (player.x - self.x) + (player.y - self.y) * (player.y - self.y));
			// If player comes within 300 pixels, move forward
			if (distanceToPlayer < 300 && !self.isMovingForward && self.lastPlayerDistance >= 300) {
				self.isMovingForward = true;
				// Move forward by 100 pixels from goal line
				var targetY = self.baseY + (self.baseY < 1000 ? 100 : -100);
				tween(self, {
					y: targetY
				}, {
					duration: 500,
					easing: tween.easeOut
				});
			}
			// If player moves away beyond 400 pixels, return to goal line
			else if (distanceToPlayer > 400 && self.isMovingForward && self.lastPlayerDistance <= 400) {
				self.isMovingForward = false;
				// Return to goal line
				tween(self, {
					y: self.baseY
				}, {
					duration: 800,
					easing: tween.easeInOut
				});
			}
			self.lastPlayerDistance = distanceToPlayer;
		}
	};
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 8;
	self.hasBall = false;
	self.setColor = function (color) {
		playerGraphics.tint = color;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x228b22
});
/**** 
* Game Code
****/ 
// Menu system
var menuActive = true;
var gameStarted = false;
// Menu grass background
var menuGrassBackground = game.attachAsset('grass', {
	x: 0,
	y: 0,
	anchorX: 0,
	anchorY: 0
});
// Welcome text
var welcomeTxt = new Text2('Welcome', {
	size: 80,
	fill: 0xFFFFFF
});
welcomeTxt.anchor.set(0.5, 0.5);
welcomeTxt.x = 1024;
welcomeTxt.y = 500;
game.addChild(welcomeTxt);
// Menu title
var titleTxt = new Text2('FFT26', {
	size: 120,
	fill: 0xFFFFFF
});
titleTxt.anchor.set(0.5, 0.5);
titleTxt.x = 1024;
titleTxt.y = 700;
game.addChild(titleTxt);
// Demo text
var demoTxt = new Text2('Demo', {
	size: 80,
	fill: 0xFFFFFF
});
demoTxt.anchor.set(0.5, 0.5);
demoTxt.x = 1024;
demoTxt.y = 850;
game.addChild(demoTxt);
// Play button
var playButton = new Text2('PLAY', {
	size: 100,
	fill: 0x00FF00
});
playButton.anchor.set(0.5, 0.5);
playButton.x = 1024;
playButton.y = 1200;
game.addChild(playButton);
// Exit button
var exitButton = new Text2('EXIT', {
	size: 100,
	fill: 0xFF0000
});
exitButton.anchor.set(0.5, 0.5);
exitButton.x = 1024;
exitButton.y = 1400;
game.addChild(exitButton);
// Function to start the game
function startGame() {
	gameStarted = true;
	// Hide menu elements
	welcomeTxt.visible = false;
	titleTxt.visible = false;
	demoTxt.visible = false;
	playButton.visible = false;
	exitButton.visible = false;
	// Show game elements
	initializeGameElements();
}
// Function to initialize game elements
function initializeGameElements() {
	// Grass background
	var grassBackground = game.attachAsset('grass', {
		x: 0,
		y: 0,
		anchorX: 0,
		anchorY: 0
	});
	// Game field setup
	var fieldBackground = game.attachAsset('field', {
		x: 0,
		y: 400,
		anchorX: 0,
		anchorY: 0
	});
	// Goal setup - Top goal
	goalArea = game.attachAsset('goal', {
		x: 1024,
		y: 300,
		anchorX: 0.5,
		anchorY: 0
	});
	goalArea.alpha = 0.3;
	leftGoalPost = game.attachAsset('goalpost', {
		x: 824,
		y: 300,
		anchorX: 0.5,
		anchorY: 0
	});
	rightGoalPost = game.attachAsset('goalpost', {
		x: 1224,
		y: 300,
		anchorX: 0.5,
		anchorY: 0
	});
	// Second goal setup - Bottom goal
	goalArea2 = game.attachAsset('goal', {
		x: 1024,
		y: 1700,
		anchorX: 0.5,
		anchorY: 0
	});
	goalArea2.alpha = 0.3;
	leftGoalPost2 = game.attachAsset('goalpost', {
		x: 824,
		y: 1700,
		anchorX: 0.5,
		anchorY: 0
	});
	rightGoalPost2 = game.attachAsset('goalpost', {
		x: 1224,
		y: 1700,
		anchorX: 0.5,
		anchorY: 0
	});
	// Center line
	var centerLine = game.attachAsset('centerLine', {
		x: 0,
		y: 1048,
		anchorX: 0,
		anchorY: 0.5
	});
	// Center circle
	var centerCircle = game.attachAsset('centerCircle', {
		x: 1024,
		y: 1050,
		anchorX: 0.5,
		anchorY: 0.5
	});
	centerCircle.alpha = 0.8;
	// Score display
	scoreTxt = new Text2('0-0', {
		size: 80,
		fill: 0xFFFFFF
	});
	scoreTxt.anchor.set(0.5, 0);
	scoreTxt.y = 50; // Position score text below the top margin
	LK.gui.top.addChild(scoreTxt);
	// Timer display
	timerTxt = new Text2('Time: 90', {
		size: 60,
		fill: 0xFFFFFF
	});
	timerTxt.anchor.set(1, 0);
	LK.gui.topRight.addChild(timerTxt);
	// Game entities
	player = game.addChild(new Player());
	player.x = 1024;
	player.y = 1500;
	// Player color is now applied in constructor
	ball = game.addChild(new Ball());
	ball.x = 1024;
	ball.y = 1050;
	goalkeeper = game.addChild(new Goalkeeper());
	goalkeeper.x = 1024;
	goalkeeper.y = 350;
	goalkeeper.centerX = 1024;
	goalkeeper.baseY = 350; // Set base position for goal line
	// Second goalkeeper for bottom goal
	goalkeeper2 = game.addChild(new Goalkeeper());
	goalkeeper2.x = 1024;
	goalkeeper2.y = 1750;
	goalkeeper2.centerX = 1024;
	goalkeeper2.baseY = 1750; // Set base position for goal line
	// Defenders
	defenders = [];
	for (var i = 0; i < 3; i++) {
		var defender = game.addChild(new Defender());
		defender.x = 600 + i * 300;
		defender.y = 800 + i * 150;
		defenders.push(defender);
	}
	// Game variables
	gameTime = 90;
	goals = 0;
	opponentGoals = 0;
	gameActive = true;
	dragNode = null;
	lastGameTime = 90;
	// Game timer
	gameTimer = LK.setInterval(function () {
		if (gameActive) {
			gameTime--;
			timerTxt.setText('Time: ' + gameTime);
			if (gameTime <= 0) {
				gameActive = false;
				LK.showGameOver();
			}
		}
	}, 1000);
}
// Function to increase difficulty after each goal
function increaseDifficulty() {
	// Increase goalkeeper speed
	goalkeeper.speed += 0.5;
	goalkeeper2.speed += 0.5;
	// Increase defender speed
	for (var i = 0; i < defenders.length; i++) {
		defenders[i].speed += 0.3;
	}
	// Add new defender every 3 goals
	if (goals % 3 === 0 && defenders.length < 6) {
		var newDefender = game.addChild(new Defender());
		newDefender.x = 400 + Math.random() * 1200;
		newDefender.y = 600 + Math.random() * 600;
		defenders.push(newDefender);
	}
}
// Declare game variables globally
var goalArea, leftGoalPost, rightGoalPost, goalArea2, leftGoalPost2, rightGoalPost2, scoreTxt, timerTxt;
var player, ball, goalkeeper, goalkeeper2, defenders;
var gameTime, goals, opponentGoals, gameActive, dragNode, lastGameTime, gameTimer;
// Touch controls
game.down = function (x, y, obj) {
	if (menuActive) {
		// Check if play button was clicked
		var distanceToPlay = Math.sqrt((x - playButton.x) * (x - playButton.x) + (y - playButton.y) * (y - playButton.y));
		if (distanceToPlay < 150) {
			menuActive = false;
			startGame();
			return;
		}
		// Check if exit button was clicked
		var distanceToExit = Math.sqrt((x - exitButton.x) * (x - exitButton.x) + (y - exitButton.y) * (y - exitButton.y));
		if (distanceToExit < 150) {
			// Exit functionality - show game over to end the game
			LK.showGameOver();
			return;
		}
		return;
	}
	if (!gameActive || !gameStarted) return;
	var distanceToPlayer = Math.sqrt((x - player.x) * (x - player.x) + (y - player.y) * (y - player.y));
	var distanceToBall = Math.sqrt((x - ball.x) * (x - ball.x) + (y - ball.y) * (y - ball.y));
	if (distanceToPlayer < 100) {
		dragNode = player;
	} else if (distanceToBall < 80 && player.hasBall) {
		// Shoot ball towards tap location
		ball.shoot(x, y);
		player.hasBall = false;
	}
};
game.move = function (x, y, obj) {
	if (!gameActive || !gameStarted || menuActive) return;
	if (dragNode === player) {
		player.x = x;
		player.y = y;
		// Keep player within field bounds
		if (player.x < 100) player.x = 100;
		if (player.x > 1948) player.x = 1948;
		if (player.y < 400) player.y = 400;
		if (player.y > 1850) player.y = 1850;
		// Move ball with player if close enough
		if (player.hasBall && !ball.isMoving) {
			ball.x = player.x;
			ball.y = player.y - 50;
		}
	}
};
game.up = function (x, y, obj) {
	if (!gameStarted || menuActive) return;
	dragNode = null;
};
// Main game loop
game.update = function () {
	if (!gameActive || !gameStarted || menuActive) return;
	// Check if player can pick up ball - player always gets ball when touching it
	var distanceToBall = Math.sqrt((player.x - ball.x) * (player.x - ball.x) + (player.y - ball.y) * (player.y - ball.y));
	if (distanceToBall < 60 && !player.hasBall) {
		player.hasBall = true;
		ball.velocityX = 0;
		ball.velocityY = 0;
		ball.isMoving = false;
	}
	// Update defenders to chase ball
	for (var i = 0; i < defenders.length; i++) {
		var defender = defenders[i];
		defender.targetX = ball.x;
		defender.targetY = ball.y;
		// Check collision with ball - defender always gets the ball when touching it
		var distanceToBall = Math.sqrt((defender.x - ball.x) * (defender.x - ball.x) + (defender.y - ball.y) * (defender.y - ball.y));
		if (distanceToBall < 60) {
			// Defender always gets the ball when touching it
			player.hasBall = false;
			ball.velocityX = 0;
			ball.velocityY = 0;
			ball.isMoving = false;
			// Defender gets the ball and shoots towards goal
			var goalX = 1024; // Center of goal
			var goalY = 300; // Top goal
			// If defender is closer to bottom goal, shoot there instead
			if (defender.y > 1000) {
				goalY = 1750; // Bottom goal
			}
			ball.shoot(goalX + (Math.random() - 0.5) * 200, goalY);
			LK.effects.flashObject(defender, 0x00ff00, 500);
		}
		// Check collision with player - when defender touches player with ball, defender gets it
		var distanceToPlayer = Math.sqrt((defender.x - player.x) * (defender.x - player.x) + (defender.y - player.y) * (defender.y - player.y));
		if (distanceToPlayer < 80 && player.hasBall) {
			player.hasBall = false;
			ball.x = defender.x;
			ball.y = defender.y;
			// Defender immediately shoots towards goal
			var goalX = 1024;
			var goalY = 1750; // Shoot towards bottom goal (our goal)
			ball.shoot(goalX + (Math.random() - 0.5) * 200, goalY);
			LK.effects.flashObject(player, 0xff0000, 500);
		}
	}
	// Check collision with goalkeeper - when player touches goalkeeper, ball goes forward
	var distanceToGoalkeeper = Math.sqrt((player.x - goalkeeper.x) * (player.x - goalkeeper.x) + (player.y - goalkeeper.y) * (player.y - goalkeeper.y));
	if (distanceToGoalkeeper < 80) {
		if (!ball.isMoving) {
			// Make ball go forward (towards bottom goal)
			ball.shoot(ball.x, ball.y + 300);
			player.hasBall = false;
		}
	}
	// Check collision with second goalkeeper - when player touches goalkeeper, ball goes forward
	var distanceToGoalkeeper2 = Math.sqrt((player.x - goalkeeper2.x) * (player.x - goalkeeper2.x) + (player.y - goalkeeper2.y) * (player.y - goalkeeper2.y));
	if (distanceToGoalkeeper2 < 80) {
		if (!ball.isMoving) {
			// Make ball go forward (towards top goal)
			ball.shoot(ball.x, ball.y - 300);
			player.hasBall = false;
		}
	}
	// Check goal scoring - Top goal (we score)
	if (ball.x > 844 && ball.x < 1204 && ball.y < 500 && ball.y > 300) {
		if (ball.lastY === undefined || ball.lastY > 500) {
			goals++;
			LK.setScore(goals);
			scoreTxt.setText(goals + '-' + opponentGoals);
			LK.getSound('goal').play();
			LK.effects.flashScreen(0x00ff00, 1000);
			// Reset ball and player positions
			player.x = 1024;
			player.y = 1500;
			ball.x = 1024;
			ball.y = 1050;
			ball.velocityX = 0;
			ball.velocityY = 0;
			ball.isMoving = false;
			player.hasBall = false;
			// Increase difficulty after each goal
			increaseDifficulty();
			// Check win condition
			if (goals >= 10) {
				gameActive = false;
				LK.showYouWin();
			}
		}
	}
	// Check goal scoring - Bottom goal (opponent scores against us)
	if (ball.x > 844 && ball.x < 1204 && ball.y > 1700 && ball.y < 1900) {
		if (ball.lastY === undefined || ball.lastY < 1700) {
			opponentGoals++;
			scoreTxt.setText(goals + '-' + opponentGoals);
			LK.getSound('goal').play();
			LK.effects.flashScreen(0xff0000, 1000);
			// Reset ball and player positions
			player.x = 1024;
			player.y = 1500;
			ball.x = 1024;
			ball.y = 1050;
			ball.velocityX = 0;
			ball.velocityY = 0;
			ball.isMoving = false;
			player.hasBall = false;
			// Increase difficulty after each goal
			increaseDifficulty();
			// Check lose condition
			if (opponentGoals >= 10) {
				gameActive = false;
				LK.showGameOver();
			}
		}
	}
	ball.lastY = ball.y;
}; /**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
/**** 
* Classes
****/ 
var Ball = Container.expand(function () {
	var self = Container.call(this);
	var ballGraphics = self.attachAsset('ball', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.velocityX = 0;
	self.velocityY = 0;
	self.friction = 0.95;
	self.isMoving = false;
	self.update = function () {
		if (self.isMoving) {
			self.x += self.velocityX;
			self.y += self.velocityY;
			self.velocityX *= self.friction;
			self.velocityY *= self.friction;
			// Stop ball if velocity is very low
			if (Math.abs(self.velocityX) < 0.5 && Math.abs(self.velocityY) < 0.5) {
				self.velocityX = 0;
				self.velocityY = 0;
				self.isMoving = false;
			}
			// Field boundaries
			if (self.x < 50) {
				self.x = 50;
				self.velocityX = -self.velocityX * 0.8;
			}
			if (self.x > 1998) {
				self.x = 1998;
				self.velocityX = -self.velocityX * 0.8;
			}
			if (self.y < 300) {
				self.y = 300;
				self.velocityY = -self.velocityY * 0.8;
			}
			if (self.y > 1800) {
				self.y = 1800;
				self.velocityY = -self.velocityY * 0.8;
			}
		}
	};
	self.shoot = function (targetX, targetY) {
		var dx = targetX - self.x;
		var dy = targetY - self.y;
		var distance = Math.sqrt(dx * dx + dy * dy);
		self.velocityX = dx / distance * 15;
		self.velocityY = dy / distance * 15;
		self.isMoving = true;
		LK.getSound('kick').play();
	};
	return self;
});
var Defender = Container.expand(function () {
	var self = Container.call(this);
	var defenderGraphics = self.attachAsset('defender', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 3;
	self.targetX = 0;
	self.targetY = 0;
	self.update = function () {
		// Move towards target
		var dx = self.targetX - self.x;
		var dy = self.targetY - self.y;
		var distance = Math.sqrt(dx * dx + dy * dy);
		if (distance > 5) {
			self.x += dx / distance * self.speed;
			self.y += dy / distance * self.speed;
		}
	};
	return self;
});
var Goalkeeper = Container.expand(function () {
	var self = Container.call(this);
	var goalkeeperGraphics = self.attachAsset('goalkeeper', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = 1;
	self.centerX = 0;
	self.baseY = 0; // Will be set when goalkeeper is positioned
	self.isMovingForward = false;
	self.lastPlayerDistance = 1000;
	self.update = function () {
		// Horizontal movement between goal posts
		self.x += self.direction * self.speed;
		// Bounce between goal posts
		if (self.x < self.centerX - 150 || self.x > self.centerX + 150) {
			self.direction *= -1;
		}
		// Check distance to player for forward movement
		if (typeof player !== 'undefined' && player) {
			var distanceToPlayer = Math.sqrt((player.x - self.x) * (player.x - self.x) + (player.y - self.y) * (player.y - self.y));
			// If player comes within 300 pixels, move forward
			if (distanceToPlayer < 300 && !self.isMovingForward && self.lastPlayerDistance >= 300) {
				self.isMovingForward = true;
				// Move forward by 100 pixels from goal line
				var targetY = self.baseY + (self.baseY < 1000 ? 100 : -100);
				tween(self, {
					y: targetY
				}, {
					duration: 500,
					easing: tween.easeOut
				});
			}
			// If player moves away beyond 400 pixels, return to goal line
			else if (distanceToPlayer > 400 && self.isMovingForward && self.lastPlayerDistance <= 400) {
				self.isMovingForward = false;
				// Return to goal line
				tween(self, {
					y: self.baseY
				}, {
					duration: 800,
					easing: tween.easeInOut
				});
			}
			self.lastPlayerDistance = distanceToPlayer;
		}
	};
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 8;
	self.hasBall = false;
	self.setColor = function (color) {
		playerGraphics.tint = color;
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x228b22
});
/**** 
* Game Code
****/ 
// Menu system
var menuActive = true;
var gameStarted = false;
// Menu grass background
var menuGrassBackground = game.attachAsset('grass', {
	x: 0,
	y: 0,
	anchorX: 0,
	anchorY: 0
});
// Welcome text
var welcomeTxt = new Text2('Welcome', {
	size: 80,
	fill: 0xFFFFFF
});
welcomeTxt.anchor.set(0.5, 0.5);
welcomeTxt.x = 1024;
welcomeTxt.y = 500;
game.addChild(welcomeTxt);
// Menu title
var titleTxt = new Text2('FFT26', {
	size: 120,
	fill: 0xFFFFFF
});
titleTxt.anchor.set(0.5, 0.5);
titleTxt.x = 1024;
titleTxt.y = 700;
game.addChild(titleTxt);
// Demo text
var demoTxt = new Text2('Demo', {
	size: 80,
	fill: 0xFFFFFF
});
demoTxt.anchor.set(0.5, 0.5);
demoTxt.x = 1024;
demoTxt.y = 850;
game.addChild(demoTxt);
// Play button
var playButton = new Text2('PLAY', {
	size: 100,
	fill: 0x00FF00
});
playButton.anchor.set(0.5, 0.5);
playButton.x = 1024;
playButton.y = 1200;
game.addChild(playButton);
// Exit button
var exitButton = new Text2('EXIT', {
	size: 100,
	fill: 0xFF0000
});
exitButton.anchor.set(0.5, 0.5);
exitButton.x = 1024;
exitButton.y = 1400;
game.addChild(exitButton);
// Function to start the game
function startGame() {
	gameStarted = true;
	// Hide menu elements
	welcomeTxt.visible = false;
	titleTxt.visible = false;
	demoTxt.visible = false;
	playButton.visible = false;
	exitButton.visible = false;
	// Show game elements
	initializeGameElements();
}
// Function to initialize game elements
function initializeGameElements() {
	// Grass background
	var grassBackground = game.attachAsset('grass', {
		x: 0,
		y: 0,
		anchorX: 0,
		anchorY: 0
	});
	// Game field setup
	var fieldBackground = game.attachAsset('field', {
		x: 0,
		y: 400,
		anchorX: 0,
		anchorY: 0
	});
	// Goal setup - Top goal
	goalArea = game.attachAsset('goal', {
		x: 1024,
		y: 300,
		anchorX: 0.5,
		anchorY: 0
	});
	goalArea.alpha = 0.3;
	leftGoalPost = game.attachAsset('goalpost', {
		x: 824,
		y: 300,
		anchorX: 0.5,
		anchorY: 0
	});
	rightGoalPost = game.attachAsset('goalpost', {
		x: 1224,
		y: 300,
		anchorX: 0.5,
		anchorY: 0
	});
	// Second goal setup - Bottom goal
	goalArea2 = game.attachAsset('goal', {
		x: 1024,
		y: 1700,
		anchorX: 0.5,
		anchorY: 0
	});
	goalArea2.alpha = 0.3;
	leftGoalPost2 = game.attachAsset('goalpost', {
		x: 824,
		y: 1700,
		anchorX: 0.5,
		anchorY: 0
	});
	rightGoalPost2 = game.attachAsset('goalpost', {
		x: 1224,
		y: 1700,
		anchorX: 0.5,
		anchorY: 0
	});
	// Center line
	var centerLine = game.attachAsset('centerLine', {
		x: 0,
		y: 1048,
		anchorX: 0,
		anchorY: 0.5
	});
	// Center circle
	var centerCircle = game.attachAsset('centerCircle', {
		x: 1024,
		y: 1050,
		anchorX: 0.5,
		anchorY: 0.5
	});
	centerCircle.alpha = 0.8;
	// Score display
	scoreTxt = new Text2('0-0', {
		size: 80,
		fill: 0xFFFFFF
	});
	scoreTxt.anchor.set(0.5, 0);
	scoreTxt.y = 50; // Position score text below the top margin
	LK.gui.top.addChild(scoreTxt);
	// Timer display
	timerTxt = new Text2('Time: 90', {
		size: 60,
		fill: 0xFFFFFF
	});
	timerTxt.anchor.set(1, 0);
	LK.gui.topRight.addChild(timerTxt);
	// Game entities
	player = game.addChild(new Player());
	player.x = 1024;
	player.y = 1500;
	// Player color is now applied in constructor
	ball = game.addChild(new Ball());
	ball.x = 1024;
	ball.y = 1050;
	goalkeeper = game.addChild(new Goalkeeper());
	goalkeeper.x = 1024;
	goalkeeper.y = 350;
	goalkeeper.centerX = 1024;
	goalkeeper.baseY = 350; // Set base position for goal line
	// Second goalkeeper for bottom goal
	goalkeeper2 = game.addChild(new Goalkeeper());
	goalkeeper2.x = 1024;
	goalkeeper2.y = 1750;
	goalkeeper2.centerX = 1024;
	goalkeeper2.baseY = 1750; // Set base position for goal line
	// Defenders
	defenders = [];
	for (var i = 0; i < 3; i++) {
		var defender = game.addChild(new Defender());
		defender.x = 600 + i * 300;
		defender.y = 800 + i * 150;
		defenders.push(defender);
	}
	// Game variables
	gameTime = 90;
	goals = 0;
	opponentGoals = 0;
	gameActive = true;
	dragNode = null;
	lastGameTime = 90;
	// Game timer
	gameTimer = LK.setInterval(function () {
		if (gameActive) {
			gameTime--;
			timerTxt.setText('Time: ' + gameTime);
			if (gameTime <= 0) {
				gameActive = false;
				LK.showGameOver();
			}
		}
	}, 1000);
}
// Function to increase difficulty after each goal
function increaseDifficulty() {
	// Increase goalkeeper speed
	goalkeeper.speed += 0.5;
	goalkeeper2.speed += 0.5;
	// Increase defender speed
	for (var i = 0; i < defenders.length; i++) {
		defenders[i].speed += 0.3;
	}
	// Add new defender every 3 goals
	if (goals % 3 === 0 && defenders.length < 6) {
		var newDefender = game.addChild(new Defender());
		newDefender.x = 400 + Math.random() * 1200;
		newDefender.y = 600 + Math.random() * 600;
		defenders.push(newDefender);
	}
}
// Declare game variables globally
var goalArea, leftGoalPost, rightGoalPost, goalArea2, leftGoalPost2, rightGoalPost2, scoreTxt, timerTxt;
var player, ball, goalkeeper, goalkeeper2, defenders;
var gameTime, goals, opponentGoals, gameActive, dragNode, lastGameTime, gameTimer;
// Touch controls
game.down = function (x, y, obj) {
	if (menuActive) {
		// Check if play button was clicked
		var distanceToPlay = Math.sqrt((x - playButton.x) * (x - playButton.x) + (y - playButton.y) * (y - playButton.y));
		if (distanceToPlay < 150) {
			menuActive = false;
			startGame();
			return;
		}
		// Check if exit button was clicked
		var distanceToExit = Math.sqrt((x - exitButton.x) * (x - exitButton.x) + (y - exitButton.y) * (y - exitButton.y));
		if (distanceToExit < 150) {
			// Exit functionality - show game over to end the game
			LK.showGameOver();
			return;
		}
		return;
	}
	if (!gameActive || !gameStarted) return;
	var distanceToPlayer = Math.sqrt((x - player.x) * (x - player.x) + (y - player.y) * (y - player.y));
	var distanceToBall = Math.sqrt((x - ball.x) * (x - ball.x) + (y - ball.y) * (y - ball.y));
	if (distanceToPlayer < 100) {
		dragNode = player;
	} else if (distanceToBall < 80 && player.hasBall) {
		// Shoot ball towards tap location
		ball.shoot(x, y);
		player.hasBall = false;
	}
};
game.move = function (x, y, obj) {
	if (!gameActive || !gameStarted || menuActive) return;
	if (dragNode === player) {
		player.x = x;
		player.y = y;
		// Keep player within field bounds
		if (player.x < 100) player.x = 100;
		if (player.x > 1948) player.x = 1948;
		if (player.y < 400) player.y = 400;
		if (player.y > 1850) player.y = 1850;
		// Move ball with player if close enough
		if (player.hasBall && !ball.isMoving) {
			ball.x = player.x;
			ball.y = player.y - 50;
		}
	}
};
game.up = function (x, y, obj) {
	if (!gameStarted || menuActive) return;
	dragNode = null;
};
// Main game loop
game.update = function () {
	if (!gameActive || !gameStarted || menuActive) return;
	// Check if player can pick up ball - player always gets ball when touching it
	var distanceToBall = Math.sqrt((player.x - ball.x) * (player.x - ball.x) + (player.y - ball.y) * (player.y - ball.y));
	if (distanceToBall < 60 && !player.hasBall) {
		player.hasBall = true;
		ball.velocityX = 0;
		ball.velocityY = 0;
		ball.isMoving = false;
	}
	// Update defenders to chase ball
	for (var i = 0; i < defenders.length; i++) {
		var defender = defenders[i];
		defender.targetX = ball.x;
		defender.targetY = ball.y;
		// Check collision with ball - defender always gets the ball when touching it
		var distanceToBall = Math.sqrt((defender.x - ball.x) * (defender.x - ball.x) + (defender.y - ball.y) * (defender.y - ball.y));
		if (distanceToBall < 60) {
			// Defender always gets the ball when touching it
			player.hasBall = false;
			ball.velocityX = 0;
			ball.velocityY = 0;
			ball.isMoving = false;
			// Defender gets the ball and shoots towards goal
			var goalX = 1024; // Center of goal
			var goalY = 300; // Top goal
			// If defender is closer to bottom goal, shoot there instead
			if (defender.y > 1000) {
				goalY = 1750; // Bottom goal
			}
			ball.shoot(goalX + (Math.random() - 0.5) * 200, goalY);
			LK.effects.flashObject(defender, 0x00ff00, 500);
		}
		// Check collision with player - when defender touches player with ball, defender gets it
		var distanceToPlayer = Math.sqrt((defender.x - player.x) * (defender.x - player.x) + (defender.y - player.y) * (defender.y - player.y));
		if (distanceToPlayer < 80 && player.hasBall) {
			player.hasBall = false;
			ball.x = defender.x;
			ball.y = defender.y;
			// Defender immediately shoots towards goal
			var goalX = 1024;
			var goalY = 1750; // Shoot towards bottom goal (our goal)
			ball.shoot(goalX + (Math.random() - 0.5) * 200, goalY);
			LK.effects.flashObject(player, 0xff0000, 500);
		}
	}
	// Check collision with goalkeeper - when player touches goalkeeper, ball goes forward
	var distanceToGoalkeeper = Math.sqrt((player.x - goalkeeper.x) * (player.x - goalkeeper.x) + (player.y - goalkeeper.y) * (player.y - goalkeeper.y));
	if (distanceToGoalkeeper < 80) {
		if (!ball.isMoving) {
			// Make ball go forward (towards bottom goal)
			ball.shoot(ball.x, ball.y + 300);
			player.hasBall = false;
		}
	}
	// Check collision with second goalkeeper - when player touches goalkeeper, ball goes forward
	var distanceToGoalkeeper2 = Math.sqrt((player.x - goalkeeper2.x) * (player.x - goalkeeper2.x) + (player.y - goalkeeper2.y) * (player.y - goalkeeper2.y));
	if (distanceToGoalkeeper2 < 80) {
		if (!ball.isMoving) {
			// Make ball go forward (towards top goal)
			ball.shoot(ball.x, ball.y - 300);
			player.hasBall = false;
		}
	}
	// Check goal scoring - Top goal (we score)
	if (ball.x > 844 && ball.x < 1204 && ball.y < 500 && ball.y > 300) {
		if (ball.lastY === undefined || ball.lastY > 500) {
			goals++;
			LK.setScore(goals);
			scoreTxt.setText(goals + '-' + opponentGoals);
			LK.getSound('goal').play();
			LK.effects.flashScreen(0x00ff00, 1000);
			// Reset ball and player positions
			player.x = 1024;
			player.y = 1500;
			ball.x = 1024;
			ball.y = 1050;
			ball.velocityX = 0;
			ball.velocityY = 0;
			ball.isMoving = false;
			player.hasBall = false;
			// Increase difficulty after each goal
			increaseDifficulty();
			// Check win condition
			if (goals >= 10) {
				gameActive = false;
				LK.showYouWin();
			}
		}
	}
	// Check goal scoring - Bottom goal (opponent scores against us)
	if (ball.x > 844 && ball.x < 1204 && ball.y > 1700 && ball.y < 1900) {
		if (ball.lastY === undefined || ball.lastY < 1700) {
			opponentGoals++;
			scoreTxt.setText(goals + '-' + opponentGoals);
			LK.getSound('goal').play();
			LK.effects.flashScreen(0xff0000, 1000);
			// Reset ball and player positions
			player.x = 1024;
			player.y = 1500;
			ball.x = 1024;
			ball.y = 1050;
			ball.velocityX = 0;
			ball.velocityY = 0;
			ball.isMoving = false;
			player.hasBall = false;
			// Increase difficulty after each goal
			increaseDifficulty();
			// Check lose condition
			if (opponentGoals >= 10) {
				gameActive = false;
				LK.showGameOver();
			}
		}
	}
	ball.lastY = ball.y;
};