; SPDX-FileCopyrightText: 2023 Jummit
;
; SPDX-License-Identifier: GPL-3.0-or-later

(fn update-particles [world]
  (each [_ entity (ipairs world)]
    (case entity
      {: particles}
      (each [_ particle (ipairs particles)]
        (case particle
          {: x : y : dir : angle : torque}
          (do
            (set particle.x (+ x (. dir 1)))
            (set particle.y (+ y (. dir 2)))
            (set particle.dir
                 [(* (math.sin angle) 0.5) (* (math.cos angle) 0.5)])
            (set particle.angle (+ angle torque))))))))

(fn draw-particles [world]
  (each [_ entity (ipairs world)]
    (case entity
      {: particles : x : y}
      (each [_ particle (ipairs particles)]
        (case particle {:x px :y py}
          (_G.spr 272 (+ x px) (+ y py) 0))))))

{: update-particles : draw-particles}