/**** 
* Classes
****/ 
// Class for Firework
var Firework = Container.expand(function () {
	var self = Container.call(this);
	var colors = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff, 0xffa500, 0x4b0082, 0x800000, 0x008080, 0x000080, 0x800080, 0x808000, 0x008000, 0x0000A0, 0xA52A2A, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50, 0xFFD700, 0xADFF2F, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0x8A2BE2, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50]; // Extended array of colors
	var color = colors[Math.floor(Math.random() * colors.length)]; // Select a random color
	var fireworkGraphics = self.attachAsset('firework', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: color // Apply the random color
	});
	self.vy = -5; // Upward velocity
	self.exploded = false;
	self.update = function () {
		if (!self.exploded) {
			self.y += self.vy;
			if (self.y <= Math.random() * (2732 / 4)) {
				// Explode at a random height between the top of the map and the upper quarter
				self.explode();
			}
		}
	};
	self.explode = function () {
		self.exploded = true;
		LK.getSound('F1').play();
		for (var i = 0; i < 100; i++) {
			// Create 100 particles
			var particle;
			if (self instanceof RedFirework) {
				particle = new RedFireworkParticle();
			} else if (self instanceof BlueFirework) {
				particle = new PurpleFireworkParticle();
			} else if (self instanceof GreenFirework) {
				particle = new GreenFireworkParticle();
			} else if (self instanceof BlueFirework) {
				particle = new BlueFireworkParticle();
			} else {
				particle = new FireworkParticle();
			}
			particle.x = self.x;
			particle.y = self.y;
			// Add a random angle and speed to each particle
			var angle = Math.random() * Math.PI * 2;
			var speed = Math.random() * 5;
			particle.vx = Math.cos(angle) * speed;
			particle.vy = Math.sin(angle) * speed;
			game.addChild(particle);
		}
		self.destroy();
	};
	self.containsPoint = function (point) {
		var width = fireworkGraphics.width;
		var height = fireworkGraphics.height;
		return point.x > self.x - width / 2 && point.x < self.x + width / 2 && point.y > self.y - height / 2 && point.y < self.y + height / 2;
	};
});
// Class for Yellow Firework
var YellowFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('yellowFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Red Firework
var RedFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('redFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PurpleFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('purpleFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PinkFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('pinkFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var GreenFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('greenFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Blue Firework
var BlueFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('blueFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var FireworkParticle = Container.expand(function () {
	var self = Container.call(this);
	var colors = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff, 0xffa500, 0x4b0082, 0x800000, 0x008080, 0x000080, 0x800080, 0x808000, 0x008000, 0x0000A0, 0xA52A2A, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50, 0xFFD700, 0xADFF2F, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0x8A2BE2, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50]; // Extended array of colors
	var color = colors[Math.floor(Math.random() * colors.length)]; // Select a random color
	var particleGraphics = self.attachAsset('particle', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: color,
		// Apply the random color
		blendMode: 1 // Set blendMode for color mixing
	});
	self.vx = Math.random() * 6 - 3; // Random x velocity
	self.vy = Math.random() * 6 - 3; // Random y velocity
	self.alpha = 1;
	self.lifespan = 100; // Lifespan in ticks
	self.update = function () {
		self.x += self.vx;
		self.y += self.vy;
		self.alpha -= 1 / self.lifespan;
		// Decrease the speed over time for a more realistic effect
		self.vx *= 0.99;
		self.vy *= 0.99;
		if (--self.lifespan <= 0) {
			self.destroy();
		}
	};
});
// Class for Yellow Firework Particle
var YellowFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('yellowParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Red Firework Particle
var RedFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('redParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PurpleFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('purpleParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PinkFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = self.attachAsset('pinkParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	game.addChild(particleGraphics);
});
var GreenFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('greenParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Blue Firework Particle
var BlueFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('blueParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
/**** 
* Initialize Game
****/ 
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
var game = new LK.Game({
	backgroundColor: 0x000000 //Set background color to black
});
/**** 
* Game Code
****/ 
var wallpaper = game.addChild(LK.getAsset('wallpaper', {
	anchorX: 0,
	anchorY: 0
}));
// Play rocket sound every 4 seconds
LK.setInterval(function () {
	LK.getSound('Rocket').play();
}, 4000);
// Handle game updates
// Handle game updates
game.update = function () {
	// Create new firework every 25 ticks
	if (LK.ticks % 25 === 0) {
		var firework;
		// Randomly decide the color of the firework
		var fireworkType = Math.random();
		if (fireworkType < 0.2) {
			firework = new Firework();
		} else if (fireworkType < 0.4) {
			firework = new RedFirework();
		} else if (fireworkType < 0.6) {
			firework = new BlueFirework();
		} else if (fireworkType < 0.7) {
			firework = new GreenFirework();
		} else if (fireworkType < 0.8) {
			firework = new YellowFirework();
		} else if (fireworkType < 0.9) {
			firework = new PurpleFirework();
		} else {
			firework = new PinkFirework();
		}
		firework.x = Math.random() * 2048; // Random x position
		firework.y = 2732; // Bottom of the screen
		game.addChild(firework);
	}
};
// Handle click and swipe event
game.down = function (x, y, obj) {
	console.log("Game was clicked at", x, y);
	// Store initial click position
	game.initialClick = {
		x: x,
		y: y
	};
};
game.up = function (x, y, obj) {
	console.log("Game was released at", x, y);
	// Calculate swipe distance
	var swipeDistance = x - game.initialClick.x;
	if (Math.abs(swipeDistance) > 100) {
		// Check if swipe is significant
		// Create a series of yellow particle explosions along the swipe line
		var numberOfExplosions = 30;
		for (var i = 0; i < numberOfExplosions; i++) {
			var explosionX = game.initialClick.x + swipeDistance / numberOfExplosions * i;
			var explosionY = game.initialClick.y;
			var yellowParticle = new YellowFireworkParticle();
			yellowParticle.x = explosionX;
			yellowParticle.y = explosionY;
			game.addChild(yellowParticle);
		}
	} else {
		// Check if a firework was clicked
		game.children.forEach(function (child) {
			if (child instanceof Firework && !child.exploded && child.containsPoint(game.toLocal(obj.global))) {
				// If a firework was clicked and not exploded, explode it
				child.explode();
			}
		});
		// If no firework was clicked, create a new random color firework at the click position
		var fireworkTypes = [Firework, RedFirework, BlueFirework, YellowFirework, GreenFirework, PurpleFirework, PinkFirework];
		var randomFireworkType = fireworkTypes[Math.floor(Math.random() * fireworkTypes.length)];
		var newFirework = new randomFireworkType();
		newFirework.x = x;
		newFirework.y = y;
		game.addChild(newFirework);
	}
}; /**** 
* Classes
****/ 
// Class for Firework
var Firework = Container.expand(function () {
	var self = Container.call(this);
	var colors = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff, 0xffa500, 0x4b0082, 0x800000, 0x008080, 0x000080, 0x800080, 0x808000, 0x008000, 0x0000A0, 0xA52A2A, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50, 0xFFD700, 0xADFF2F, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0x8A2BE2, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50]; // Extended array of colors
	var color = colors[Math.floor(Math.random() * colors.length)]; // Select a random color
	var fireworkGraphics = self.attachAsset('firework', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: color // Apply the random color
	});
	self.vy = -5; // Upward velocity
	self.exploded = false;
	self.update = function () {
		if (!self.exploded) {
			self.y += self.vy;
			if (self.y <= Math.random() * (2732 / 4)) {
				// Explode at a random height between the top of the map and the upper quarter
				self.explode();
			}
		}
	};
	self.explode = function () {
		self.exploded = true;
		LK.getSound('F1').play();
		for (var i = 0; i < 100; i++) {
			// Create 100 particles
			var particle;
			if (self instanceof RedFirework) {
				particle = new RedFireworkParticle();
			} else if (self instanceof BlueFirework) {
				particle = new PurpleFireworkParticle();
			} else if (self instanceof GreenFirework) {
				particle = new GreenFireworkParticle();
			} else if (self instanceof BlueFirework) {
				particle = new BlueFireworkParticle();
			} else {
				particle = new FireworkParticle();
			}
			particle.x = self.x;
			particle.y = self.y;
			// Add a random angle and speed to each particle
			var angle = Math.random() * Math.PI * 2;
			var speed = Math.random() * 5;
			particle.vx = Math.cos(angle) * speed;
			particle.vy = Math.sin(angle) * speed;
			game.addChild(particle);
		}
		self.destroy();
	};
	self.containsPoint = function (point) {
		var width = fireworkGraphics.width;
		var height = fireworkGraphics.height;
		return point.x > self.x - width / 2 && point.x < self.x + width / 2 && point.y > self.y - height / 2 && point.y < self.y + height / 2;
	};
});
// Class for Yellow Firework
var YellowFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('yellowFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Red Firework
var RedFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('redFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PurpleFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('purpleFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PinkFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('pinkFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var GreenFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('greenFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Blue Firework
var BlueFirework = Firework.expand(function () {
	var self = Firework.call(this);
	Firework.call(this);
	var fireworkGraphics = this.attachAsset('blueFirework', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var FireworkParticle = Container.expand(function () {
	var self = Container.call(this);
	var colors = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff, 0xffa500, 0x4b0082, 0x800000, 0x008080, 0x000080, 0x800080, 0x808000, 0x008000, 0x0000A0, 0xA52A2A, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50, 0xFFD700, 0xADFF2F, 0xFF69B4, 0xCD5C5C, 0x4B0082, 0x8A2BE2, 0x5F9EA0, 0x7FFF00, 0xD2691E, 0xFF7F50]; // Extended array of colors
	var color = colors[Math.floor(Math.random() * colors.length)]; // Select a random color
	var particleGraphics = self.attachAsset('particle', {
		anchorX: 0.5,
		anchorY: 0.5,
		color: color,
		// Apply the random color
		blendMode: 1 // Set blendMode for color mixing
	});
	self.vx = Math.random() * 6 - 3; // Random x velocity
	self.vy = Math.random() * 6 - 3; // Random y velocity
	self.alpha = 1;
	self.lifespan = 100; // Lifespan in ticks
	self.update = function () {
		self.x += self.vx;
		self.y += self.vy;
		self.alpha -= 1 / self.lifespan;
		// Decrease the speed over time for a more realistic effect
		self.vx *= 0.99;
		self.vy *= 0.99;
		if (--self.lifespan <= 0) {
			self.destroy();
		}
	};
});
// Class for Yellow Firework Particle
var YellowFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('yellowParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Red Firework Particle
var RedFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('redParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PurpleFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('purpleParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
var PinkFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = self.attachAsset('pinkParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	game.addChild(particleGraphics);
});
var GreenFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('greenParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
// Class for Blue Firework Particle
var BlueFireworkParticle = FireworkParticle.expand(function () {
	var self = FireworkParticle.call(this);
	FireworkParticle.call(this);
	var particleGraphics = this.attachAsset('blueParticle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
});
/**** 
* Initialize Game
****/ 
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
var game = new LK.Game({
	backgroundColor: 0x000000 //Set background color to black
});
/**** 
* Game Code
****/ 
var wallpaper = game.addChild(LK.getAsset('wallpaper', {
	anchorX: 0,
	anchorY: 0
}));
// Play rocket sound every 4 seconds
LK.setInterval(function () {
	LK.getSound('Rocket').play();
}, 4000);
// Handle game updates
// Handle game updates
game.update = function () {
	// Create new firework every 25 ticks
	if (LK.ticks % 25 === 0) {
		var firework;
		// Randomly decide the color of the firework
		var fireworkType = Math.random();
		if (fireworkType < 0.2) {
			firework = new Firework();
		} else if (fireworkType < 0.4) {
			firework = new RedFirework();
		} else if (fireworkType < 0.6) {
			firework = new BlueFirework();
		} else if (fireworkType < 0.7) {
			firework = new GreenFirework();
		} else if (fireworkType < 0.8) {
			firework = new YellowFirework();
		} else if (fireworkType < 0.9) {
			firework = new PurpleFirework();
		} else {
			firework = new PinkFirework();
		}
		firework.x = Math.random() * 2048; // Random x position
		firework.y = 2732; // Bottom of the screen
		game.addChild(firework);
	}
};
// Handle click and swipe event
game.down = function (x, y, obj) {
	console.log("Game was clicked at", x, y);
	// Store initial click position
	game.initialClick = {
		x: x,
		y: y
	};
};
game.up = function (x, y, obj) {
	console.log("Game was released at", x, y);
	// Calculate swipe distance
	var swipeDistance = x - game.initialClick.x;
	if (Math.abs(swipeDistance) > 100) {
		// Check if swipe is significant
		// Create a series of yellow particle explosions along the swipe line
		var numberOfExplosions = 30;
		for (var i = 0; i < numberOfExplosions; i++) {
			var explosionX = game.initialClick.x + swipeDistance / numberOfExplosions * i;
			var explosionY = game.initialClick.y;
			var yellowParticle = new YellowFireworkParticle();
			yellowParticle.x = explosionX;
			yellowParticle.y = explosionY;
			game.addChild(yellowParticle);
		}
	} else {
		// Check if a firework was clicked
		game.children.forEach(function (child) {
			if (child instanceof Firework && !child.exploded && child.containsPoint(game.toLocal(obj.global))) {
				// If a firework was clicked and not exploded, explode it
				child.explode();
			}
		});
		// If no firework was clicked, create a new random color firework at the click position
		var fireworkTypes = [Firework, RedFirework, BlueFirework, YellowFirework, GreenFirework, PurpleFirework, PinkFirework];
		var randomFireworkType = fireworkTypes[Math.floor(Math.random() * fireworkTypes.length)];
		var newFirework = new randomFireworkType();
		newFirework.x = x;
		newFirework.y = y;
		game.addChild(newFirework);
	}
};