summaryrefslogtreecommitdiffhomepage
path: root/lib/felflame/scene_manager.rb
diff options
context:
space:
mode:
author_Tradam <[email protected]>2022-01-03 08:26:24 -0500
committerGitHub <[email protected]>2022-01-03 08:26:24 -0500
commita0f792d8feadf919290b8349dbc0eac143545927 (patch)
treeee70c5357d5969caaed08446c32746e656b223e6 /lib/felflame/scene_manager.rb
parentb535a6b1bd8019dbeba17f3853b338383208c9b3 (diff)
downloadFelECS-4.0.0.tar.gz
FelECS-4.0.0.zip
Major 4.0 Update (#16)v4.0.04.0.0
See Changelog
Diffstat (limited to 'lib/felflame/scene_manager.rb')
-rw-r--r--lib/felflame/scene_manager.rb35
1 files changed, 23 insertions, 12 deletions
diff --git a/lib/felflame/scene_manager.rb b/lib/felflame/scene_manager.rb
index 315dd55..0024815 100644
--- a/lib/felflame/scene_manager.rb
+++ b/lib/felflame/scene_manager.rb
@@ -1,19 +1,27 @@
-class FelFlame
- class Scenes
- # The Constant name assigned to this Scene
- attr_reader :const_name
+# frozen_string_literal: true
+module FelFlame
+ class Scenes
# 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
+ # How early this Scene should be executed in a list of Scenes
+ attr_accessor :priority
+
+ def priority=(priority)
+ @priority = priority
+ FelFlame::Stage.scenes = FelFlame::Stage.scenes.sort_by(&:priority)
+ priority
+ end
+
# Create a new Scene using the name given
# @param name [String] String format must follow requirements of a constant
- def initialize(name)
+ def initialize(name, priority: 0)
+ self.priority = priority
FelFlame::Scenes.const_set(name, self)
- @const_name = name
end
# The list of Systems this Scene contains
@@ -33,25 +41,28 @@ class FelFlame
# @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
+ self.systems = systems.sort_by(&:priority)
+ systems_to_add.each do |system|
+ system.scenes |= [self]
+ end
true
end
- # Removes any number of SystemS from this Scene
+ # 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.each do |system|
+ system.scenes.delete self
+ end
systems.clear
- FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self
+ # FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self
true
end
end