summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-12-30 08:14:54 -0500
committerrealtradam <[email protected]>2021-12-30 08:14:54 -0500
commit6f8c1fea6d5925c2f1ccac2918a13cbf6eac9932 (patch)
tree555d2924a3def097c175914170634b0ec63ad0c8
parentdaea6c2d2aa595abff590e73d7b34e338df705cf (diff)
downloadFelECS-6f8c1fea6d5925c2f1ccac2918a13cbf6eac9932.tar.gz
FelECS-6f8c1fea6d5925c2f1ccac2918a13cbf6eac9932.zip
wip
-rw-r--r--lib/felflame/scene_manager.rb13
-rw-r--r--lib/felflame/system_manager.rb13
-rw-r--r--spec/scene_manager_spec.rb10
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