blob: 87ee955e620c10656818bea09fe5e5a694b60ee6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
class FelFlame
class Stage
class <<self
# Allows clearing of scenes and systems.
# Used internally by FelFlame and shouldn't need to be ever used by developers
# @!visibility private
attr_writer :scenes, :systems
# Add any number of Scenes to the Stage
# @return [Boolean] +true+
def add(*scenes_to_add)
self.scenes |= scenes_to_add
scenes_to_add.each do |scene|
self.systems |= scene.systems
end
systems.sort_by!(&:priority)
true
end
# Remove any number of Scenes from the Stage
# @return [Boolean] +true+
def remove(*scenes_to_remove)
self.scenes -= scenes_to_remove
update_systems_list
true
end
# Updates the list of systems from the Scenes added to the Stage and make sure they are ordered correctly
# This is used internally by FelFlame and shouldn't need to be ever used by developers
# @return [Boolean] +true+
# @!visibility private
def update_systems_list
systems.clear
scenes.each do |scene|
self.systems |= scene.systems
end
systems.sort_by!(&:priority)
true
end
# Clears all Scenes that were added to the Stage
# @return [Boolean] +true+
def clear
systems.clear
scenes.clear
true
end
# Executes one frame of the game. This executes all the Systems in the Scenes added to the Stage. Systems that exist in two or more different Scenes will still only get executed once.
# @return [Boolean] +true+
def call
systems.each(&:call)
true
end
# Contains all the Scenes added to the Stage
# @return [Array<Scene>]
def scenes
@scenes ||= []
end
# Stores systems in the order the stage manager needs to call them
# This method should generally only need to be used internally and not by a game developer
# @!visibility private
def systems
@systems ||= []
end
end
end
end
|