/**** 
* Classes
****/
// Ball class
var Ball = Container.expand(function () {
	var self = Container.call(this);
	var ballGraphics = self.attachAsset('ball', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.mass = 10;
	self.velocity = {
		x: 0,
		y: 0
	};
	self.radius = ballGraphics.width / 2;
	self.update = function () {
		var initialSpeed = 15;
		var maxSpeed = initialSpeed * 2;
		var currentSpeed = Math.sqrt(self.velocity.x * self.velocity.x + self.velocity.y * self.velocity.y);
		if (currentSpeed > maxSpeed) {
			var speedReductionFactor = maxSpeed / currentSpeed;
			self.velocity.x *= speedReductionFactor;
			self.velocity.y *= speedReductionFactor;
		}
		self.x += self.velocity.x;
		self.y += self.velocity.y;
	};
	self.reset = function () {
		var safeZone = planet.radius * 3;
		var minX = safeZone;
		var maxX = game.width - safeZone;
		var minY = safeZone;
		var maxY = game.height - safeZone;
		do {
			self.x = Math.random() * (maxX - minX) + minX;
			self.y = Math.random() * (maxY - minY) + minY;
			var dx = planet.x - self.x;
			var dy = planet.y - self.y;
		} while (Math.sqrt(dx * dx + dy * dy) < safeZone);
		var angle = Math.random() * Math.PI * 2;
		self.velocity = {
			x: Math.cos(angle) * 15,
			// Increased initial speed
			y: Math.sin(angle) * 15 // Increased initial speed
		};
	};
});
// Paddle class
var Paddle = Container.expand(function () {
	var self = Container.call(this);
	var paddleGraphics = self.attachAsset('paddle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.isMoving = false;
	self.update = function () {
		// Paddle update logic
	};
});
// SecondPlanet class
var SecondPlanet = Container.expand(function () {
	var self = Container.call(this);
	var planetGraphics = self.attachAsset('secondPlanet', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0
	});
	self.mass = 5000; // Increased mass for stronger gravity calculation
	self.radius = planetGraphics.width / 2;
	self.x = game.width / 2;
	self.y = game.height / 2 - 150; // Move the second planet up by 150 units
});
// Health class
var Health = Container.expand(function () {
	var self = Container.call(this);
	var healthGraphics = self.attachAsset('health', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = healthGraphics.width;
	self.height = healthGraphics.height;
});
// Satellite class
var Satellite = Container.expand(function () {
	var self = Container.call(this);
	var satelliteGraphics = self.attachAsset('satellite', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.orbitRadius = 0;
	self.orbitSpeed = 0.01;
	self.orbitAngle = Math.random() * Math.PI * 2;
	self.update = function () {
		self.orbitAngle += self.orbitSpeed;
		var dx = planet.x - game.width / 2;
		var dy = planet.y - game.height / 2;
		var ellipseRatio = 3;
		// Reduce the mass of the satellite to decrease gravitational force
		self.mass = 1000; // Adjusted mass for weaker gravity calculation
		self.x = game.width / 2 + self.orbitRadius * ellipseRatio * Math.cos(self.orbitAngle) + dx + 1500;
		self.y = game.height / 2 + self.orbitRadius / ellipseRatio * Math.sin(self.orbitAngle) + dy;
		if (self.x < -self.width * 2 || self.x > game.width + self.width * 2 || self.y < -self.height * 2 || self.y > game.height + self.height * 2) {
			self.orbitRadius = Math.max(game.width, game.height) / 3.5;
		}
	};
	self.reset = function () {
		self.orbitRadius = Math.max(game.width, game.height) / 4;
		self.orbitSpeed = (Math.random() * 0.02 + 0.005) * 0.5;
		self.orbitAngle = Math.random() * Math.PI * 2;
	};
});
// EllipticalOrbitObject class
var EllipticalOrbitObject = Container.expand(function () {
	var self = Container.call(this);
	var orbitObjectGraphics = self.attachAsset('ellipticalOrbitObject', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.orbitRadius = 0;
	self.orbitSpeed = 0.01;
	self.orbitAngle = Math.random() * Math.PI * 2;
	self.update = function (secondPlanet, ball) {
		self.orbitAngle += self.orbitSpeed;
		var dx = secondPlanet.x - game.width / 2;
		var dy = secondPlanet.y - game.height / 2;
		var ellipseRatio = 2; // Ratio for the elliptical orbit
		self.x = game.width / 2 + self.orbitRadius / ellipseRatio * Math.sin(self.orbitAngle + Math.PI / 2) + dx;
		self.y = game.height / 2 + self.orbitRadius * ellipseRatio * Math.cos(self.orbitAngle + Math.PI / 2) + dy - 900;
		if (self.x < -self.width * 2 || self.x > game.width + self.width * 2 || self.y < -self.height * 2 || self.y > game.height + self.height * 2) {
			self.orbitRadius = Math.max(game.width, game.height) / 4;
		}
		// Gravity effect on the ball
		if (ball) {
			if (ball) {
				var distanceToBall = Math.sqrt(Math.pow(ball.x - self.x, 2) + Math.pow(ball.y - self.y, 2));
				// Rest of the code that uses distanceToBall
			}
			// Rest of the code that uses distanceToBall
		}
		var gravityStrength = self.mass / Math.pow(distanceToBall, 1.8); // Decreased the exponent to increase gravity effect
		if (distanceToBall < self.orbitRadius) {
			var gravityX = (self.x - ball.x) / distanceToBall * gravityStrength;
			var gravityY = (self.y - ball.y) / distanceToBall * gravityStrength;
			ball.velocity.x += gravityX;
			ball.velocity.y += gravityY;
		}
	};
	self.reset = function () {
		self.orbitRadius = Math.max(game.width, game.height) / 5;
		self.orbitSpeed = (Math.random() * 0.02 + 0.005) * 0.65;
		self.orbitAngle = Math.random() * Math.PI * 2;
	};
});
// Background class
var Background = Container.expand(function () {
	var self = Container.call(this);
	var backgroundGraphics = self.attachAsset('background', {});
	backgroundGraphics.width = game.width;
	backgroundGraphics.height = game.height;
	self.addChild(backgroundGraphics);
});
/**** 
* Initialize Game
****/
// Initialize background
var game = new LK.Game({
	backgroundColor: 0x000000 // Init game with black background
});
/**** 
* Game Code
****/
// Initialize background
var background = game.addChild(new Background());
// Initialize game elements
var ball = game.addChild(new Ball());
var leftPaddle = game.addChild(new Paddle());
var rightPaddle = game.addChild(new Paddle());
// Initialize health objects
var healthObjects = [];
for (var i = 0; i < 5; i++) {
	var health = game.addChild(new Health());
	health.x = game.width - (i + 1) * (health.width + 10);
	health.y = 110;
	healthObjects.push(health);
}
// Set initial positions
leftPaddle.x = 100;
leftPaddle.y = game.height / 2;
rightPaddle.x = game.width - 100;
rightPaddle.y = game.height / 2;
var planet = game.addChild(new SecondPlanet());
ball.reset();
// Initialize the elliptical orbit object
var ellipticalOrbitObject = game.addChild(new EllipticalOrbitObject());
ellipticalOrbitObject.reset();
// Initialize satellite
var satellite = game.addChild(new Satellite());
satellite.reset();
// Game logic
LK.on('tick', function () {
	ball.update();
	leftPaddle.update();
	rightPaddle.update();
	// Check for collisions with paddles and prevent ball from passing through
	if (ball.intersects(leftPaddle)) {
		ball.velocity.x = Math.abs(ball.velocity.x) * (leftPaddle.isMoving ? 1.05 : 1);
		ball.x = leftPaddle.x + leftPaddle.width / 2 + ball.radius;
		leftPaddle.isMoving = false;
	} else if (ball.intersects(rightPaddle)) {
		ball.velocity.x = -Math.abs(ball.velocity.x) * (rightPaddle.isMoving ? 1.05 : 1);
		ball.x = rightPaddle.x - rightPaddle.width / 2 - ball.radius;
		rightPaddle.isMoving = false;
	}
	// Check for collisions with top and bottom boundaries
	if (ball.y - ball.radius <= 0 || ball.y + ball.radius >= game.height) {
		ball.velocity.y *= -1;
	}
	// Gravity effect from planets
	var planets = [planet];
	planets.forEach(function (currentPlanet) {
		var dx = currentPlanet.x - ball.x;
		var dy = currentPlanet.y - ball.y;
		var distance = Math.sqrt(dx * dx + dy * dy);
		var safeDistance = (currentPlanet.radius + ball.radius + 50) * 2; // Doubling the safe margin to increase gravity range
		if (distance < safeDistance) {
			// Adjusted gravity effect to maintain a safe distance
			var gravityMultiplier = currentPlanet === planet ? 1.3 : 5 * 1.3;
			var gravity = currentPlanet.mass / (distance * distance) * (10 * gravityMultiplier); // Adjust gravity based on planet
			var gravityX = dx / distance * gravity;
			var gravityY = dy / distance * gravity;
			ball.velocity.x += gravityX * (1 - (safeDistance - distance) / safeDistance);
			ball.velocity.y += gravityY * (1 - (safeDistance - distance) / safeDistance);
		}
	});
	// Update satellite orbit and check for collision with the ball
	satellite.update();
	if (satellite.intersects(ball)) {
		// Reflect ball velocity
		var normalX = ball.x - satellite.x;
		var normalY = ball.y - satellite.y;
		var normalLength = Math.sqrt(normalX * normalX + normalY * normalY);
		normalX /= normalLength;
		normalY /= normalLength;
		var dotProduct = ball.velocity.x * normalX + ball.velocity.y * normalY;
		ball.velocity.x -= 2 * dotProduct * normalX;
		ball.velocity.y -= 2 * dotProduct * normalY;
	}
	// Reset ball if it goes off screen and remove one health object
	if (ball.x < -ball.radius || ball.x > game.width + ball.radius) {
		if (healthObjects.length > 0) {
			var lastHealthIndex = healthObjects.length - 1;
			healthObjects[lastHealthIndex].destroy();
			healthObjects.splice(lastHealthIndex, 1);
		}
		ball.reset();
		if (healthObjects.length === 0) {
			LK.showGameOver();
		}
	}
	// Update the elliptical orbit object and check for collision with the ball
	ellipticalOrbitObject.update(planet);
	if (ellipticalOrbitObject.intersects(ball)) {
		// Reflect ball velocity
		var normalX = ball.x - ellipticalOrbitObject.x;
		var normalY = ball.y - ellipticalOrbitObject.y;
		var normalLength = Math.sqrt(normalX * normalX + normalY * normalY);
		normalX /= normalLength;
		normalY /= normalLength;
		var dotProduct = ball.velocity.x * normalX + ball.velocity.y * normalY;
		ball.velocity.x -= 2 * dotProduct * normalX;
		ball.velocity.y -= 2 * dotProduct * normalY;
	}
});
// Touch controls for paddles
function handleTouch(obj) {
	var touchPos = obj.event.getLocalPosition(game);
	if (touchPos.x < game.width / 2) {
		leftPaddle.isMoving = leftPaddle.y !== touchPos.y;
		leftPaddle.y = touchPos.y;
	} else {
		rightPaddle.isMoving = rightPaddle.y !== touchPos.y;
		rightPaddle.y = touchPos.y;
	}
}
game.on('down', handleTouch);
game.on('move', handleTouch); /**** 
* Classes
****/
// Ball class
var Ball = Container.expand(function () {
	var self = Container.call(this);
	var ballGraphics = self.attachAsset('ball', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.mass = 10;
	self.velocity = {
		x: 0,
		y: 0
	};
	self.radius = ballGraphics.width / 2;
	self.update = function () {
		var initialSpeed = 15;
		var maxSpeed = initialSpeed * 2;
		var currentSpeed = Math.sqrt(self.velocity.x * self.velocity.x + self.velocity.y * self.velocity.y);
		if (currentSpeed > maxSpeed) {
			var speedReductionFactor = maxSpeed / currentSpeed;
			self.velocity.x *= speedReductionFactor;
			self.velocity.y *= speedReductionFactor;
		}
		self.x += self.velocity.x;
		self.y += self.velocity.y;
	};
	self.reset = function () {
		var safeZone = planet.radius * 3;
		var minX = safeZone;
		var maxX = game.width - safeZone;
		var minY = safeZone;
		var maxY = game.height - safeZone;
		do {
			self.x = Math.random() * (maxX - minX) + minX;
			self.y = Math.random() * (maxY - minY) + minY;
			var dx = planet.x - self.x;
			var dy = planet.y - self.y;
		} while (Math.sqrt(dx * dx + dy * dy) < safeZone);
		var angle = Math.random() * Math.PI * 2;
		self.velocity = {
			x: Math.cos(angle) * 15,
			// Increased initial speed
			y: Math.sin(angle) * 15 // Increased initial speed
		};
	};
});
// Paddle class
var Paddle = Container.expand(function () {
	var self = Container.call(this);
	var paddleGraphics = self.attachAsset('paddle', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.isMoving = false;
	self.update = function () {
		// Paddle update logic
	};
});
// SecondPlanet class
var SecondPlanet = Container.expand(function () {
	var self = Container.call(this);
	var planetGraphics = self.attachAsset('secondPlanet', {
		anchorX: 0.5,
		anchorY: 0.5,
		alpha: 0
	});
	self.mass = 5000; // Increased mass for stronger gravity calculation
	self.radius = planetGraphics.width / 2;
	self.x = game.width / 2;
	self.y = game.height / 2 - 150; // Move the second planet up by 150 units
});
// Health class
var Health = Container.expand(function () {
	var self = Container.call(this);
	var healthGraphics = self.attachAsset('health', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.width = healthGraphics.width;
	self.height = healthGraphics.height;
});
// Satellite class
var Satellite = Container.expand(function () {
	var self = Container.call(this);
	var satelliteGraphics = self.attachAsset('satellite', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.orbitRadius = 0;
	self.orbitSpeed = 0.01;
	self.orbitAngle = Math.random() * Math.PI * 2;
	self.update = function () {
		self.orbitAngle += self.orbitSpeed;
		var dx = planet.x - game.width / 2;
		var dy = planet.y - game.height / 2;
		var ellipseRatio = 3;
		// Reduce the mass of the satellite to decrease gravitational force
		self.mass = 1000; // Adjusted mass for weaker gravity calculation
		self.x = game.width / 2 + self.orbitRadius * ellipseRatio * Math.cos(self.orbitAngle) + dx + 1500;
		self.y = game.height / 2 + self.orbitRadius / ellipseRatio * Math.sin(self.orbitAngle) + dy;
		if (self.x < -self.width * 2 || self.x > game.width + self.width * 2 || self.y < -self.height * 2 || self.y > game.height + self.height * 2) {
			self.orbitRadius = Math.max(game.width, game.height) / 3.5;
		}
	};
	self.reset = function () {
		self.orbitRadius = Math.max(game.width, game.height) / 4;
		self.orbitSpeed = (Math.random() * 0.02 + 0.005) * 0.5;
		self.orbitAngle = Math.random() * Math.PI * 2;
	};
});
// EllipticalOrbitObject class
var EllipticalOrbitObject = Container.expand(function () {
	var self = Container.call(this);
	var orbitObjectGraphics = self.attachAsset('ellipticalOrbitObject', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.orbitRadius = 0;
	self.orbitSpeed = 0.01;
	self.orbitAngle = Math.random() * Math.PI * 2;
	self.update = function (secondPlanet, ball) {
		self.orbitAngle += self.orbitSpeed;
		var dx = secondPlanet.x - game.width / 2;
		var dy = secondPlanet.y - game.height / 2;
		var ellipseRatio = 2; // Ratio for the elliptical orbit
		self.x = game.width / 2 + self.orbitRadius / ellipseRatio * Math.sin(self.orbitAngle + Math.PI / 2) + dx;
		self.y = game.height / 2 + self.orbitRadius * ellipseRatio * Math.cos(self.orbitAngle + Math.PI / 2) + dy - 900;
		if (self.x < -self.width * 2 || self.x > game.width + self.width * 2 || self.y < -self.height * 2 || self.y > game.height + self.height * 2) {
			self.orbitRadius = Math.max(game.width, game.height) / 4;
		}
		// Gravity effect on the ball
		if (ball) {
			if (ball) {
				var distanceToBall = Math.sqrt(Math.pow(ball.x - self.x, 2) + Math.pow(ball.y - self.y, 2));
				// Rest of the code that uses distanceToBall
			}
			// Rest of the code that uses distanceToBall
		}
		var gravityStrength = self.mass / Math.pow(distanceToBall, 1.8); // Decreased the exponent to increase gravity effect
		if (distanceToBall < self.orbitRadius) {
			var gravityX = (self.x - ball.x) / distanceToBall * gravityStrength;
			var gravityY = (self.y - ball.y) / distanceToBall * gravityStrength;
			ball.velocity.x += gravityX;
			ball.velocity.y += gravityY;
		}
	};
	self.reset = function () {
		self.orbitRadius = Math.max(game.width, game.height) / 5;
		self.orbitSpeed = (Math.random() * 0.02 + 0.005) * 0.65;
		self.orbitAngle = Math.random() * Math.PI * 2;
	};
});
// Background class
var Background = Container.expand(function () {
	var self = Container.call(this);
	var backgroundGraphics = self.attachAsset('background', {});
	backgroundGraphics.width = game.width;
	backgroundGraphics.height = game.height;
	self.addChild(backgroundGraphics);
});
/**** 
* Initialize Game
****/
// Initialize background
var game = new LK.Game({
	backgroundColor: 0x000000 // Init game with black background
});
/**** 
* Game Code
****/
// Initialize background
var background = game.addChild(new Background());
// Initialize game elements
var ball = game.addChild(new Ball());
var leftPaddle = game.addChild(new Paddle());
var rightPaddle = game.addChild(new Paddle());
// Initialize health objects
var healthObjects = [];
for (var i = 0; i < 5; i++) {
	var health = game.addChild(new Health());
	health.x = game.width - (i + 1) * (health.width + 10);
	health.y = 110;
	healthObjects.push(health);
}
// Set initial positions
leftPaddle.x = 100;
leftPaddle.y = game.height / 2;
rightPaddle.x = game.width - 100;
rightPaddle.y = game.height / 2;
var planet = game.addChild(new SecondPlanet());
ball.reset();
// Initialize the elliptical orbit object
var ellipticalOrbitObject = game.addChild(new EllipticalOrbitObject());
ellipticalOrbitObject.reset();
// Initialize satellite
var satellite = game.addChild(new Satellite());
satellite.reset();
// Game logic
LK.on('tick', function () {
	ball.update();
	leftPaddle.update();
	rightPaddle.update();
	// Check for collisions with paddles and prevent ball from passing through
	if (ball.intersects(leftPaddle)) {
		ball.velocity.x = Math.abs(ball.velocity.x) * (leftPaddle.isMoving ? 1.05 : 1);
		ball.x = leftPaddle.x + leftPaddle.width / 2 + ball.radius;
		leftPaddle.isMoving = false;
	} else if (ball.intersects(rightPaddle)) {
		ball.velocity.x = -Math.abs(ball.velocity.x) * (rightPaddle.isMoving ? 1.05 : 1);
		ball.x = rightPaddle.x - rightPaddle.width / 2 - ball.radius;
		rightPaddle.isMoving = false;
	}
	// Check for collisions with top and bottom boundaries
	if (ball.y - ball.radius <= 0 || ball.y + ball.radius >= game.height) {
		ball.velocity.y *= -1;
	}
	// Gravity effect from planets
	var planets = [planet];
	planets.forEach(function (currentPlanet) {
		var dx = currentPlanet.x - ball.x;
		var dy = currentPlanet.y - ball.y;
		var distance = Math.sqrt(dx * dx + dy * dy);
		var safeDistance = (currentPlanet.radius + ball.radius + 50) * 2; // Doubling the safe margin to increase gravity range
		if (distance < safeDistance) {
			// Adjusted gravity effect to maintain a safe distance
			var gravityMultiplier = currentPlanet === planet ? 1.3 : 5 * 1.3;
			var gravity = currentPlanet.mass / (distance * distance) * (10 * gravityMultiplier); // Adjust gravity based on planet
			var gravityX = dx / distance * gravity;
			var gravityY = dy / distance * gravity;
			ball.velocity.x += gravityX * (1 - (safeDistance - distance) / safeDistance);
			ball.velocity.y += gravityY * (1 - (safeDistance - distance) / safeDistance);
		}
	});
	// Update satellite orbit and check for collision with the ball
	satellite.update();
	if (satellite.intersects(ball)) {
		// Reflect ball velocity
		var normalX = ball.x - satellite.x;
		var normalY = ball.y - satellite.y;
		var normalLength = Math.sqrt(normalX * normalX + normalY * normalY);
		normalX /= normalLength;
		normalY /= normalLength;
		var dotProduct = ball.velocity.x * normalX + ball.velocity.y * normalY;
		ball.velocity.x -= 2 * dotProduct * normalX;
		ball.velocity.y -= 2 * dotProduct * normalY;
	}
	// Reset ball if it goes off screen and remove one health object
	if (ball.x < -ball.radius || ball.x > game.width + ball.radius) {
		if (healthObjects.length > 0) {
			var lastHealthIndex = healthObjects.length - 1;
			healthObjects[lastHealthIndex].destroy();
			healthObjects.splice(lastHealthIndex, 1);
		}
		ball.reset();
		if (healthObjects.length === 0) {
			LK.showGameOver();
		}
	}
	// Update the elliptical orbit object and check for collision with the ball
	ellipticalOrbitObject.update(planet);
	if (ellipticalOrbitObject.intersects(ball)) {
		// Reflect ball velocity
		var normalX = ball.x - ellipticalOrbitObject.x;
		var normalY = ball.y - ellipticalOrbitObject.y;
		var normalLength = Math.sqrt(normalX * normalX + normalY * normalY);
		normalX /= normalLength;
		normalY /= normalLength;
		var dotProduct = ball.velocity.x * normalX + ball.velocity.y * normalY;
		ball.velocity.x -= 2 * dotProduct * normalX;
		ball.velocity.y -= 2 * dotProduct * normalY;
	}
});
// Touch controls for paddles
function handleTouch(obj) {
	var touchPos = obj.event.getLocalPosition(game);
	if (touchPos.x < game.width / 2) {
		leftPaddle.isMoving = leftPaddle.y !== touchPos.y;
		leftPaddle.y = touchPos.y;
	} else {
		rightPaddle.isMoving = rightPaddle.y !== touchPos.y;
		rightPaddle.y = touchPos.y;
	}
}
game.on('down', handleTouch);
game.on('move', handleTouch);
:quality(85)/https://cdn.frvr.ai/65a43f0dd36a834dc2f1b5ff.png%3F3) 
 plasma barrier. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65a45cc77ccf9784ba9fbd27.png%3F3) 
 neutron star. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65a45f947ccf9784ba9fbd54.png%3F3) 
 neutron star, pulsar. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65a4673af236cc800d834cee.png%3F3) 
 cat eye nebula, cartoon style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65a4748dc7f17f8682311770.png%3F3) 
 flying saucer, cartoon style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65a477daec4a38991552ffd2.png%3F3) 
 erase