summaryrefslogtreecommitdiffhomepage
path: root/lib/felflame/scene_manager.rb
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-07-09 03:32:01 -0400
committerrealtradam <[email protected]>2021-07-09 03:32:01 -0400
commit0fbb48c7b0ef7070664945ef22840b0bfbfe9153 (patch)
tree3c7334de78201dbddf2b66948f019935bfe57c33 /lib/felflame/scene_manager.rb
parent8127cdd311fa343c7b0ce4a30e7cbc6d21027fcd (diff)
downloadFelECS-0fbb48c7b0ef7070664945ef22840b0bfbfe9153.tar.gz
FelECS-0fbb48c7b0ef7070664945ef22840b0bfbfe9153.zip
gem conversion
Diffstat (limited to 'lib/felflame/scene_manager.rb')
-rw-r--r--lib/felflame/scene_manager.rb58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/felflame/scene_manager.rb b/lib/felflame/scene_manager.rb
new file mode 100644
index 0000000..315dd55
--- /dev/null
+++ b/lib/felflame/scene_manager.rb
@@ -0,0 +1,58 @@
+class FelFlame
+ class Scenes
+ # The Constant name assigned to this Scene
+ attr_reader :const_name
+
+ # Allows overwriting the storage of systems, such as for clearing.
+ # This method should generally only need to be used internally and
+ # not by a game developer/
+ # @!visibility private
+ attr_writer :systems
+
+ # Create a new Scene using the name given
+ # @param name [String] String format must follow requirements of a constant
+ def initialize(name)
+ FelFlame::Scenes.const_set(name, self)
+ @const_name = name
+ end
+
+ # The list of Systems this Scene contains
+ # @return [Array<System>]
+ def systems
+ @systems ||= []
+ end
+
+ # Execute all systems in this Scene, in the order of their priority
+ # @return [Boolean] +true+
+ def call
+ systems.each(&:call)
+ true
+ end
+
+ # Adds any number of Systems to this Scene
+ # @return [Boolean] +true+
+ def add(*systems_to_add)
+ self.systems |= systems_to_add
+ systems.sort_by!(&:priority)
+ FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self
+ true
+ end
+
+ # Removes any number of SystemS from this Scene
+ # @return [Boolean] +true+
+ def remove(*systems_to_remove)
+ self.systems -= systems_to_remove
+ systems.sort_by!(&:priority)
+ FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self
+ true
+ end
+
+ # Removes all Systems from this Scene
+ # @return [Boolean] +true+
+ def clear
+ systems.clear
+ FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self
+ true
+ end
+ end
+end