75 lines
2 KiB
Fennel
75 lines
2 KiB
Fennel
(local vfx {})
|
|
|
|
(fn vfx.explosion [ps x y ?opts]
|
|
(let [opts (or ?opts {})
|
|
color (or opts.color 208)
|
|
force (or opts.force 200)]
|
|
(ps:set_position x y)
|
|
(ps:set_colors color (+ color 15))
|
|
(ps:set_velocity (- force) force (- force) force)
|
|
(ps:set_gravity 0 100)
|
|
(ps:set_life 0.3 0.8)
|
|
(ps:set_size 1 3)
|
|
(ps:set_drag 0.98)
|
|
(ps:set_spawn_rate 0)
|
|
(ps:emit (or opts.count 50))))
|
|
|
|
(fn vfx.fire [ps x y ?opts]
|
|
(let [opts (or ?opts {})
|
|
width (or opts.width 50)
|
|
color (or opts.color 208)]
|
|
(ps:set_position x y)
|
|
(ps:set_spread width 5)
|
|
(ps:set_colors color (+ color 15))
|
|
(ps:set_velocity -20 20 -80 -40)
|
|
(ps:set_gravity 0 -30)
|
|
(ps:set_life 0.5 1.5)
|
|
(ps:set_size 1 2)
|
|
(ps:set_turbulence 30)
|
|
(ps:set_drag 0.95)
|
|
(ps:set_spawn_rate (or opts.rate 50))))
|
|
|
|
(fn vfx.rain [ps width ?opts]
|
|
(let [opts (or ?opts {})
|
|
wind (or opts.wind 0)
|
|
color (or opts.color 153)]
|
|
(ps:set_position (/ width 2) -10)
|
|
(ps:set_spread width 0)
|
|
(ps:set_colors color (+ color 3))
|
|
(ps:set_velocity (- wind 10) (+ wind 10) 300 400)
|
|
(ps:set_gravity 0 200)
|
|
(ps:set_life 1 2)
|
|
(ps:set_size 1 1)
|
|
(ps:set_drag 1)
|
|
(ps:set_spawn_rate (or opts.rate 100))))
|
|
|
|
(fn vfx.smoke [ps x y ?opts]
|
|
(let [opts (or ?opts {})
|
|
color (or opts.color 248)]
|
|
(ps:set_position x y)
|
|
(ps:set_spread 10 5)
|
|
(ps:set_colors color (+ color 7))
|
|
(ps:set_velocity -15 15 -30 -10)
|
|
(ps:set_gravity 0 -20)
|
|
(ps:set_life 1 3)
|
|
(ps:set_size 2 4)
|
|
(ps:set_turbulence 20)
|
|
(ps:set_drag 0.98)
|
|
(ps:set_spawn_rate (or opts.rate 20))))
|
|
|
|
(fn vfx.snow [ps width ?opts]
|
|
(let [opts (or ?opts {})
|
|
wind (or opts.wind 10)
|
|
color (or opts.color 15)]
|
|
(ps:set_position (/ width 2) -10)
|
|
(ps:set_spread width 0)
|
|
(ps:set_colors color color)
|
|
(ps:set_velocity (- wind 20) (+ wind 20) 30 60)
|
|
(ps:set_gravity 0 10)
|
|
(ps:set_life 3 6)
|
|
(ps:set_size 1 2)
|
|
(ps:set_turbulence 15)
|
|
(ps:set_drag 0.99)
|
|
(ps:set_spawn_rate (or opts.rate 30))))
|
|
|
|
vfx
|