Skip to content

Fireworks

from gridmas import *
import random

name = "Fire Works"
author = "Ciaran"


class Explosion():
    def __init__(self, x, y, z, max_age):
        self.x = x
        self.y = y
        self.z = z
        self.max_age = max_age
        self.tick = 0
        self.color = Color.random()


def draw():
    explosions: list[Explosion] = []
    i = 0
    interval = 50
    while True:
        if i == 0:
            randomid = random.randrange(0, num_pixels() - 1)
            center_light = pixels(randomid)
            explosions.append(Explosion(center_light.x, center_light.y, center_light.z, 5))
            interval = random.randrange(50, 140)
        i = (i + 1) % interval

        for exp in explosions:
            exp.tick += 1

        for pixel in pixels():
            a = random.random()
            if a > 0.8:
                pixel.fade(random.randrange(100, 120, 1) / 100)
            elif a > 0.77:
                pixel.set_color(Color.black())
            elif a > 0.765:
                pixel.fade(0.5)

            for exp in explosions:
                if exp.tick / 6 < dist([exp.x, exp.y, exp.z], [pixel.x, pixel.y, pixel.z]) < exp.tick / 5:
                    pixel.set_color(exp.color)

        yield
        explosions = list(filter(lambda x: x.tick <= x.max_age, explosions))