summaryrefslogtreecommitdiffhomepage
path: root/lib/felecs/stage_manager.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/felecs/stage_manager.rb')
-rw-r--r--lib/felecs/stage_manager.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/felecs/stage_manager.rb b/lib/felecs/stage_manager.rb
new file mode 100644
index 0000000..b2a5b7c
--- /dev/null
+++ b/lib/felecs/stage_manager.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module FelECS
+ module Stage
+ class << self
+ # Allows clearing of scenes and systems.
+ # Used internally by FelECS and shouldn't need to be ever used by developers
+ # @!visibility private
+ attr_writer :scenes
+
+ # Add any number of Scenes to the Stage
+ # @return [Boolean] +true+
+ def add(*scenes_to_add)
+ self.scenes |= scenes_to_add
+ self.scenes = scenes.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
+ true
+ end
+
+ # Clears all Scenes that were added to the Stage
+ # @return [Boolean] +true+
+ def clear
+ self.scenes.clear
+ true
+ end
+
+ # Executes one frame of the game. This executes all the Scenes added to the Stage in order of their priority.
+ # @return [Boolean] +true+
+ def call
+ self.scenes.each(&:call)
+ true
+ end
+
+ # Contains all the Scenes added to the Stage
+ # @return [Array<Scene>]
+ def scenes
+ @scenes ||= []
+ end
+ end
+ end
+end