Class: Scene

Inherits:
Object
  • Object
show all
Defined in:
lib/rubysketch/solitaire/common/scene.rb

Direct Known Subclasses

Background, Dialog, Klondike, RootScene, Start, TransitionEffect

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = self.class.name, *scenes) ⇒ Scene

Returns a new instance of Scene.



6
7
8
9
10
11
12
13
# File 'lib/rubysketch/solitaire/common/scene.rb', line 6

def initialize(name = self.class.name, *scenes)
  @name     = name
  @scenes   = []
  @active   = self.class == RootScene
  @prevSize = [width, height]
  resized *@prevSize
  scenes.each {|scene| add scene}
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



15
16
17
# File 'lib/rubysketch/solitaire/common/scene.rb', line 15

def name
  @name
end

#parentObject

Returns the value of attribute parent.



15
16
17
# File 'lib/rubysketch/solitaire/common/scene.rb', line 15

def parent
  @parent
end

Instance Method Details

#activatedObject



97
98
99
100
101
# File 'lib/rubysketch/solitaire/common/scene.rb', line 97

def activated()
  @active = true
  @scenes.each {|scene| scene.activated}
  sprites.each {|sprite| addSprite sprite}
end

#active?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/rubysketch/solitaire/common/scene.rb', line 71

def active?()
  @active
end

#add(scene) ⇒ Object



23
24
25
26
27
28
# File 'lib/rubysketch/solitaire/common/scene.rb', line 23

def add(scene)
  @scenes.push scene
  scene.parent = self
  scene.activated if active?
  scene
end

#deactivatedObject



103
104
105
106
107
# File 'lib/rubysketch/solitaire/common/scene.rb', line 103

def deactivated()
  sprites.each {|sprite| removeSprite sprite}
  @scenes.each {|scene| scene.deactivated}
  @active = false
end

#drawObject



83
84
85
86
87
88
89
90
91
92
# File 'lib/rubysketch/solitaire/common/scene.rb', line 83

def draw()
  update
  @scenes.each do |scene|
    push {scene.draw}
  end
  push do
    blendMode ADD
    particle.draw
  end
end

#emitParticle(x, y, w, h, sec = nil, &block) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/rubysketch/solitaire/common/scene.rb', line 48

def emitParticle(x, y, w, h, sec = nil, &block)
  par   = particle.new x, y, w, h
  start = now
  par.update do
    time   = now - start
    t      = sec ? time / sec : nil
    result = block&.call time, t
    if result == false || (t || 1) >= 1
      par.update {}
      par.delete
    end
  end
  par
end

#focusChanged(focus) ⇒ Object



109
110
111
# File 'lib/rubysketch/solitaire/common/scene.rb', line 109

def focusChanged(focus)
  @scenes.each {|scene| scene.focusChanged focus}
end

#mouseDragged(x, y, dx, dy) ⇒ Object



125
126
127
# File 'lib/rubysketch/solitaire/common/scene.rb', line 125

def mouseDragged(x, y, dx, dy)
  @scenes.each {|scene| scene.mouseDragged x, y, dx, dy}
end

#mouseMoved(x, y, dx, dy) ⇒ Object



121
122
123
# File 'lib/rubysketch/solitaire/common/scene.rb', line 121

def mouseMoved(x, y, dx, dy)
  @scenes.each {|scene| scene.mouseMoved x, y, dx, dy}
end

#mousePressed(x, y, button) ⇒ Object



113
114
115
# File 'lib/rubysketch/solitaire/common/scene.rb', line 113

def mousePressed(x, y, button)
  @scenes.each {|scene| scene.mousePressed x, y, button}
end

#mouseReleased(x, y, button) ⇒ Object



117
118
119
# File 'lib/rubysketch/solitaire/common/scene.rb', line 117

def mouseReleased(x, y, button)
  @scenes.each {|scene| scene.mouseReleased x, y, button}
end

#particleObject



67
68
69
# File 'lib/rubysketch/solitaire/common/scene.rb', line 67

def particle()
  @particle ||= Particle.new
end

#pauseObject



17
18
# File 'lib/rubysketch/solitaire/common/scene.rb', line 17

def pause()
end

#remove(scene) ⇒ Object



30
31
32
33
34
35
# File 'lib/rubysketch/solitaire/common/scene.rb', line 30

def remove(scene)
  @scenes.delete scene
  scene.deactivated if active?
  scene.parent = nil
  scene
end

#resized(w, h) ⇒ Object



94
95
# File 'lib/rubysketch/solitaire/common/scene.rb', line 94

def resized(w, h)
end

#resumeObject



20
21
# File 'lib/rubysketch/solitaire/common/scene.rb', line 20

def resume()
end

#spritesObject



63
64
65
# File 'lib/rubysketch/solitaire/common/scene.rb', line 63

def sprites()
  particle.sprites
end

#transition(to, effect = nil, *args, **kwargs, &block) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/rubysketch/solitaire/common/scene.rb', line 37

def transition(to, effect = nil, *args, **kwargs, &block)
  if effect
    add effect.new(to, *args, **kwargs, &block)
  else
    parent.add to
    parent.remove self
    block.call if block
  end
  to
end

#updateObject



75
76
77
78
79
80
81
# File 'lib/rubysketch/solitaire/common/scene.rb', line 75

def update()
  size = [width, height]
  if size != @prevSize
    resized(*size)
    @prevSize = size
  end
end