/**** 
* Classes
****/ 
//<Assets used in the game will automatically appear here>
// AnimatedBug class to represent the bug that flies to the top of the screen
var AnimatedBug = Container.expand(function () {
	var self = Container.call(this);
	var bugGraphics = self.attachAsset('bug', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self.update = function () {
		// Determine the direction to fly to (left or right)
		var direction = Math.random() < 0.5 ? -1 : 1;
		// Update the x and y position
		self.x += self.speed * direction * 3;
		self.y -= self.speed * 3;
		// Destroy the bug when it flies off the screen
		if (self.y < 0 || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
	};
});
var Bug = Container.expand(function () {
	var self = Container.call(this);
	var bugGraphics = self.attachAsset('bug', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
	self.down = function (x, y, obj) {
		// Increment score
		LK.setScore(LK.getScore() + 1);
		// Update score text
		scoreTxt.setText('Score: ' + LK.getScore());
		// Replace bug with AnimatedBug
		var animatedBug = game.addChild(new AnimatedBug());
		animatedBug.x = self.x;
		animatedBug.y = self.y;
		self.destroy();
	};
});
var ChristmasSlalom = Container.expand(function () {
	var self = Container.call(this);
	var slalomGraphics = self.attachAsset('tree', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
});
// Dust class to represent the dust effect
var Dust = Container.expand(function () {
	var self = Container.call(this);
	var dustGraphics = self.attachAsset('dust', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 1;
	self.update = function () {
		self.y += self.speed;
		self.alpha -= 0.01; // Fade out effect
		if (self.alpha <= 0) {
			self.destroy();
		}
	};
});
// FastBug class to represent the fast bug that scrolls down the screen
var FastBug = Container.expand(function () {
	var self = Container.call(this);
	var bugGraphics = self.attachAsset('fastBug', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self.update = function () {
		self.y += self.speed;
		// Add dust effect
		for (var i = 0; i < 3; i++) {
			var dust = new Dust();
			dust.x = self.x + (Math.random() - 0.5) * 20; // Random x offset
			dust.y = self.y + (Math.random() - 0.5) * 20; // Random y offset
			game.addChild(dust);
		}
	};
	self.down = function (x, y, obj) {
		// Increment score
		LK.setScore(LK.getScore() + 1);
		// Update score text
		scoreTxt.setText('Score: ' + LK.getScore());
		// Replace bug with AnimatedBug
		var animatedBug = game.addChild(new AnimatedBug());
		animatedBug.x = self.x;
		animatedBug.y = self.y;
		self.destroy();
	};
});
var Gift = Container.expand(function () {
	var self = Container.call(this);
	var giftGraphics = self.attachAsset('gift', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
	self.down = function (x, y, obj) {
		LK.setScore(LK.getScore() + 5);
		scoreTxt.setText('Score: ' + LK.getScore());
		self.destroy();
	};
});
// Jeep class to represent the player's vehicle
var Jeep = Container.expand(function () {
	var self = Container.call(this);
	var jeepGraphics = self.attachAsset('jeep', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 12;
	self.life = 100; // Add life property to the jeep object
	self.update = function () {
		// Jeep movement logic removed
	};
	self.isInvulnerable = false; // Add invulnerability state
	self.collision = function () {
		if (self.isInvulnerable) {
			return;
		} // Skip collision if invulnerable
		self.isInvulnerable = true; // Set invulnerability
		LK.getSound('collisionSound').play(); // Play collision sound
		// Randomly push the jeep in a random direction by 250 pixels
		var randomAngle = Math.random() * 2 * Math.PI; // Random angle in radians
		self.x += 250 * Math.cos(randomAngle);
		self.y += 250 * Math.sin(randomAngle);
		// Add rotation animation
		var originalRotation = self.rotation;
		self.rotation += Math.PI; // Rotate 180 degrees
		LK.setTimeout(function () {
			self.rotation = originalRotation; // Reset rotation after 1 second
		}, 1000);
		// Disable control for 2 seconds
		isTouching = false;
		LK.setTimeout(function () {
			isTouching = true;
		}, 2000);
		LK.setTimeout(function () {
			self.isInvulnerable = false; // Remove invulnerability after 1 second
		}, 1000);
		// Add collision method to decrease life by 10% on collision
		self.life = Math.min(self.life - 5, 100);
		// Add collision animation effect
		LK.effects.flashObject(self, 0xff0000, 500); // Flash red for 500ms
		lifeTxt.setText('Life: ' + Math.round(self.life) + '%'); // Update the life counter
		if (self.life <= 0) {
			LK.clearTimeout(gameTimer);
			LK.showGameOver();
		}
		var lifeCounterAsset = LK.getAsset('lifeCounter', {});
		if (lifeCounterAsset.width <= 0) {
			LK.showGameOver();
		}
	};
});
// LifeRestoration class to represent the object that restores life
var LifeRestoration = Container.expand(function () {
	var self = Container.call(this);
	var lifeRestorationGraphics = self.attachAsset('lifeRestoration', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
	self.down = function (x, y, obj) {
		jeep.life = Math.min(jeep.life + jeep.life * 0.1, 100); // Increase life by 10% but cap at 100
		lifeTxt.setText('Life: ' + Math.round(jeep.life) + '%'); // Update the life counter
		self.destroy();
	};
});
// Sparkle class to represent the sparkle effect
var Sparkle = Container.expand(function () {
	var self = Container.call(this);
	var sparkleGraphics = self.attachAsset('sparkle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.update = function () {
		self.y += self.speed;
		self.alpha -= 0.08; // Fade out effect
		if (self.alpha <= 0) {
			self.destroy();
		}
	};
});
var Tree = Container.expand(function () {
	var self = Container.call(this);
	var treeGraphics = self.attachAsset('tree', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
});
var Tree2 = Container.expand(function () {
	var self = Container.call(this);
	var tree2Graphics = self.attachAsset('tree2', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0xADD8E6 //Init game with light blue background
});
/**** 
* Game Code
****/ 
// Initialize game variables
var jeep;
var scoreTxt;
var gameTimer;
var timerTxt; // Text to display the timer
var startScreen; // Start screen container
var startButton; // Start button
// Function to initialize game elements
function initGame() {
	// Create start screen
	startScreen = new Container();
	var startTextObject = LK.getAsset('christmasSlalom', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	startTextObject.x = 2048 / 2 - 200;
	startTextObject.y = 2732 / 2 - 500;
	startScreen.addChild(startTextObject);
	startButton = new Container();
	var startButtonText = LK.getAsset('startButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	startButtonText.anchor.set(0.5, 0.5);
	startButtonText.x = 0;
	startButtonText.y = 0;
	startButton.addChild(startButtonText);
	startButton.x = 2048 / 2;
	startButton.y = 2732 / 2 + 100;
	startScreen.addChild(startButton);
	game.addChild(startScreen);
	// Add event listener for start button
	startButton.down = function () {
		game.removeChild(startScreen);
		startGame();
	};
	// Function to start the game
	function startGame() {
		// Play background music
		LK.playMusic('backgroundMusic');
		jeep = game.addChild(new Jeep());
		jeep.x = 2048 / 2;
		jeep.y = 2732 - 200;
		jeep.update = function () {
			// Jeep movement logic or other updates can be added here
			// Set a 2-minute timer to end the game
			gameTimer = LK.setTimeout(function () {
				LK.showGameOver();
			}, 120000); // 120000 milliseconds = 2 minutes
		};
	}
	// Initialize score display
	scoreTxt = new Text2('Score: 0', {
		size: 80,
		fill: "#ffffff"
	});
	// Initialize life display
	lifeTxt = new Text2('Life: 100%', {
		size: 80,
		fill: "#ffffff"
	});
	lifeTxt.anchor.set(0.5, 1);
	LK.gui.bottomLeft.addChild(lifeTxt);
	// Add life counter asset
	var lifeCounterAsset = LK.getAsset('lifeCounter', {
		anchorX: 1.5,
		anchorY: 0.5,
		x: lifeTxt.x,
		y: lifeTxt.y
	});
	LK.gui.topLeft.addChild(lifeCounterAsset);
	// Initialize bugs, fastBugs and trees arrays
	bugs = [];
	fastBugs = [];
	trees = [];
	scoreTxt.anchor.set(0.5, 0);
	LK.gui.top.addChild(scoreTxt);
	// Initialize timer display
	timerTxt = new Text2('Time: 2:00', {
		size: 80,
		fill: "#ffffff"
	});
	timerTxt.anchor.set(0.5, 0);
	timerTxt.x -= 250; // Move the timer 250 pixels to the left
	LK.gui.topRight.addChild(timerTxt);
	// Update the timer every second
	var timeRemaining = 120; // 2 minutes in seconds
	var timerInterval = LK.setInterval(function () {
		timeRemaining--;
		var minutes = Math.floor(timeRemaining / 60);
		var seconds = timeRemaining % 60;
		timerTxt.setText('Time: ' + minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
		if (timeRemaining <= 0) {
			LK.clearInterval(timerInterval);
		}
	}, 1000);
}
// Event handler for moving the Jeep
var isTouching = false;
var touchPosition = {
	x: 0,
	y: 0
};
game.move = function (x, y, obj) {
	isTouching = true;
	touchPosition.x = x;
	touchPosition.y = y;
};
game.up = function (x, y, obj) {
	isTouching = false;
};
game.update = function () {
	if (isTouching && jeep) {
		var dx = touchPosition.x - jeep.x;
		var dy = touchPosition.y - jeep.y;
		var angle = Math.atan2(dy, dx);
		jeep.x += jeep.speed * Math.cos(angle);
		jeep.y += jeep.speed * Math.sin(angle);
	}
	if (jeep) {
		jeep.update();
	}
	// Bug and tree spawning logic
	if (LK.ticks % 60 == 0) {
		var newBug = new Bug();
		newBug.x = Math.random() * 2048;
		newBug.y = 0;
		bugs.push(newBug);
		game.addChild(newBug);
	}
	if (LK.ticks % 180 == 0) {
		var newFastBug = new FastBug();
		newFastBug.x = Math.random() * 2048;
		newFastBug.y = 0;
		fastBugs.push(newFastBug);
		game.addChild(newFastBug);
	}
	if (LK.ticks % 180 == 0) {
		var newTree = new Tree();
		newTree.x = Math.random() * 2048;
		newTree.y = 0;
		trees.push(newTree);
		game.addChild(newTree);
		var newTree2 = new Tree2();
		newTree2.x = Math.random() * 2048;
		newTree2.y = 0;
		trees.push(newTree2);
		game.addChild(newTree2);
	}
	if (LK.ticks % 240 == 0) {
		var newSlalom = new ChristmasSlalom();
		newSlalom.x = Math.random() * 2048;
		newSlalom.y = 0;
		game.addChild(newSlalom);
	}
	if (LK.ticks % 300 == 0) {
		var newGift = new Gift();
		newGift.x = Math.random() * 2048;
		newGift.y = 0;
		game.addChild(newGift);
		var newLifeRestoration = new LifeRestoration();
		newLifeRestoration.x = Math.random() * 2048;
		newLifeRestoration.y = 0;
		game.addChild(newLifeRestoration);
	}
	// Bug and tree movement and collision detection logic
	for (var i = bugs.length - 1; i >= 0; i--) {
		bugs[i].update();
		if (bugs[i].intersects(jeep)) {
			jeep.collision();
			var sparkle = new Sparkle();
			var angle = Math.random() * 2 * Math.PI; // Random angle in radians
			var radius = Math.random() * 50 + 50; // Random radius between 50 and 100
			sparkle.x = jeep.x + radius * Math.cos(angle);
			sparkle.y = jeep.y + radius * Math.sin(angle);
			game.addChild(sparkle);
		}
		if (bugs[i].y > 2732) {
			bugs[i].destroy();
			bugs.splice(i, 1);
		}
	}
	for (var i = fastBugs.length - 1; i >= 0; i--) {
		fastBugs[i].update();
		if (fastBugs[i].intersects(jeep)) {
			jeep.collision();
			for (var j = 0; j < 3; j++) {
				var sparkle = new Sparkle();
				var angle = Math.random() * 2 * Math.PI; // Random angle in radians
				var radius = Math.random() * 50 + 50; // Random radius between 50 and 100
				sparkle.x = jeep.x + radius * Math.cos(angle);
				sparkle.y = jeep.y + radius * Math.sin(angle);
				game.addChild(sparkle);
			}
		}
		if (fastBugs[i].y > 2732) {
			fastBugs[i].destroy();
			fastBugs.splice(i, 1);
		}
	}
	for (var i = trees.length - 1; i >= 0; i--) {
		trees[i].update();
		if (trees[i].intersects(jeep)) {
			jeep.collision();
			for (var j = 0; j < 10; j++) {
				var sparkle = new Sparkle();
				sparkle.x = jeep.x + (Math.random() - 0.5) * 100;
				sparkle.y = jeep.y + (Math.random() - 0.5) * 100;
				game.addChild(sparkle);
			}
		}
		if (trees[i].y > 2732) {
			trees[i].destroy();
			trees.splice(i, 1);
		}
	}
	// Check for collision between 'gift' and 'jeep'
	game.children.forEach(function (child) {
		if (child instanceof Gift && child.intersects(jeep, 0.8)) {
			LK.getSound('giftPickupSound').play();
			LK.setScore(LK.getScore() + 5);
			scoreTxt.setText('Score: ' + LK.getScore());
			child.destroy();
		}
		// Check for collision between 'jeep' and 'lifeRestoration'
		if (child instanceof LifeRestoration && child.intersects(jeep, 0.8)) {
			LK.getSound('lifeRestorationSound').play(); // Play new sound effect for picking up lifeRestoration
			jeep.life = Math.min(jeep.life + 10, 100); // Increase life by 10 units but cap at 100
			lifeTxt.setText('Life: ' + Math.round(jeep.life) + '%'); // Update the life counter
			child.destroy();
		}
	});
};
// Initialize the game
initGame();
; /**** 
* Classes
****/ 
//<Assets used in the game will automatically appear here>
// AnimatedBug class to represent the bug that flies to the top of the screen
var AnimatedBug = Container.expand(function () {
	var self = Container.call(this);
	var bugGraphics = self.attachAsset('bug', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self.update = function () {
		// Determine the direction to fly to (left or right)
		var direction = Math.random() < 0.5 ? -1 : 1;
		// Update the x and y position
		self.x += self.speed * direction * 3;
		self.y -= self.speed * 3;
		// Destroy the bug when it flies off the screen
		if (self.y < 0 || self.x < 0 || self.x > 2048) {
			self.destroy();
		}
	};
});
var Bug = Container.expand(function () {
	var self = Container.call(this);
	var bugGraphics = self.attachAsset('bug', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
	self.down = function (x, y, obj) {
		// Increment score
		LK.setScore(LK.getScore() + 1);
		// Update score text
		scoreTxt.setText('Score: ' + LK.getScore());
		// Replace bug with AnimatedBug
		var animatedBug = game.addChild(new AnimatedBug());
		animatedBug.x = self.x;
		animatedBug.y = self.y;
		self.destroy();
	};
});
var ChristmasSlalom = Container.expand(function () {
	var self = Container.call(this);
	var slalomGraphics = self.attachAsset('tree', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
});
// Dust class to represent the dust effect
var Dust = Container.expand(function () {
	var self = Container.call(this);
	var dustGraphics = self.attachAsset('dust', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 1;
	self.update = function () {
		self.y += self.speed;
		self.alpha -= 0.01; // Fade out effect
		if (self.alpha <= 0) {
			self.destroy();
		}
	};
});
// FastBug class to represent the fast bug that scrolls down the screen
var FastBug = Container.expand(function () {
	var self = Container.call(this);
	var bugGraphics = self.attachAsset('fastBug', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 10;
	self.update = function () {
		self.y += self.speed;
		// Add dust effect
		for (var i = 0; i < 3; i++) {
			var dust = new Dust();
			dust.x = self.x + (Math.random() - 0.5) * 20; // Random x offset
			dust.y = self.y + (Math.random() - 0.5) * 20; // Random y offset
			game.addChild(dust);
		}
	};
	self.down = function (x, y, obj) {
		// Increment score
		LK.setScore(LK.getScore() + 1);
		// Update score text
		scoreTxt.setText('Score: ' + LK.getScore());
		// Replace bug with AnimatedBug
		var animatedBug = game.addChild(new AnimatedBug());
		animatedBug.x = self.x;
		animatedBug.y = self.y;
		self.destroy();
	};
});
var Gift = Container.expand(function () {
	var self = Container.call(this);
	var giftGraphics = self.attachAsset('gift', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
	self.down = function (x, y, obj) {
		LK.setScore(LK.getScore() + 5);
		scoreTxt.setText('Score: ' + LK.getScore());
		self.destroy();
	};
});
// Jeep class to represent the player's vehicle
var Jeep = Container.expand(function () {
	var self = Container.call(this);
	var jeepGraphics = self.attachAsset('jeep', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 12;
	self.life = 100; // Add life property to the jeep object
	self.update = function () {
		// Jeep movement logic removed
	};
	self.isInvulnerable = false; // Add invulnerability state
	self.collision = function () {
		if (self.isInvulnerable) {
			return;
		} // Skip collision if invulnerable
		self.isInvulnerable = true; // Set invulnerability
		LK.getSound('collisionSound').play(); // Play collision sound
		// Randomly push the jeep in a random direction by 250 pixels
		var randomAngle = Math.random() * 2 * Math.PI; // Random angle in radians
		self.x += 250 * Math.cos(randomAngle);
		self.y += 250 * Math.sin(randomAngle);
		// Add rotation animation
		var originalRotation = self.rotation;
		self.rotation += Math.PI; // Rotate 180 degrees
		LK.setTimeout(function () {
			self.rotation = originalRotation; // Reset rotation after 1 second
		}, 1000);
		// Disable control for 2 seconds
		isTouching = false;
		LK.setTimeout(function () {
			isTouching = true;
		}, 2000);
		LK.setTimeout(function () {
			self.isInvulnerable = false; // Remove invulnerability after 1 second
		}, 1000);
		// Add collision method to decrease life by 10% on collision
		self.life = Math.min(self.life - 5, 100);
		// Add collision animation effect
		LK.effects.flashObject(self, 0xff0000, 500); // Flash red for 500ms
		lifeTxt.setText('Life: ' + Math.round(self.life) + '%'); // Update the life counter
		if (self.life <= 0) {
			LK.clearTimeout(gameTimer);
			LK.showGameOver();
		}
		var lifeCounterAsset = LK.getAsset('lifeCounter', {});
		if (lifeCounterAsset.width <= 0) {
			LK.showGameOver();
		}
	};
});
// LifeRestoration class to represent the object that restores life
var LifeRestoration = Container.expand(function () {
	var self = Container.call(this);
	var lifeRestorationGraphics = self.attachAsset('lifeRestoration', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
	self.down = function (x, y, obj) {
		jeep.life = Math.min(jeep.life + jeep.life * 0.1, 100); // Increase life by 10% but cap at 100
		lifeTxt.setText('Life: ' + Math.round(jeep.life) + '%'); // Update the life counter
		self.destroy();
	};
});
// Sparkle class to represent the sparkle effect
var Sparkle = Container.expand(function () {
	var self = Container.call(this);
	var sparkleGraphics = self.attachAsset('sparkle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.update = function () {
		self.y += self.speed;
		self.alpha -= 0.08; // Fade out effect
		if (self.alpha <= 0) {
			self.destroy();
		}
	};
});
var Tree = Container.expand(function () {
	var self = Container.call(this);
	var treeGraphics = self.attachAsset('tree', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
});
var Tree2 = Container.expand(function () {
	var self = Container.call(this);
	var tree2Graphics = self.attachAsset('tree2', {
		anchorX: 0.5,
		anchorY: 0.5,
		scaleX: 0.8,
		scaleY: 0.8
	});
	self.speed = 5;
	self.update = function () {
		self.y += self.speed;
	};
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0xADD8E6 //Init game with light blue background
});
/**** 
* Game Code
****/ 
// Initialize game variables
var jeep;
var scoreTxt;
var gameTimer;
var timerTxt; // Text to display the timer
var startScreen; // Start screen container
var startButton; // Start button
// Function to initialize game elements
function initGame() {
	// Create start screen
	startScreen = new Container();
	var startTextObject = LK.getAsset('christmasSlalom', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	startTextObject.x = 2048 / 2 - 200;
	startTextObject.y = 2732 / 2 - 500;
	startScreen.addChild(startTextObject);
	startButton = new Container();
	var startButtonText = LK.getAsset('startButton', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	startButtonText.anchor.set(0.5, 0.5);
	startButtonText.x = 0;
	startButtonText.y = 0;
	startButton.addChild(startButtonText);
	startButton.x = 2048 / 2;
	startButton.y = 2732 / 2 + 100;
	startScreen.addChild(startButton);
	game.addChild(startScreen);
	// Add event listener for start button
	startButton.down = function () {
		game.removeChild(startScreen);
		startGame();
	};
	// Function to start the game
	function startGame() {
		// Play background music
		LK.playMusic('backgroundMusic');
		jeep = game.addChild(new Jeep());
		jeep.x = 2048 / 2;
		jeep.y = 2732 - 200;
		jeep.update = function () {
			// Jeep movement logic or other updates can be added here
			// Set a 2-minute timer to end the game
			gameTimer = LK.setTimeout(function () {
				LK.showGameOver();
			}, 120000); // 120000 milliseconds = 2 minutes
		};
	}
	// Initialize score display
	scoreTxt = new Text2('Score: 0', {
		size: 80,
		fill: "#ffffff"
	});
	// Initialize life display
	lifeTxt = new Text2('Life: 100%', {
		size: 80,
		fill: "#ffffff"
	});
	lifeTxt.anchor.set(0.5, 1);
	LK.gui.bottomLeft.addChild(lifeTxt);
	// Add life counter asset
	var lifeCounterAsset = LK.getAsset('lifeCounter', {
		anchorX: 1.5,
		anchorY: 0.5,
		x: lifeTxt.x,
		y: lifeTxt.y
	});
	LK.gui.topLeft.addChild(lifeCounterAsset);
	// Initialize bugs, fastBugs and trees arrays
	bugs = [];
	fastBugs = [];
	trees = [];
	scoreTxt.anchor.set(0.5, 0);
	LK.gui.top.addChild(scoreTxt);
	// Initialize timer display
	timerTxt = new Text2('Time: 2:00', {
		size: 80,
		fill: "#ffffff"
	});
	timerTxt.anchor.set(0.5, 0);
	timerTxt.x -= 250; // Move the timer 250 pixels to the left
	LK.gui.topRight.addChild(timerTxt);
	// Update the timer every second
	var timeRemaining = 120; // 2 minutes in seconds
	var timerInterval = LK.setInterval(function () {
		timeRemaining--;
		var minutes = Math.floor(timeRemaining / 60);
		var seconds = timeRemaining % 60;
		timerTxt.setText('Time: ' + minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
		if (timeRemaining <= 0) {
			LK.clearInterval(timerInterval);
		}
	}, 1000);
}
// Event handler for moving the Jeep
var isTouching = false;
var touchPosition = {
	x: 0,
	y: 0
};
game.move = function (x, y, obj) {
	isTouching = true;
	touchPosition.x = x;
	touchPosition.y = y;
};
game.up = function (x, y, obj) {
	isTouching = false;
};
game.update = function () {
	if (isTouching && jeep) {
		var dx = touchPosition.x - jeep.x;
		var dy = touchPosition.y - jeep.y;
		var angle = Math.atan2(dy, dx);
		jeep.x += jeep.speed * Math.cos(angle);
		jeep.y += jeep.speed * Math.sin(angle);
	}
	if (jeep) {
		jeep.update();
	}
	// Bug and tree spawning logic
	if (LK.ticks % 60 == 0) {
		var newBug = new Bug();
		newBug.x = Math.random() * 2048;
		newBug.y = 0;
		bugs.push(newBug);
		game.addChild(newBug);
	}
	if (LK.ticks % 180 == 0) {
		var newFastBug = new FastBug();
		newFastBug.x = Math.random() * 2048;
		newFastBug.y = 0;
		fastBugs.push(newFastBug);
		game.addChild(newFastBug);
	}
	if (LK.ticks % 180 == 0) {
		var newTree = new Tree();
		newTree.x = Math.random() * 2048;
		newTree.y = 0;
		trees.push(newTree);
		game.addChild(newTree);
		var newTree2 = new Tree2();
		newTree2.x = Math.random() * 2048;
		newTree2.y = 0;
		trees.push(newTree2);
		game.addChild(newTree2);
	}
	if (LK.ticks % 240 == 0) {
		var newSlalom = new ChristmasSlalom();
		newSlalom.x = Math.random() * 2048;
		newSlalom.y = 0;
		game.addChild(newSlalom);
	}
	if (LK.ticks % 300 == 0) {
		var newGift = new Gift();
		newGift.x = Math.random() * 2048;
		newGift.y = 0;
		game.addChild(newGift);
		var newLifeRestoration = new LifeRestoration();
		newLifeRestoration.x = Math.random() * 2048;
		newLifeRestoration.y = 0;
		game.addChild(newLifeRestoration);
	}
	// Bug and tree movement and collision detection logic
	for (var i = bugs.length - 1; i >= 0; i--) {
		bugs[i].update();
		if (bugs[i].intersects(jeep)) {
			jeep.collision();
			var sparkle = new Sparkle();
			var angle = Math.random() * 2 * Math.PI; // Random angle in radians
			var radius = Math.random() * 50 + 50; // Random radius between 50 and 100
			sparkle.x = jeep.x + radius * Math.cos(angle);
			sparkle.y = jeep.y + radius * Math.sin(angle);
			game.addChild(sparkle);
		}
		if (bugs[i].y > 2732) {
			bugs[i].destroy();
			bugs.splice(i, 1);
		}
	}
	for (var i = fastBugs.length - 1; i >= 0; i--) {
		fastBugs[i].update();
		if (fastBugs[i].intersects(jeep)) {
			jeep.collision();
			for (var j = 0; j < 3; j++) {
				var sparkle = new Sparkle();
				var angle = Math.random() * 2 * Math.PI; // Random angle in radians
				var radius = Math.random() * 50 + 50; // Random radius between 50 and 100
				sparkle.x = jeep.x + radius * Math.cos(angle);
				sparkle.y = jeep.y + radius * Math.sin(angle);
				game.addChild(sparkle);
			}
		}
		if (fastBugs[i].y > 2732) {
			fastBugs[i].destroy();
			fastBugs.splice(i, 1);
		}
	}
	for (var i = trees.length - 1; i >= 0; i--) {
		trees[i].update();
		if (trees[i].intersects(jeep)) {
			jeep.collision();
			for (var j = 0; j < 10; j++) {
				var sparkle = new Sparkle();
				sparkle.x = jeep.x + (Math.random() - 0.5) * 100;
				sparkle.y = jeep.y + (Math.random() - 0.5) * 100;
				game.addChild(sparkle);
			}
		}
		if (trees[i].y > 2732) {
			trees[i].destroy();
			trees.splice(i, 1);
		}
	}
	// Check for collision between 'gift' and 'jeep'
	game.children.forEach(function (child) {
		if (child instanceof Gift && child.intersects(jeep, 0.8)) {
			LK.getSound('giftPickupSound').play();
			LK.setScore(LK.getScore() + 5);
			scoreTxt.setText('Score: ' + LK.getScore());
			child.destroy();
		}
		// Check for collision between 'jeep' and 'lifeRestoration'
		if (child instanceof LifeRestoration && child.intersects(jeep, 0.8)) {
			LK.getSound('lifeRestorationSound').play(); // Play new sound effect for picking up lifeRestoration
			jeep.life = Math.min(jeep.life + 10, 100); // Increase life by 10 units but cap at 100
			lifeTxt.setText('Life: ' + Math.round(jeep.life) + '%'); // Update the life counter
			child.destroy();
		}
	});
};
// Initialize the game
initGame();
;
 Santa on a sleigh top view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 christmas tree. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 big snowball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 snow tornado. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 christmas gift. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 кнопка "Старт" в різдвяному стилі. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 
 sparkle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
 сніжинка. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.