var asteroidField = []; sets.push({ id: "asteroid-field", setup: () => { if(!setsLoaded['asteroid-field']) { buildAsteroidField(); setsLoaded['asteroid-field'] = true; } }, update: (delta) => { updateAsteroidField(delta); }, draw: (context, delta) => { drawAsteroidField(context, delta); }, }); function buildAsteroidField() { var asteroidSprites = [ `meteorBrown_big1.png`, `meteorBrown_big2.png`, `meteorBrown_big3.png`, `meteorBrown_big4.png`, `meteorBrown_med1.png`, `meteorBrown_med3.png`, `meteorBrown_small1.png`, `meteorBrown_small2.png`, `meteorBrown_tiny1.png`, `meteorBrown_tiny2.png`, `meteorGrey_big1.png`, `meteorGrey_big2.png`, `meteorGrey_big3.png`, `meteorGrey_big4.png`, `meteorGrey_med1.png`, `meteorGrey_med2.png`, `meteorGrey_small1.png`, `meteorGrey_small2.png`, `meteorGrey_tiny1.png`, `meteorGrey_tiny2.png`, ]; asteroidField = []; for (let i = 0; i < 100; i++) { let asteroid = {}; let spriteIndex = Math.floor(asteroidSprites.length * Math.random()); asteroid.sprite = asteroidSprites[spriteIndex]; asteroid.x = Math.floor(starfield.width * Math.random()) - starfield.width / 2; asteroid.y = Math.floor(starfield.height * Math.random()) - starfield.height / 2; asteroid.angle = Math.floor(360 * Math.random()); asteroid.rotationSpeed = (2 * Math.random()) - 1; asteroid.velocity = {}; asteroid.velocity.x = 2 * Math.random() - 1; asteroid.velocity.y = 2 * Math.random() - 1; asteroidField.push(asteroid); } } function updateAsteroidField(delta) { for (let i = 0; i < asteroidField.length; i++) { let asteroid = asteroidField[i]; asteroid.x += asteroid.velocity.x; asteroid.y += asteroid.velocity.y; asteroid.angle += asteroid.rotationSpeed; if (asteroid.x > starfield.width / 2) { asteroid.x -= starfield.width; } if (asteroid.y > starfield.height / 2) { asteroid.y -= starfield.height; } if (asteroid.x < -(starfield.width / 2)) { asteroid.x += starfield.width; } if (asteroid.y < -(starfield.height / 2)) { asteroid.y += starfield.height; } if (asteroid.angle > 360) { asteroid.angle -= 360; } if (asteroid.angle < 0) { asteroid.angle += 360; } } } function drawAsteroidField(context, delta) { for (let i = 0; i < asteroidField.length; i++) { let asteroid = asteroidField[i]; context.save(); context.translate(asteroid.x, asteroid.y); context.rotate(asteroid.angle * Math.PI / 180); atlas.drawCentered(context, asteroid.sprite, { x: 0, y: 0 }); context.restore(); } }