Class: LampWithGenie::Genie

Inherits:
Object
  • Object
show all
Includes:
Positionable
Defined in:
lib/lamp_with_genie.rb

Constant Summary collapse

PADDING =
15

Instance Attribute Summary collapse

Attributes included from Positionable

#x, #y

Instance Method Summary collapse

Methods included from Positionable

#bottom, #right

Constructor Details

#initialize(window, flipped, lamp) ⇒ Genie

Returns a new instance of Genie.



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/lamp_with_genie.rb', line 41

def initialize(window, flipped, lamp)
  prefix = good? ? 'good' : 'evil'
  suffix = '_flipped' if flipped
  @image = Gosu::Image.new(window, "media/#{prefix}_genie#{suffix}.png")
  @sound = Gosu::Sample.new(window, "media/#{prefix}_genie.m4a")
  @lamp = lamp
  @y = -@image.height
  @flipped = flipped
  @captured = false
  @scale = 0.0
end

Instance Attribute Details

#imageObject (readonly)

Returns the value of attribute image.



39
40
41
# File 'lib/lamp_with_genie.rb', line 39

def image
  @image
end

Instance Method Details

#capture!Object



68
69
70
71
72
# File 'lib/lamp_with_genie.rb', line 68

def capture!
  return @captured if @captured
  @captured = true
  @sound.play
end

#captured?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/lamp_with_genie.rb', line 74

def captured?
  @captured
end

#drawObject



53
54
55
# File 'lib/lamp_with_genie.rb', line 53

def draw
  @image.draw(@x, @y, 3, @scale, @scale)
end

#evil?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/lamp_with_genie.rb', line 86

def evil?
  !good?
end

#good?Boolean

Returns:

  • (Boolean)


78
79
80
81
82
83
84
# File 'lib/lamp_with_genie.rb', line 78

def good?
  if defined? @good
    return @good
  else
    @good = rand(2) == 0
  end
end

#updateObject



57
58
59
60
61
62
63
64
65
66
# File 'lib/lamp_with_genie.rb', line 57

def update
  @scale += 0.03 if @scale <= 1
  if @flipped
    @x = @lamp.x + width - PADDING
    @y = @lamp.y - height * @scale
  else
    @x = (@lamp.x - (width + PADDING) * @scale)
    @y = (@lamp.y - height * @scale)
  end
end