diff options
| author | realtradam <[email protected]> | 2021-07-09 03:32:01 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-07-09 03:32:01 -0400 |
| commit | 0fbb48c7b0ef7070664945ef22840b0bfbfe9153 (patch) | |
| tree | 3c7334de78201dbddf2b66948f019935bfe57c33 /lib/felflame/stage_manager.rb | |
| parent | 8127cdd311fa343c7b0ce4a30e7cbc6d21027fcd (diff) | |
| download | FelECS-0fbb48c7b0ef7070664945ef22840b0bfbfe9153.tar.gz FelECS-0fbb48c7b0ef7070664945ef22840b0bfbfe9153.zip | |
gem conversion
Diffstat (limited to 'lib/felflame/stage_manager.rb')
| -rw-r--r-- | lib/felflame/stage_manager.rb | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/felflame/stage_manager.rb b/lib/felflame/stage_manager.rb new file mode 100644 index 0000000..87ee955 --- /dev/null +++ b/lib/felflame/stage_manager.rb @@ -0,0 +1,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 |
