diff options
| author | realtradam <[email protected]> | 2021-12-30 08:14:54 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-12-30 08:14:54 -0500 |
| commit | 6f8c1fea6d5925c2f1ccac2918a13cbf6eac9932 (patch) | |
| tree | 555d2924a3def097c175914170634b0ec63ad0c8 | |
| parent | daea6c2d2aa595abff590e73d7b34e338df705cf (diff) | |
| download | FelECS-6f8c1fea6d5925c2f1ccac2918a13cbf6eac9932.tar.gz FelECS-6f8c1fea6d5925c2f1ccac2918a13cbf6eac9932.zip | |
wip
| -rw-r--r-- | lib/felflame/scene_manager.rb | 13 | ||||
| -rw-r--r-- | lib/felflame/system_manager.rb | 13 | ||||
| -rw-r--r-- | spec/scene_manager_spec.rb | 10 |
3 files changed, 33 insertions, 3 deletions
diff --git a/lib/felflame/scene_manager.rb b/lib/felflame/scene_manager.rb index a9d3ac7..06a0dfa 100644 --- a/lib/felflame/scene_manager.rb +++ b/lib/felflame/scene_manager.rb @@ -34,8 +34,11 @@ module FelFlame def add(*systems_to_add) self.systems |= systems_to_add self.systems = systems.sort_by(&:priority) - FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self - true + systems_to_add.each do |system| + system.scenes |= [self] + end + #FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self + #true end # Removes any number of Systems from this Scene @@ -43,6 +46,9 @@ module FelFlame def remove(*systems_to_remove) self.systems -= systems_to_remove self.systems = systems.sort_by(&:priority) + systems_to_remove.each do |system| + system.scenes.delete system + end FelFlame::Stage.update_systems_list if FelFlame::Stage.scenes.include? self true end @@ -50,6 +56,9 @@ module FelFlame # 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 true diff --git a/lib/felflame/system_manager.rb b/lib/felflame/system_manager.rb index d936e8e..183b359 100644 --- a/lib/felflame/system_manager.rb +++ b/lib/felflame/system_manager.rb @@ -12,10 +12,20 @@ module FelFlame # @!visibility private attr_writer :addition_triggers, :removal_triggers, :attr_triggers + # Stores all the scenes this system is a part of. + attr_writer :scenes + + def scenes + @scenes ||= [] + end + def priority=(priority) @priority = priority - FelFlame::Stage.systems = FelFlame::Stage.systems.sort_by(&:priority) + scenes.each do |scene| + scene.systems = scene.systems.sort_by(&:priority) + end end + # Stores references to components or their managers that trigger # this component when a component or component from that manager # is added to an entity. @@ -73,6 +83,7 @@ module FelFlame @const_name = name @priority = priority @block = block + @scenes = [] end # Manually execute the system a single time diff --git a/spec/scene_manager_spec.rb b/spec/scene_manager_spec.rb index 65666c7..a9f1064 100644 --- a/spec/scene_manager_spec.rb +++ b/spec/scene_manager_spec.rb @@ -35,6 +35,9 @@ describe 'Scenes' do it 'can add Systems' do @scene.add @system2, @system3, @system1 + expect(@system1.scenes.length).to eq(1) + expect(@system2.scenes.length).to eq(1) + expect(@system3.scenes.length).to eq(1) expect(@scene.systems).to eq([@system1, @system2, @system3]) end @@ -47,6 +50,9 @@ describe 'Scenes' do it 'can clear Systems' do @scene.add @system2, @system3, @system1 @scene.clear + expect(@system1.scenes.length).to eq(0) + expect(@system2.scenes.length).to eq(0) + expect(@system3.scenes.length).to eq(0) expect(@scene.systems).to eq([]) end @@ -60,5 +66,9 @@ describe 'Scenes' do @scene.add @system2, @system3, @system1 @scene.call expect(@cmp.order).to eq([1, 2, 3]) + @cmp.order = [] + @system3.priority = -1 + @scene.call + expect(@cmp.order).to eq([3, 1, 2]) end end |
