diff options
| author | _Tradam <[email protected]> | 2022-01-03 08:26:24 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-01-03 08:26:24 -0500 |
| commit | a0f792d8feadf919290b8349dbc0eac143545927 (patch) | |
| tree | ee70c5357d5969caaed08446c32746e656b223e6 /lib/felflame/scene_manager.rb | |
| parent | b535a6b1bd8019dbeba17f3853b338383208c9b3 (diff) | |
| download | FelECS-v4.0.0.tar.gz FelECS-v4.0.0.zip | |
See Changelog
Diffstat (limited to 'lib/felflame/scene_manager.rb')
| -rw-r--r-- | lib/felflame/scene_manager.rb | 35 |
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 |
