User prompt
stars should only get random colors only from the colors of the obstacle around it. please reingeneer code for this to happe
User prompt
Star is still randomly getting any color, white for the first 3 it should only be either yellow or purple.
User prompt
Set the first 3 start to only have yellow and purple obstacles and also rotate between those two colors
User prompt
First star will only be yellow and not change colors
User prompt
Obstacles colors can only be one of the colors of the ones the star can have
User prompt
Limit the colors of the star to only the colors of the obstacles orbiting it
User prompt
star color should be random between the colors of the obstacles orbiting them
User prompt
actually first star color should be yellow
User prompt
Set the color of the first 3 stars obstacles to only either yellow or purple
User prompt
Please fix the bug: 'Uncaught ReferenceError: starNumber is not defined' in or related to this line: 'var obstacleGraphics = self.attachAsset('obstacle', {' Line Number: 90
User prompt
Please add a confir setting in the code where we can define the colors of the obstacles around the stars. As an example set the color o the first two starts obstacles to yellow
User prompt
first star should start with a random color and not black
User prompt
Please fix the bug: 'Uncaught ReferenceError: getRandomTint is not defined' in or related to this line: 'var obstacleGraphics = self.attachAsset('obstacle', {' Line Number: 90
User prompt
Thanks that worked! Now can you please make sure we can identify each star number and define what the colors of the obstacles orbiting them can be
User prompt
please simplify and make code better
User prompt
identify each star with an identifier depending on when it was created, first one will be number one and so on.
User prompt
first 2 stars should only have yellow obstacles
User prompt
add a corfig file in the game where we can decide which color of obstacles will each star have surrounding them. stars will be identified by number of obstacles around it.
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'LIGHT_GRAY')' in or related to this line: 'var game = new LK.Game({' Line Number: 468
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'LIGHT_GRAY')' in or related to this line: 'var game = new LK.Game({' Line Number: 468
User prompt
Define glrobaly the name for each color an use color name instead of hex value in code
User prompt
Please add a configuration in the game code where we can define the colors of the obstacles for each star
Code edit (1 edits merged)
Please save this source code
User prompt
do not rermove the challenges counter of an obstacle until all the obstacles of that challenge have been cleared
User prompt
move challanges display to the top of the screen, and they should be next to each other and not below each other
/**** * Classes ****/ var BounceEffect = Container.expand(function (x, y, color) { var self = Container.call(this); self.x = x; self.y = y; var bounceGraphics = self.attachAsset('bounceEffect', { anchorX: 0.5, anchorY: 0.5 }); bounceGraphics.tint = color; var duration = 30; self._update_migrated = function () { duration--; bounceGraphics.scaleX += 0.1; bounceGraphics.scaleY += 0.1; bounceGraphics.alpha -= 0.033; if (duration <= 0) { self.destroy(); } }; game.addChild(self); }); var Challenge = Container.expand(function (color, amount) { var self = Container.call(this); self.color = color; self.amount = amount; self.completed = false; var obstacleIcon = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, tint: color, scaleX: 0.5, scaleY: 0.5 }); obstacleIcon.x = 80; obstacleIcon.y = 30; var challengeText = new Text2('0/' + amount, { size: 50, fill: "#ffffff", stroke: "#000000", // Add border color strokeThickness: 8, // Set border thickness anchorX: 0.5, anchorY: 0.5 }); challengeText.x = 150; self.addChild(obstacleIcon); self.addChild(challengeText); self.updateProgress = function () { self.amount -= 1; challengeText.setText(amount - self.amount + '/' + amount); if (self.amount <= 0) { self.completed = true; var allChallengesCompleted = currentChallenge.every(function (challenge) { return challenge.completed; self.completed = true; }); if (allChallengesCompleted) { LK.setScore(LK.getScore() + 50); scoreTxt.setText(LK.getScore().toString()); var randomWord = motivationalWords[Math.floor(Math.random() * motivationalWords.length)]; var challengeCompletePopup = new Text2(randomWord, { size: 150, fill: "#" + self.color.toString(16), stroke: "#000000", strokeThickness: 8, font: "Comic Sans MS, Comic Sans, cursive", anchorX: 0.5, anchorY: 0.5, alpha: 0 // Set initial alpha to 0 to prevent blinking }); challengeCompletePopup.x = 2048 / 2 - 300; challengeCompletePopup.y = 2732 / 2 - 200; game.addChild(challengeCompletePopup); // Animate the text pop out and drain out var animationDuration = 120; // 2 seconds at 60 FPS var animationFrame = 0; var animationInterval = LK.setInterval(function () { if (animationFrame < animationDuration / 2) { // Pop out effect if (animationFrame === 0) { challengeCompletePopup.alpha = 1; // Set alpha to 1 after initial frame } challengeCompletePopup.scaleX = challengeCompletePopup.scaleY = 1 + 0.5 * (animationFrame / (animationDuration / 2)); challengeCompletePopup.scaleX = challengeCompletePopup.scaleY = 1 + 0.5 * (animationFrame / (animationDuration / 2)); } else { // Drain out effect challengeCompletePopup.alpha = 1 - (animationFrame - animationDuration / 2) / (animationDuration / 2); challengeCompletePopup.scaleX = challengeCompletePopup.scaleY = 1.5 - 0.5 * (animationFrame - animationDuration / 2) / (animationDuration / 2); } animationFrame++; if (animationFrame >= animationDuration) { LK.clearInterval(animationInterval); challengeCompletePopup.destroy(); } }, 1000 / 60); currentChallenge.forEach(function (challenge) { challenge.destroy(); }); currentChallenge = []; startNextChallenge(); } } }; }); var CircularObstacle = Container.expand(function (starX, starY, radius, angleSpeed, initialAngle, obstacleCount) { var self = Container.call(this); var obstacleGraphics = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5, tint: starObstacleConfig[obstacleCount] || 0xffffff // Default to white if not found in config }); self.angle = initialAngle || 0; self.radius = radius; self.angleSpeed = angleSpeed * 0.75; self.starX = starX; self.starY = starY; self.updatePosition = function () { self.x = self.starX + Math.cos(self.angle) * self.radius; self.y = self.starY + Math.sin(self.angle) * self.radius; self.angle += self.angleSpeed * 0.35; obstacleGraphics.rotation += self.angleSpeed * 0.35; }; self.moveDown = function (distance, dotY) { var speedMultiplier = dotY < 1200 ? 3 : dotY < 1400 ? 2 : dotY < 2000 ? 1.3 : 1.2; self.starY += distance * speedMultiplier; }; self.updatePosition(); }); var Dot = Container.expand(function () { var self = Container.call(this); var dotGraphics = self.attachAsset('dot', { anchorX: 0.5, anchorY: 0.5 }); self.destroyed = false; self.velocityY = 0; self.gravity = 0.7; self.bounce = -15; self._update_migrated = function () { var previousY = self.y; self.velocityY += self.gravity; self.y += self.velocityY; if (!self.firstTouch && !self.intersects(hand)) { self.y = 2732 - self.height / 2 - 500; } else if (self.intersects(hand)) { self.bounceUp(); } else if (self.y > 2232 - self.height / 2 && self.firstTouch && !self.firstStarDestroyed) { self.velocityY = self.bounce; } else if (self.y > 2832 && !self.destroyed) { createDotParticleEffect(self.x, self.y); LK.getSound('explosion').play(); self.destroyed = true; self.destroy(); LK.setTimeout(function () { LK.showGameOver(); }, 1000); } self.movedDistance = self.y - previousY; }; self.bounceUp = function () { if (!self.destroyed) { self.velocityY = self.bounce; LK.getSound('bounce').play(); if (!self.intersects(hand)) { createBounceEffect(self.x, self.y, dotGraphics.tint); } self.firstTouch = true; if (!self.firstStarDestroyed) { self.firstStarDestroyed = true; } } }; self.inheritStarColor = function (star) { dotGraphics.tint = star.children[0].tint; }; }); var DotParticleEffect = Container.expand(function (x, y) { var self = Container.call(this); self.x = x; self.y = y; var particles = []; var angleIncrement = Math.PI * 2 / 20; var speed = 30; var colors = [0xffe066, 0xcc66ff, 0xff6666, 0x99ccff, 0xffa500]; for (var i = 0; i < 20; i++) { var particle = self.attachAsset('dot', { anchorX: 0.5, anchorY: 0.5, tint: colors[Math.floor(Math.random() * colors.length)] }); particle.scaleX = particle.scaleY = 0.5; particle.alpha = 1; var angle = i * angleIncrement; particle.vx = Math.cos(angle) * speed; particle.vy = Math.sin(angle) * speed; particles.push(particle); } self._update_migrated = function () { for (var i = particles.length - 1; i >= 0; i--) { particles[i].x += particles[i].vx; particles[i].y += particles[i].vy; particles[i].rotation += 0.1; // Rotate the particle particles[i].alpha -= 0.0167; if (particles[i].alpha <= 0) { particles[i].destroy(); particles.splice(i, 1); } } if (particles.length === 0) { self.destroy(); } }; game.addChild(self); }); // Add Hand asset below the dot var Hand = Container.expand(function () { var self = Container.call(this); var handGraphics = self.attachAsset('hand', { anchorX: 0.5, anchorY: 0, alpha: 0.9 }); self._update_migrated = function (distance) { if (distance) { self.y += distance; } }; }); var ObstacleParticleEffect = Container.expand(function (x, y) { var self = Container.call(this); self.x = x; self.y = y; var particles = []; var angleIncrement = Math.PI * 2 / 30; var speed = 20; var colors = [0xff6666, 0x00ff00, 0x0000ff, 0xffe066, 0xcc66ff, 0x99ccff]; for (var i = 0; i < 30; i++) { var particle = self.attachAsset('smallObstacle', { anchorX: 0.5, anchorY: 0.5, tint: colors[Math.floor(Math.random() * colors.length)] }); particle.scaleX = particle.scaleY = 0.5; particle.alpha = 1; var angle = i * angleIncrement; particle.vx = Math.cos(angle) * speed; particle.vy = Math.sin(angle) * speed; particles.push(particle); } self._update_migrated = function () { for (var i = particles.length - 1; i >= 0; i--) { particles[i].x += particles[i].vx; particles[i].y += particles[i].vy; particles[i].alpha -= 0.0167; if (particles[i].alpha <= 0) { particles[i].destroy(); particles.splice(i, 1); } } if (particles.length === 0) { self.destroy(); } }; game.addChild(self); }); var ObstacleScorePopup = Container.expand(function (x, y) { var self = Container.call(this); self.x = x; self.y = y; var scoreText = new Text2('+10', { size: 100, fill: "#ffffff", anchorX: 0.5, anchorY: 0.5 }); scoreText.x = -scoreText.width / 2; scoreText.y = -scoreText.height / 2; self.addChild(scoreText); self.alpha = 1; var duration = 120; self._update_migrated = function () { duration--; self.y -= 2; self.alpha -= 1 / 120; if (duration <= 0) { self.destroy(); } }; game.addChild(self); }); var OrbitLine = Container.expand(function (starX, starY, radius) { var self = Container.call(this); self.starX = starX; self.starY = starY; self.radius = radius; var segments = 50; var angleIncrement = Math.PI * 2 / segments; for (var i = 0; i < segments; i++) { var angle = i * angleIncrement; var dot = self.attachAsset('smallObstacle', { x: starX + Math.cos(angle) * radius, y: starY + Math.sin(angle) * radius, anchorX: 0.5, anchorY: 0.5, tint: [0xffe066, 0xcc66ff, 0xff6666, 0x99ccff, 0xffa500][Math.floor(Math.random() * 5)] }); if (i % 2 === 0) { dot.alpha = 0; } } self.moveDown = function (distance, dotY) { var speedMultiplier = dotY < 1200 ? 3 : dotY < 1400 ? 2 : dotY < 2000 ? 1.3 : dotY < 2300 ? 1.2 : 1; self.y += distance * speedMultiplier; }; }); var ParticleEffect = Container.expand(function (x, y, color) { var self = Container.call(this); self.x = x; self.y = y; var particles = []; for (var i = 0; i < 20; i++) { var particle = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5, tint: color }); particle.scaleX = particle.scaleY = Math.random() * 0.5 + 0.5; particle.alpha = 0.7; particle.vx = (Math.random() - 0.5) * 10; particle.vy = (Math.random() - 0.5) * 10; particles.push(particle); } self._update_migrated = function () { for (var i = particles.length - 1; i >= 0; i--) { particles[i].x += particles[i].vx; particles[i].y += particles[i].vy; particles[i].alpha -= 0.02; if (particles[i].alpha <= 0) { particles[i].destroy(); particles.splice(i, 1); } } if (particles.length === 0) { self.destroy(); } }; game.addChild(self); }); var PregameScreen = Container.expand(function () { var self = Container.call(this); // Create background overlay var overlay = self.attachAsset('block', { anchorX: 0.5, anchorY: 0.5, alpha: 0.8 }); overlay.width = 2048; overlay.height = 2732; overlay.x = 2048 / 2; overlay.y = 2732 / 2; // Create Endless button using endless asset var endlessButton = self.attachAsset('Endless', { anchorX: 0.5, anchorY: 0.5 }); endlessButton.x = 2048 / 2; endlessButton.y = 2732 / 2 - 100; endlessButton.down = function () { self.destroy(); startGame('endless'); }; // Create Challenges button using challenges asset var challengesButton = self.attachAsset('Challenges', { anchorX: 0.5, anchorY: 0.5 }); challengesButton.x = 2048 / 2; challengesButton.y = 2732 / 2 + 100; challengesButton.down = function () { self.destroy(); startGame('challenges'); }; self.addChild(endlessButton); self.addChild(challengesButton); }); var ScorePopup = Container.expand(function (x, y) { var self = Container.call(this); self.x = x; self.y = y; var scoreText = new Text2('+' + (10 * (starCount + 1)).toString(), { size: 100, fill: "#ffffff", anchorX: 0.5, anchorY: 0.5 }); scoreText.x = -scoreText.width / 2; scoreText.y = -scoreText.height / 2; self.addChild(scoreText); self.alpha = 1; var duration = 120; self._update_migrated = function () { duration--; self.y -= 2; self.alpha -= 1 / 120; if (duration <= 0) { self.destroy(); } }; game.addChild(self); }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5, tint: [0xffe066, 0xcc66ff, 0xff6666, 0x99ccff, 0xffa500][Math.floor(Math.random() * 5)] }); self.scaleDirection = 1; self.scaleSpeed = 0.005; self.minScale = 1; self.maxScale = 1.2; self.moveDown = function (distance, dotY) { var speedMultiplier = dotY < 1200 ? 3 : dotY < 1400 ? 2 : dotY < 2000 ? 1.3 : 1.2; self.y += distance * speedMultiplier; if (self.y > 2732 - self.height / 2) { self.y = -self.height / 2; } }; self.updateScale = function () { if (self.scaleDirection === 1 && starGraphics.scale.x < self.maxScale) { starGraphics.scale.x += self.scaleSpeed; starGraphics.scale.y += self.scaleSpeed; } else if (self.scaleDirection === -1 && starGraphics.scale.x > self.minScale) { starGraphics.scale.x -= self.scaleSpeed; starGraphics.scale.y -= self.scaleSpeed; } if (starGraphics.scale.x >= self.maxScale || starGraphics.scale.x <= self.minScale) { self.scaleDirection *= -1; } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xD3D3D3 // Light gray color }); /**** * Game Code ****/ // Configuration for obstacle colors based on the number of obstacles around a star var starObstacleConfig = { 1: 0xffe066, // Yellow for 1 obstacle 2: 0xcc66ff, // Purple for 2 obstacles 3: 0xff6666, // Red for 3 obstacles 4: 0x99ccff, // Blue for 4 obstacles 5: 0xffa500 // Orange for 5 obstacles }; function createBounceEffect(x, y, color) { var effect = new BounceEffect(x, y + 80, color); // Adjust y position to start from a little more lower on the ball LK.on('tick', function () { effect._update_migrated(); }); } var shrinkFrame = 0; var shrinkDuration = 60; function startGame(mode) { if (mode === 'endless') { // Start endless mode // Add your endless mode initialization code here } else if (mode === 'challenges') { // Start challenges mode startNextChallenge(); } } // Pregame screen removed var challenges = [{ obstacles: [{ color: 0xffe066, amount: 1 }, { color: 0xcc66ff, amount: 1 }] }, { obstacles: [{ color: 0xff6666, amount: 1 }] }, { obstacles: [{ color: 0x99ccff, amount: 1 }] }, { obstacles: [{ color: 0xffa500, amount: 1 }] }]; var currentChallengeIndex = 0; var currentChallenge = null; function startNextChallenge() { if (currentChallengeIndex < challenges.length) { var challengeData = challenges[currentChallengeIndex]; currentChallenge = []; for (var i = 0; i < challengeData.obstacles.length; i++) { var obstacleData = challengeData.obstacles[i]; var challenge = game.addChild(new Challenge(obstacleData.color, obstacleData.amount)); challenge.x = 50 + i * (challenge.width + 20); // Position next to each other with 20px gap challenge.y = 50; // Position at the top currentChallenge.push(challenge); } } currentChallengeIndex++; } startNextChallenge(); function createObstacleParticleEffect(x, y) { var effect = new ObstacleParticleEffect(x, y); LK.on('tick', function () { effect._update_migrated(); }); } function changeStarColor(star) { var colors = [0xffe066, 0xcc66ff, 0xff6666, 0x99ccff, 0xffa500]; var currentColorIndex = colors.indexOf(star.children[0].tint); var nextColorIndex = (currentColorIndex + 1) % colors.length; star.children[0].tint = colors[nextColorIndex]; } function updateStarColors() { for (var i = 0; i < stars.length; i++) { changeStarColor(stars[i]); } } LK.setInterval(updateStarColors, 2000); var starCount = 0; // Initialize the offscreen threshold for destroying obstacles var offscreenThreshold = 2732 + 1000; function createParticleEffect(x, y, color) { var effect = new ParticleEffect(x, y, color); LK.on('tick', function () { effect._update_migrated(); }); } function createDotParticleEffect(x, y) { var effect = new DotParticleEffect(x, y); LK.on('tick', function () { effect._update_migrated(); }); } var obstacles = []; function updateObstacles() { var obstacleCount = 5 + starCount; while (obstacles.length < obstacleCount) { var obstacle = game.addChild(new Obstacle()); obstacle.x = obstacle.direction === 1 ? -obstacle.width / 2 : 2048 + obstacle.width / 2; obstacle.y = Math.random() * (2732 - obstacle.height) + obstacle.height / 2; obstacles.push(obstacle); } } var scoreTxt = new Text2('0', { size: 128, // Reduced size by 20% from original 160 fill: "#ffffff", stroke: "#000000", // Add border color strokeThickness: 8 // Set border thickness }); scoreTxt.anchor.set(0.5, 0); scoreTxt.x = 550; LK.gui.top.addChild(scoreTxt); currentChallenge.y = 50; // Position at the top LK.gui.top.addChild(scoreTxt); game.on('down', function (x, y, obj) { if (dot) { dot.bounceUp(); } }); var stars = []; var star = game.addChild(new Star()); star.x = 2048 / 2; star.y = 2732 / 2 - 500; stars.push(star); LK.setInterval(function () { changeStarColor(star); }, 1000); // Initialize star with a random color from the obstacles // Add dotted orbit for the first star var orbitLine = game.addChild(new OrbitLine(star.x, star.y, 300)); obstacles.push(orbitLine); function spawnInitialObstacles() { var starX = 2048 / 2; var starY = 2732 / 2 - 500; var radius = 300; var angleSpeed = 0.05; var obstacleCount = 1; // Initial obstacle count var obstacle = new CircularObstacle(starX, starY, radius, angleSpeed, 0, obstacleCount); game.addChild(obstacle); obstacles.push(obstacle); // No additional obstacles for the first star } spawnInitialObstacles(); LK.on('tick', function () { dot._update_migrated(); for (var i = 0; i < obstacles.length; i++) { if (obstacles[i] instanceof CircularObstacle) { obstacles[i].updatePosition(); } else { if (typeof obstacles[i]._move_migrated === 'function') { obstacles[i]._move_migrated(); } } if (dot.y < 2300 && dot.movedDistance < 0) { obstacles[i].moveDown(-dot.movedDistance, dot.y); } if (dot.intersects(obstacles[i]) && !(obstacles[i] instanceof OrbitLine)) { if (dot.children[0].tint === obstacles[i].children[0].tint) { createObstacleParticleEffect(obstacles[i].x, obstacles[i].y); LK.setScore(LK.getScore() + 10); scoreTxt.setText(LK.getScore().toString()); var obstacleScorePopup = new ObstacleScorePopup(obstacles[i].x, obstacles[i].y); LK.on('tick', function () { obstacleScorePopup._update_migrated(); }); LK.getSound('obstacle').play(); // Update challenge progress before destroying the obstacle if (currentChallenge) { for (var j = 0; j < currentChallenge.length; j++) { if (obstacles[i].children[0].tint === currentChallenge[j].color) { currentChallenge[j].updateProgress(); if (currentChallenge[j].completed) { currentChallenge.splice(j, 1); if (currentChallenge.length === 0) { startNextChallenge(); } } break; } } } obstacles[i].destroy(); obstacles.splice(i, 1); } else { if (!dot.destroyed) { createDotParticleEffect(dot.x, dot.y); LK.getSound('explosion').play(); dot.destroyed = true; } dot.destroy(); LK.setTimeout(function () { LK.showGameOver(); }, 1500); } } else if (obstacles[i].y > offscreenThreshold) { obstacles[i].destroy(); obstacles.splice(i, 1); } } for (var j = stars.length - 1; j >= 0; j--) { stars[j].updateScale(); if (dot.intersects(stars[j])) { dot.inheritStarColor(stars[j]); LK.setScore(LK.getScore() + 10 * (starCount + 1)); scoreTxt.setText(LK.getScore().toString()); scoreTxt.alpha = 1; var oldStarY = stars[j].y; createParticleEffect(stars[j].x, stars[j].y, stars[j].children[0].tint); LK.getSound('star').play(); var scorePopup = new ScorePopup(stars[j].x, stars[j].y); LK.on('tick', function () { scorePopup._update_migrated(); }); stars[j].destroy(); stars.splice(j, 1); starCount += 1; var newStar = game.addChild(new Star()); newStar.x = 2048 / 2; var additionalYOffset = starCount > 1 ? (starCount - 1) * 200 : 0; newStar.y = oldStarY - 2000 - additionalYOffset; stars.push(newStar); // Ensure new star also has the color change function changeStarColor(newStar); if (!handMoved && hand) { var handMoveDistance = 0; var handMoveInterval = LK.setInterval(function () { handMoveDistance += 1; hand._update_migrated(handMoveDistance); if (handMoveDistance >= 1000) { LK.clearInterval(handMoveInterval); } }, 10); handMoved = true; } // Increase the offscreen threshold for destroying obstacles offscreenThreshold += 300; // Add a cumulative number of CircularObstacles at random positions around the new star var cumulativeObstacles = 1 + starCount; for (var k = 0; k < cumulativeObstacles; k++) { var randomAngle = Math.random() * Math.PI * 2; // Random angle in radians var radiusOffset = k * 100; var circularObstacle = game.addChild(new CircularObstacle(newStar.x, newStar.y, 300 + radiusOffset, 0.05 * (k % 2 === 0 ? 1 : -1), randomAngle, cumulativeObstacles)); obstacles.push(circularObstacle); } // Add orbit line before creating all obstacles var orbitLine = new OrbitLine(newStar.x, newStar.y, 300 + radiusOffset); game.addChildAt(orbitLine, 0); obstacles.push(orbitLine); } else if (dot.y < 2300 && dot.movedDistance < 0) { stars[j].moveDown(-dot.movedDistance, dot.y); } } }); var dot = game.addChild(new Dot()); dot.x = 2048 / 2; dot.y = 2732 - dot.height / 2 - 200; var hand; var handMoved = false; function createHand() { hand = game.addChild(new Hand()); hand.x = dot.x; hand.y = dot.y + dot.height / 2; } createHand(); var motivationalWords = ["Great Job!", "Well Done!", "Keep Going!", "Awesome!", "Fantastic!", "You're Amazing!", "Superb!", "Excellent!", "Nice Work!", "Bravo!"];
===================================================================
--- original.js
+++ change.js
@@ -105,14 +105,14 @@
}
}
};
});
-var CircularObstacle = Container.expand(function (starX, starY, radius, angleSpeed, initialAngle) {
+var CircularObstacle = Container.expand(function (starX, starY, radius, angleSpeed, initialAngle, obstacleCount) {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5,
- tint: [0xffe066, 0xcc66ff, 0xff6666, 0x99ccff, 0xffa500][Math.floor(Math.random() * 5)]
+ tint: starObstacleConfig[obstacleCount] || 0xffffff // Default to white if not found in config
});
self.angle = initialAngle || 0;
self.radius = radius;
self.angleSpeed = angleSpeed * 0.75;
@@ -453,8 +453,20 @@
/****
* Game Code
****/
+// Configuration for obstacle colors based on the number of obstacles around a star
+var starObstacleConfig = {
+ 1: 0xffe066,
+ // Yellow for 1 obstacle
+ 2: 0xcc66ff,
+ // Purple for 2 obstacles
+ 3: 0xff6666,
+ // Red for 3 obstacles
+ 4: 0x99ccff,
+ // Blue for 4 obstacles
+ 5: 0xffa500 // Orange for 5 obstacles
+};
function createBounceEffect(x, y, color) {
var effect = new BounceEffect(x, y + 80, color); // Adjust y position to start from a little more lower on the ball
LK.on('tick', function () {
effect._update_migrated();
@@ -589,9 +601,10 @@
var starX = 2048 / 2;
var starY = 2732 / 2 - 500;
var radius = 300;
var angleSpeed = 0.05;
- var obstacle = new CircularObstacle(starX, starY, radius, angleSpeed);
+ var obstacleCount = 1; // Initial obstacle count
+ var obstacle = new CircularObstacle(starX, starY, radius, angleSpeed, 0, obstacleCount);
game.addChild(obstacle);
obstacles.push(obstacle);
// No additional obstacles for the first star
}
@@ -693,9 +706,9 @@
var cumulativeObstacles = 1 + starCount;
for (var k = 0; k < cumulativeObstacles; k++) {
var randomAngle = Math.random() * Math.PI * 2; // Random angle in radians
var radiusOffset = k * 100;
- var circularObstacle = game.addChild(new CircularObstacle(newStar.x, newStar.y, 300 + radiusOffset, 0.05 * (k % 2 === 0 ? 1 : -1), randomAngle));
+ var circularObstacle = game.addChild(new CircularObstacle(newStar.x, newStar.y, 300 + radiusOffset, 0.05 * (k % 2 === 0 ? 1 : -1), randomAngle, cumulativeObstacles));
obstacles.push(circularObstacle);
}
// Add orbit line before creating all obstacles
var orbitLine = new OrbitLine(newStar.x, newStar.y, 300 + radiusOffset);
Cartoon, white star. 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.
Cartoon. white circle. 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.
cartoon white dot with eyes (just black dots).. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon white ring. simple.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon white cloud.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.