Class: Explosion

Inherits:
Actor
  • Object
show all
Defined in:
lib/explosion.rb

Direct Known Subclasses

EnemyExplosion, PlayerExplosion

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Explosion

Returns a new instance of Explosion.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/explosion.rb', line 5

def initialize(opts={})
  super
  set_image('explosion.png', opts)
  @initial_radius = opts[:initial_radius] || 10.0
  @final_radius = opts[:final_radius] || 100.0
  @duration = opts[:duration] || 3.0
  @fade_after = opts[:fade_after] || 2.5

  interpolate_alpha(:init => 255, :end => 0, :duration => @duration - @fade_after, :start_in => @fade_after)
  interpolate_saturation(:init => 0.0, :end => 1.0, :duration => 0.1, :loop => true)
  # Don't know why gosu changes my hue when only transforming
  # saturation so we keep it fixed, or give it a little space for
  # change
  interpolate_hue(:init => @color.hue-50, :end => @color.hue+50, :loop => true, :duration => 0.5)

  self.radius = @initial_radius
  # Expand or shrink the explosion
  interpolate_my( :radius, :init => @initial_radius, :end => @final_radius, :duration => @duration )

  @z = ZOrder::Explosion
  @elapsed_time = 0.0
end

Instance Method Details

#collision_radiusObject



37
38
39
# File 'lib/explosion.rb', line 37

def collision_radius
  @collision_radius
end

#radius=(radius) ⇒ Object



41
42
43
44
45
# File 'lib/explosion.rb', line 41

def radius=(radius)
  @collision_radius = radius
  @factor_x = 2*radius/@image.width
  @factor_y = 2*radius/@image.height
end

#to_sObject



47
48
49
50
51
52
53
# File 'lib/explosion.rb', line 47

def to_s
  ["@elapsed_time #{format('%.2f', @elapsed_time)}",
   "@color.alpha #{@color.alpha}",
   "@color.hue #{format('%.2f', @color.hue)}",
   "@color.saturation #{format('%.2f', @color.saturation)}",
   "@color.value #{format('%.2f', @color.value)}"]
end

#updateObject



28
29
30
31
32
33
34
35
# File 'lib/explosion.rb', line 28

def update
  # Note to self: It's important to call super!
  super
  if @elapsed_time > @duration
    die
  end
  @elapsed_time += dt
end