Class: Bestguigui::Particles
- Inherits:
-
Object
- Object
- Bestguigui::Particles
- Defined in:
- lib/bestguigui/particles.rb
Overview
Collection de particules (Bestguigui::Particle par défaut, mais le bloc de génération peut renvoyer n'importe quel objet qui répond à update(dt)/dead?/draw). Deux usages :
Explosion ponctuelle (comme un effet d'impact) :
@effect = Bestguigui::Particles.new { Bestguigui::Particle.new(
x: tx, y: ty, angle: Gosu.random(0, 360), size: Gosu.random(1, 5),
speed: Gosu.random(10, 200), fade_speed: Gosu.random(600, 1000)
) }
@effect.burst(50)
# chaque frame : @effect.update(dt) ; @effect.draw
# à retirer une fois @effect.empty?
Flux continu maintenu à une population cible (comme de la neige qui tombe en permanence à l'écran) :
@snow = Bestguigui::Particles.new(limit: 300) { spawn_snowflake }
@snow.update(dt) # regénère automatiquement ce qui a été retiré
burst accepte aussi un bloc ponctuel différent du générateur par
défaut, utile pour une première génération étalée sur tout l'écran :
@snow.burst(300) { spawn_snowflake_anywhere_on_screen }
Instance Method Summary collapse
- #burst(count, &override) ⇒ Object
- #draw ⇒ Object
- #empty? ⇒ Boolean
-
#initialize(limit: nil, &spawn) ⇒ Particles
constructor
A new instance of Particles.
- #size ⇒ Object
- #update(dt) ⇒ Object
Constructor Details
#initialize(limit: nil, &spawn) ⇒ Particles
Returns a new instance of Particles.
26 27 28 29 30 |
# File 'lib/bestguigui/particles.rb', line 26 def initialize(limit: nil, &spawn) @particles = [] @limit = limit @spawn = spawn end |
Instance Method Details
#burst(count, &override) ⇒ Object
32 33 34 35 |
# File 'lib/bestguigui/particles.rb', line 32 def burst(count, &override) generator = override || @spawn count.times { @particles << generator.call } end |
#draw ⇒ Object
50 51 52 |
# File 'lib/bestguigui/particles.rb', line 50 def draw @particles.each(&:draw) end |
#empty? ⇒ Boolean
54 55 56 |
# File 'lib/bestguigui/particles.rb', line 54 def empty? @particles.empty? end |
#size ⇒ Object
58 59 60 |
# File 'lib/bestguigui/particles.rb', line 58 def size @particles.size end |
#update(dt) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/bestguigui/particles.rb', line 37 def update(dt) @particles.each { |particle| particle.update(dt) } @particles.reject!(&:dead?) # Reconstitue après avoir retiré les mortes de cette frame, pas avant # — sinon la population reste sous la limite pendant une frame de plus # à chaque fois que des particules meurent. if @limit missing = @limit - @particles.size burst(missing) if missing.positive? end end |