From 0846fd525b77a12e746cecffe4ec658a27712576 Mon Sep 17 00:00:00 2001 From: Alex Clink Date: Mon, 3 Jan 2022 20:55:39 -0500 Subject: [PATCH] Update emitter to use Entity --- examples/particles.cr | 27 +++++++++++++++++++++++++++ shard.yml | 2 +- src/emitter.cr | 28 +++++++++++++--------------- src/particle.cr | 10 +++++----- 4 files changed, 46 insertions(+), 21 deletions(-) create mode 100644 examples/particles.cr diff --git a/examples/particles.cr b/examples/particles.cr new file mode 100644 index 0000000..9d4db92 --- /dev/null +++ b/examples/particles.cr @@ -0,0 +1,27 @@ +require "../src/game" +require "../src/emitter" + +module PF + class Example < Game + @emitter : Emitter + + def initialize(*args, **kwargs) + super + + @emitter = Emitter.new + @emitter.position = Point.new(@width / 2, @height / 2) + end + + def update(dt, event) + @emitter.update(dt) + end + + def draw + clear(0, 0, 0) + @emitter.draw(self) + end + end +end + +example = PF::Example.new(200, 200, 2) +example.run! diff --git a/shard.yml b/shard.yml index 870c432..fa4b969 100644 --- a/shard.yml +++ b/shard.yml @@ -1,5 +1,5 @@ name: pixelfaucet -version: 0.0.2 +version: 0.0.3 authors: - Alex Clink diff --git a/src/emitter.cr b/src/emitter.cr index fb04c44..8fa08e8 100644 --- a/src/emitter.cr +++ b/src/emitter.cr @@ -1,8 +1,8 @@ -require "./sprite" +require "./entity" require "./particle" module PF - class Emitter < Sprite + class Emitter < Entity property emitting : Bool = true property particles = [] of Particle property max_age : Float64 = 1.0 @@ -12,25 +12,23 @@ module PF property emit_angle : Float64 = 2 * Math::PI property size : Float64 = 0.0 - # property color : Pixel = Pixel.new - def generate_particle - Particle.build do |particle| - particle.position = @position + particle = Particle.new + particle.position = @position - if @size > 0.0 - particle.position.x += rand(-@size..@size) - particle.position.y += rand(-@size..@size) - end - - direction = rand((@rotation - @emit_angle)..(@rotation + @emit_angle)) - particle.velocity = @velocity + Vector2.new(Math.cos(direction), Math.sin(direction)) * @strength - particle.lifespan = @max_age + if @size > 0.0 + particle.position.x += rand(-@size..@size) + particle.position.y += rand(-@size..@size) end + + direction = rand((@rotation - @emit_angle)..(@rotation + @emit_angle)) + particle.velocity = @velocity + Point.new(Math.cos(direction), Math.sin(direction)) * @strength + particle.lifespan = @max_age + particle end def update(dt : Float64) - update_position(dt) + super(dt) @last_emitted += dt diff --git a/src/particle.cr b/src/particle.cr index 3120690..17087e9 100644 --- a/src/particle.cr +++ b/src/particle.cr @@ -1,14 +1,14 @@ -require "./sprite" -require "./sprite/age" +require "./entity" +require "./entity/entity_age" module PF - class Particle < Sprite - include SpriteAge + class Particle < Entity + include EntityAge def update(dt : Float64) update_age(dt) return if dead? - update_position(dt) + super(dt) end def draw(engine)