summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--component_manager.rb40
-rw-r--r--docs/FelFlame.html2
-rw-r--r--docs/FelFlame/Components.html24
-rw-r--r--docs/FelFlame/Entities.html2
-rw-r--r--docs/FelFlame/Helper.html2
-rw-r--r--docs/FelFlame/Helper/ComponentManager.html363
-rw-r--r--docs/FelFlame/Helper/ComponentManagerTemplate.html1042
-rw-r--r--docs/FelFlame/Systems.html403
-rw-r--r--docs/_index.html2
-rw-r--r--docs/file.README.html2
-rw-r--r--docs/index.html2
-rw-r--r--docs/method_list.html42
-rw-r--r--docs/top-level-namespace.html2
-rw-r--r--spec/system_manager_spec.rb317
-rw-r--r--system_manager.rb110
15 files changed, 1090 insertions, 1265 deletions
diff --git a/component_manager.rb b/component_manager.rb
index a29aac8..14975e9 100644
--- a/component_manager.rb
+++ b/component_manager.rb
@@ -30,7 +30,12 @@ class FelFlame
FelFlame::Components.const_get(component_name).attr_accessor attr
end
attrs_with_defaults.each do |attr, _default|
- FelFlame::Components.const_get(component_name).attr_accessor attr
+ #FelFlame::Components.const_get(component_name).attr_accessor attr
+ FelFlame::Components.const_get(component_name).attr_reader attr
+ FelFlame::Components.const_get(component_name).define_method("#{attr}=") do |value|
+ attr_changed_trigger_systems(attr) unless value.equal? send(attr)
+ instance_variable_set("@#{attr}", value)
+ end
end
FelFlame::Components.const_get(component_name).define_method(:set_defaults) do
attrs_with_defaults.each do |attr, default|
@@ -56,18 +61,20 @@ class FelFlame
# @return [Integer]
attr_accessor :id
- attr_writer :addition_triggers
+ attr_writer :addition_triggers, :removal_triggers, :attr_triggers
def addition_triggers
@addition_triggers ||= []
end
- attr_writer :removal_triggers
-
def removal_triggers
@removal_triggers ||= []
end
+ def attr_triggers
+ @attr_triggers ||= {}
+ end
+
# Creates a new component and sets the values of the attributes given to it. If an attritbute is not passed then it will remain as the default.
# @param attrs [Keyword: Value] You can pass any number of Keyword-Value pairs
# @return [Component]
@@ -92,18 +99,20 @@ class FelFlame
end
class <<self
- attr_writer :addition_triggers
+ attr_writer :addition_triggers, :removal_triggers, :attr_triggers
def addition_triggers
@addition_triggers ||= []
end
- attr_writer :removal_triggers
-
def removal_triggers
@removal_triggers ||= []
end
+ def attr_triggers
+ @attr_triggers ||= {}
+ end
+
# @return [Array<Component>] Array of all Components that belong to a given component manager
# @!visibility private
def data
@@ -149,6 +158,19 @@ class FelFlame
end
end
+ # Execute systems that have been added to execute on variable change
+ def attr_changed_trigger_systems(attr)
+ systems_to_execute = self.class.attr_triggers[attr]
+ systems_to_execute = [] if systems_to_execute.nil?
+
+ systems_to_execute |= attr_triggers[attr] unless attr_triggers[attr].nil?
+
+ systems_to_execute.sort_by(&:priority).reverse.each(&:call)
+ #self.attr_triggers.each do |system|
+ # systems_to_execute |= [system]
+ #end
+ end
+
# Removes this component from the list and purges all references to this Component from other Entities, as well as its {id ID} and data.
# @return [Boolean] true.
def delete
@@ -171,9 +193,11 @@ class FelFlame
# @return [Hash] A hash, where all the keys are attributes linked to their respective values.
def attrs
- instance_variables.each_with_object({}) do |key, final|
+ return_hash = instance_variables.each_with_object({}) do |key, final|
final[key.to_s.delete_prefix('@').to_sym] = instance_variable_get(key)
end
+ return_hash.delete(:attr_triggers)
+ return_hash
end
# Export all data into a JSON String, which could then later be loaded or saved to a file
diff --git a/docs/FelFlame.html b/docs/FelFlame.html
index 13eb3f1..27527e4 100644
--- a/docs/FelFlame.html
+++ b/docs/FelFlame.html
@@ -193,7 +193,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:52 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/FelFlame/Components.html b/docs/FelFlame/Components.html
index 3472ea0..5dbc160 100644
--- a/docs/FelFlame/Components.html
+++ b/docs/FelFlame/Components.html
@@ -233,12 +233,12 @@
<pre class="lines">
-45
-46
-47</pre>
+50
+51
+52</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 45</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 50</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='id identifier rubyid_constants'>constants</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
@@ -369,7 +369,12 @@
38
39
40
-41</pre>
+41
+42
+43
+44
+45
+46</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'component_manager.rb', line 23</span>
@@ -384,7 +389,12 @@
<span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Components (class)">Components</a></span></span><span class='period'>.</span><span class='id identifier rubyid_const_get'>const_get</span><span class='lparen'>(</span><span class='id identifier rubyid_component_name'>component_name</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='id identifier rubyid_attr'>attr</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_attrs_with_defaults'>attrs_with_defaults</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='comma'>,</span> <span class='id identifier rubyid__default'>_default</span><span class='op'>|</span>
- <span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Components (class)">Components</a></span></span><span class='period'>.</span><span class='id identifier rubyid_const_get'>const_get</span><span class='lparen'>(</span><span class='id identifier rubyid_component_name'>component_name</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='id identifier rubyid_attr'>attr</span>
+ <span class='comment'>#FelFlame::Components.const_get(component_name).attr_accessor attr
+</span> <span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Components (class)">Components</a></span></span><span class='period'>.</span><span class='id identifier rubyid_const_get'>const_get</span><span class='lparen'>(</span><span class='id identifier rubyid_component_name'>component_name</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_attr_reader'>attr_reader</span> <span class='id identifier rubyid_attr'>attr</span>
+ <span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Components (class)">Components</a></span></span><span class='period'>.</span><span class='id identifier rubyid_const_get'>const_get</span><span class='lparen'>(</span><span class='id identifier rubyid_component_name'>component_name</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_attr'>attr</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
+ <span class='id identifier rubyid_attr_changed_trigger_systems'>attr_changed_trigger_systems</span><span class='lparen'>(</span><span class='id identifier rubyid_attr'>attr</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_equal?'>equal?</span> <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_attr'>attr</span><span class='rparen'>)</span>
+ <span class='id identifier rubyid_instance_variable_set'>instance_variable_set</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>@</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_attr'>attr</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
+ <span class='kw'>end</span>
<span class='kw'>end</span>
<span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Components (class)">Components</a></span></span><span class='period'>.</span><span class='id identifier rubyid_const_get'>const_get</span><span class='lparen'>(</span><span class='id identifier rubyid_component_name'>component_name</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_define_method'>define_method</span><span class='lparen'>(</span><span class='symbol'>:set_defaults</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_attrs_with_defaults'>attrs_with_defaults</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span><span class='op'>|</span>
@@ -403,7 +413,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:52 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/FelFlame/Entities.html b/docs/FelFlame/Entities.html
index e91c2c0..bf716c0 100644
--- a/docs/FelFlame/Entities.html
+++ b/docs/FelFlame/Entities.html
@@ -1224,7 +1224,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:52 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/FelFlame/Helper.html b/docs/FelFlame/Helper.html
index 19f40b6..e924d44 100644
--- a/docs/FelFlame/Helper.html
+++ b/docs/FelFlame/Helper.html
@@ -132,7 +132,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:52 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/FelFlame/Helper/ComponentManager.html b/docs/FelFlame/Helper/ComponentManager.html
index 425d91b..cce8c36 100644
--- a/docs/FelFlame/Helper/ComponentManager.html
+++ b/docs/FelFlame/Helper/ComponentManager.html
@@ -145,6 +145,31 @@
<li class="public ">
<span class="summary_signature">
+ <a href="#attr_triggers-class_method" title="attr_triggers (class method)">.<strong>attr_triggers</strong> &#x21d2; Object </a>
+
+
+
+ </span>
+
+
+
+
+
+
+
+
+
+
+
+
+ <span class="summary_desc"><div class='inline'></div></span>
+
+</li>
+
+
+ <li class="public ">
+ <span class="summary_signature">
+
<a href="#removal_triggers-class_method" title="removal_triggers (class method)">.<strong>removal_triggers</strong> &#x21d2; Object </a>
@@ -200,6 +225,31 @@
<li class="public ">
<span class="summary_signature">
+ <a href="#attr_triggers-instance_method" title="#attr_triggers (instance method)">#<strong>attr_triggers</strong> &#x21d2; Object </a>
+
+
+
+ </span>
+
+
+
+
+
+
+
+
+
+
+
+
+ <span class="summary_desc"><div class='inline'></div></span>
+
+</li>
+
+
+ <li class="public ">
+ <span class="summary_signature">
+
<a href="#id-instance_method" title="#id (instance method)">#<strong>id</strong> &#x21d2; Integer </a>
@@ -322,6 +372,30 @@
<li class="public ">
<span class="summary_signature">
+ <a href="#attr_changed_trigger_systems-instance_method" title="#attr_changed_trigger_systems (instance method)">#<strong>attr_changed_trigger_systems</strong>(attr) &#x21d2; Object </a>
+
+
+
+ </span>
+
+
+
+
+
+
+
+
+
+ <span class="summary_desc"><div class='inline'>
+<p>Execute systems that have been added to execute on variable change.</p>
+</div></span>
+
+</li>
+
+
+ <li class="public ">
+ <span class="summary_signature">
+
<a href="#attrs-instance_method" title="#attrs (instance method)">#<strong>attrs</strong> &#x21d2; Hash </a>
@@ -541,13 +615,6 @@
<pre class="lines">
-74
-75
-76
-77
-78
-79
-80
81
82
83
@@ -559,10 +626,17 @@
89
90
91
-92</pre>
+92
+93
+94
+95
+96
+97
+98
+99</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 74</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 81</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_attrs'>attrs</span><span class='rparen'>)</span>
<span class='comment'># Prepare the object
@@ -610,12 +684,12 @@
<pre class="lines">
-97
-98
-99</pre>
+104
+105
+106</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 97</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 104</span>
<span class='kw'>def</span> <span class='id identifier rubyid_addition_triggers'>addition_triggers</span>
<span class='ivar'>@addition_triggers</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
@@ -626,6 +700,38 @@
</div>
+ <span id="attr_triggers=-class_method"></span>
+ <div class="method_details ">
+ <h3 class="signature " id="attr_triggers-class_method">
+
+ .<strong>attr_triggers</strong> &#x21d2; <tt>Object</tt>
+
+
+
+
+
+</h3><table class="source_code">
+ <tr>
+ <td>
+ <pre class="lines">
+
+
+112
+113
+114</pre>
+ </td>
+ <td>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 112</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_attr_triggers'>attr_triggers</span>
+ <span class='ivar'>@attr_triggers</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+ </td>
+ </tr>
+</table>
+</div>
+
+
<span id="removal_triggers=-class_method"></span>
<div class="method_details ">
<h3 class="signature " id="removal_triggers-class_method">
@@ -642,12 +748,12 @@
<pre class="lines">
-103
-104
-105</pre>
+108
+109
+110</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 103</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 108</span>
<span class='kw'>def</span> <span class='id identifier rubyid_removal_triggers'>removal_triggers</span>
<span class='ivar'>@removal_triggers</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
@@ -679,12 +785,12 @@
<pre class="lines">
-61
-62
-63</pre>
+66
+67
+68</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 61</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 66</span>
<span class='kw'>def</span> <span class='id identifier rubyid_addition_triggers'>addition_triggers</span>
<span class='ivar'>@addition_triggers</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
@@ -695,6 +801,38 @@
</div>
+ <span id="attr_triggers=-instance_method"></span>
+ <div class="method_details ">
+ <h3 class="signature " id="attr_triggers-instance_method">
+
+ #<strong>attr_triggers</strong> &#x21d2; <tt>Object</tt>
+
+
+
+
+
+</h3><table class="source_code">
+ <tr>
+ <td>
+ <pre class="lines">
+
+
+74
+75
+76</pre>
+ </td>
+ <td>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 74</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_attr_triggers'>attr_triggers</span>
+ <span class='ivar'>@attr_triggers</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+ </td>
+ </tr>
+</table>
+</div>
+
+
<span id="id=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="id-instance_method">
@@ -735,12 +873,12 @@
<pre class="lines">
-57
-58
-59</pre>
+62
+63
+64</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 57</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 62</span>
<span class='kw'>def</span> <span class='id identifier rubyid_id'>id</span>
<span class='ivar'>@id</span>
@@ -767,12 +905,12 @@
<pre class="lines">
-67
-68
-69</pre>
+70
+71
+72</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 67</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 70</span>
<span class='kw'>def</span> <span class='id identifier rubyid_removal_triggers'>removal_triggers</span>
<span class='ivar'>@removal_triggers</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
@@ -857,12 +995,12 @@
<pre class="lines">
-120
-121
-122</pre>
+129
+130
+131</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 120</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 129</span>
<span class='kw'>def</span> <span class='op'>[]</span><span class='lparen'>(</span><span class='id identifier rubyid_component_id'>component_id</span><span class='rparen'>)</span>
<span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_id'>component_id</span><span class='rbracket'>]</span>
@@ -911,12 +1049,12 @@
<pre class="lines">
-127
-128
-129</pre>
+136
+137
+138</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 127</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 136</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
@@ -933,7 +1071,64 @@
<div class="method_details first">
- <h3 class="signature first" id="attrs-instance_method">
+ <h3 class="signature first" id="attr_changed_trigger_systems-instance_method">
+
+ #<strong>attr_changed_trigger_systems</strong>(attr) &#x21d2; <tt>Object</tt>
+
+
+
+
+
+</h3><div class="docstring">
+ <div class="discussion">
+
+<p>Execute systems that have been added to execute on variable change</p>
+
+
+ </div>
+</div>
+<div class="tags">
+
+
+</div><table class="source_code">
+ <tr>
+ <td>
+ <pre class="lines">
+
+
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172</pre>
+ </td>
+ <td>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 162</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_attr_changed_trigger_systems'>attr_changed_trigger_systems</span><span class='lparen'>(</span><span class='id identifier rubyid_attr'>attr</span><span class='rparen'>)</span>
+ <span class='id identifier rubyid_systems_to_execute'>systems_to_execute</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span>
+ <span class='id identifier rubyid_systems_to_execute'>systems_to_execute</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_systems_to_execute'>systems_to_execute</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+
+ <span class='id identifier rubyid_systems_to_execute'>systems_to_execute</span> <span class='op'>|=</span> <span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span> <span class='kw'>unless</span> <span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+
+ <span class='id identifier rubyid_systems_to_execute'>systems_to_execute</span><span class='period'>.</span><span class='id identifier rubyid_sort_by'>sort_by</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:priority</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_reverse'>reverse</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:call</span><span class='rparen'>)</span>
+ <span class='comment'>#self.attr_triggers.each do |system|
+</span> <span class='comment'># systems_to_execute |= [system]
+</span> <span class='comment'>#end
+</span><span class='kw'>end</span></pre>
+ </td>
+ </tr>
+</table>
+</div>
+
+ <div class="method_details ">
+ <h3 class="signature " id="attrs-instance_method">
#<strong>attrs</strong> &#x21d2; <tt>Hash</tt>
@@ -976,19 +1171,23 @@
<pre class="lines">
-173
-174
-175
-176
-177</pre>
+195
+196
+197
+198
+199
+200
+201</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 173</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 195</span>
<span class='kw'>def</span> <span class='id identifier rubyid_attrs'>attrs</span>
- <span class='id identifier rubyid_instance_variables'>instance_variables</span><span class='period'>.</span><span class='id identifier rubyid_each_with_object'>each_with_object</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_final'>final</span><span class='op'>|</span>
+ <span class='id identifier rubyid_return_hash'>return_hash</span> <span class='op'>=</span> <span class='id identifier rubyid_instance_variables'>instance_variables</span><span class='period'>.</span><span class='id identifier rubyid_each_with_object'>each_with_object</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_final'>final</span><span class='op'>|</span>
<span class='id identifier rubyid_final'>final</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_delete_prefix'>delete_prefix</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>@</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_instance_variable_get'>instance_variable_get</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
<span class='kw'>end</span>
+ <span class='id identifier rubyid_return_hash'>return_hash</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='symbol'>:attr_triggers</span><span class='rparen'>)</span>
+ <span class='id identifier rubyid_return_hash'>return_hash</span>
<span class='kw'>end</span></pre>
</td>
</tr>
@@ -1039,26 +1238,26 @@
<pre class="lines">
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170</pre>
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 154</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 176</span>
<span class='kw'>def</span> <span class='id identifier rubyid_delete'>delete</span>
<span class='id identifier rubyid_addition_triggers'>addition_triggers</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_system'>system</span><span class='op'>|</span>
@@ -1121,12 +1320,12 @@
<pre class="lines">
-140
-141
-142</pre>
+149
+150
+151</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 140</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 149</span>
<span class='kw'>def</span> <span class='id identifier rubyid_entities'>entities</span>
<span class='ivar'>@entities</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
@@ -1175,12 +1374,12 @@
<pre class="lines">
-134
-135
-136</pre>
+143
+144
+145</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 134</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 143</span>
<span class='kw'>def</span> <span class='id identifier rubyid_to_i'>to_i</span>
<span class='id identifier rubyid_id'>id</span>
@@ -1234,12 +1433,12 @@
<pre class="lines">
-182
-183
-184</pre>
+206
+207
+208</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 182</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 206</span>
<span class='kw'>def</span> <span class='id identifier rubyid_to_json'>to_json</span>
<span class='comment'># should return a json or hash of all data in this component
@@ -1293,14 +1492,14 @@
<pre class="lines">
-146
-147
-148
-149
-150</pre>
+155
+156
+157
+158
+159</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 146</span>
+ <pre class="code"><span class="info file"># File 'component_manager.rb', line 155</span>
<span class='kw'>def</span> <span class='id identifier rubyid_update_attrs'>update_attrs</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
@@ -1317,7 +1516,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:52 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/FelFlame/Helper/ComponentManagerTemplate.html b/docs/FelFlame/Helper/ComponentManagerTemplate.html
deleted file mode 100644
index b97dff0..0000000
--- a/docs/FelFlame/Helper/ComponentManagerTemplate.html
+++ /dev/null
@@ -1,1042 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<title>
- Class: FelFlame::Helper::ComponentManagerTemplate
-
- &mdash; Documentation by YARD 0.9.26
-
-</title>
-
- <link rel="stylesheet" href="../../css/style.css" type="text/css" />
-
- <link rel="stylesheet" href="../../css/common.css" type="text/css" />
-
-<script type="text/javascript">
- pathId = "FelFlame::Helper::ComponentManagerTemplate";
- relpath = '../../';
-</script>
-
-
- <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
-
- <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
-
-
- </head>
- <body>
- <div class="nav_wrap">
- <iframe id="nav" src="../../class_list.html?1"></iframe>
- <div id="resizer"></div>
- </div>
-
- <div id="main" tabindex="-1">
- <div id="header">
- <div id="menu">
-
- <a href="../../_index.html">Index (C)</a> &raquo;
- <span class='title'><span class='object_link'><a href="../../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Helper.html" title="FelFlame::Helper (class)">Helper</a></span></span>
- &raquo;
- <span class="title">ComponentManagerTemplate</span>
-
-</div>
-
- <div id="search">
-
- <a class="full_list_link" id="class_list_link"
- href="../../class_list.html">
-
- <svg width="24" height="24">
- <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
- <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
- <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
- </svg>
- </a>
-
-</div>
- <div class="clear"></div>
- </div>
-
- <div id="content"><h1>Class: FelFlame::Helper::ComponentManagerTemplate
-
-
-
-</h1>
-<div class="box_info">
-
- <dl>
- <dt>Inherits:</dt>
- <dd>
- <span class="inheritName">Object</span>
-
- <ul class="fullTree">
- <li>Object</li>
-
- <li class="next">FelFlame::Helper::ComponentManagerTemplate</li>
-
- </ul>
- <a href="#" class="inheritanceTree">show all</a>
-
- </dd>
- </dl>
-
-
-
-
-
-
-
-
-
-
-
- <dl>
- <dt>Defined in:</dt>
- <dd>component_manager.rb</dd>
- </dl>
-
-</div>
-
-<h2>Overview</h2><div class="docstring">
- <div class="discussion">
-
-<p>Component Managers are what is used to create individual components which can be attached to entities. When a Component is created from a Component Manager that has accessors given to it, you can set or get the values of those accessors using standard ruby message sending (e.g `@component.var = 5`), or by using the <span class='object_link'><a href="#attrs-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#attrs (method)">#attrs</a></span> and <span class='object_link'><a href="#update_attrs-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#update_attrs (method)">#update_attrs</a></span> methods instead.</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-
-</div>
-
-
-
- <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
- <ul class="summary">
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#id-instance_method" title="#id (instance method)">#<strong>id</strong> &#x21d2; Object </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Holds the <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">unique ID</a></span> of a component.</p>
-</div></span>
-
-</li>
-
-
- </ul>
-
-
-
-
-
- <h2>
- Class Method Summary
- <small><a href="#" class="summary_toggle">collapse</a></small>
- </h2>
-
- <ul class="summary">
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#[]-class_method" title="[] (class method)">.<strong>[]</strong>(component_id) &#x21d2; Component </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Gets a Component from the given <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">unique ID</a></span>.</p>
-</div></span>
-
-</li>
-
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#each-class_method" title="each (class method)">.<strong>each</strong> &#x21d2; Enumerator </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Iterates over all components within the component manager.</p>
-</div></span>
-
-</li>
-
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#new-class_method" title="new (class method)">.<strong>new</strong>(**attrs) &#x21d2; Object </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Creates a new component and sets the values of the attributes given to it.</p>
-</div></span>
-
-</li>
-
-
- </ul>
-
- <h2>
- Instance Method Summary
- <small><a href="#" class="summary_toggle">collapse</a></small>
- </h2>
-
- <ul class="summary">
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#attrs-instance_method" title="#attrs (instance method)">#<strong>attrs</strong> &#x21d2; Hash </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Returns a hash, where all the keys are attributes linked to their respective values.</p>
-</div></span>
-
-</li>
-
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#delete-instance_method" title="#delete (instance method)">#<strong>delete</strong> &#x21d2; Boolean </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Removes this component from the list and purges all references to this Component from other Entities, as well as its <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">ID</a></span> and data.</p>
-</div></span>
-
-</li>
-
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#linked_entities-instance_method" title="#linked_entities (instance method)">#<strong>linked_entities</strong> &#x21d2; Array </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>A list of components that are linked to the component.</p>
-</div></span>
-
-</li>
-
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#to_i-instance_method" title="#to_i (instance method)">#<strong>to_i</strong> &#x21d2; Integer </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>An alias for the ID reader.</p>
-</div></span>
-
-</li>
-
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#to_json-instance_method" title="#to_json (instance method)">#<strong>to_json</strong> &#x21d2; String </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Export all data into a JSON String, which could then later be loaded or saved to a file TODO: This function is not yet complete.</p>
-</div></span>
-
-</li>
-
-
- <li class="public ">
- <span class="summary_signature">
-
- <a href="#update_attrs-instance_method" title="#update_attrs (instance method)">#<strong>update_attrs</strong>(**opts) &#x21d2; Object </a>
-
-
-
- </span>
-
-
-
-
-
-
-
-
-
- <span class="summary_desc"><div class='inline'>
-<p>Update attribute values using a hash or keywords.</p>
-</div></span>
-
-</li>
-
-
- </ul>
-
-
-
- <div id="instance_attr_details" class="attr_details">
- <h2>Instance Attribute Details</h2>
-
-
- <span id="id=-instance_method"></span>
- <div class="method_details first">
- <h3 class="signature first" id="id-instance_method">
-
- #<strong>id</strong> &#x21d2; <tt>Object</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Holds the <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">unique ID</a></span> of a component. The <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">ID</a></span> is only unique within the scope of the component manager it was created from.</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-43
-44
-45</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 43</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_id'>id</span>
- <span class='ivar'>@id</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- </div>
-
-
- <div id="class_method_details" class="method_details_list">
- <h2>Class Method Details</h2>
-
-
- <div class="method_details first">
- <h3 class="signature first" id="[]-class_method">
-
- .<strong>[]</strong>(component_id) &#x21d2; <tt>Component</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Gets a Component from the given <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">unique ID</a></span>. Usage is simular to how an Array lookup works.</p>
-
-
- </div>
-</div>
-<div class="tags">
- <p class="tag_title">Parameters:</p>
-<ul class="param">
-
- <li>
-
- <span class='name'>component_id</span>
-
-
- <span class='type'>(<tt>Integer</tt>)</span>
-
-
-
- </li>
-
-</ul>
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'>(<tt>Component</tt>)</span>
-
-
-
- &mdash;
- <div class='inline'>
-<p>Returns the Component that uses the given unique <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">ID</a></span>, nil if there is no Component associated with the given <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">ID</a></span></p>
-</div>
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-55
-56
-57</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 55</span>
-
-<span class='kw'>def</span> <span class='op'>[]</span><span class='lparen'>(</span><span class='id identifier rubyid_component_id'>component_id</span><span class='rparen'>)</span>
- <span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_id'>component_id</span><span class='rbracket'>]</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- <div class="method_details ">
- <h3 class="signature " id="each-class_method">
-
- .<strong>each</strong> &#x21d2; <tt>Enumerator</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Iterates over all components within the component manager</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'>(<tt>Enumerator</tt>)</span>
-
-
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-80
-81
-82
-83
-84</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 80</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span>
- <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_component'>component</span><span class='op'>|</span>
- <span class='kw'>yield</span> <span class='id identifier rubyid_component'>component</span>
- <span class='kw'>end</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- <div class="method_details ">
- <h3 class="signature " id="new-class_method">
-
- .<strong>new</strong>(**attrs) &#x21d2; <tt>Object</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Creates a new component and sets the values of the attributes given to it. If an attritbute is not passed then it will remain as the default.</p>
-
-
- </div>
-</div>
-<div class="tags">
- <p class="tag_title">Parameters:</p>
-<ul class="param">
-
- <li>
-
- <span class='name'>attrs</span>
-
-
- <span class='type'>(<tt>Keywords</tt>)</span>
-
-
-
- </li>
-
-</ul>
-
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 61</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_attrs'>attrs</span><span class='rparen'>)</span>
- <span class='id identifier rubyid_new_component'>new_component</span> <span class='op'>=</span> <span class='kw'>super</span>
-
- <span class='comment'># Generate ID
-</span> <span class='id identifier rubyid_new_id'>new_id</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_find_index'>find_index</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_i'>i</span><span class='op'>|</span> <span class='id identifier rubyid_i'>i</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='rbrace'>}</span>
- <span class='id identifier rubyid_new_id'>new_id</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='kw'>if</span> <span class='id identifier rubyid_new_id'>new_id</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
- <span class='id identifier rubyid_new_component'>new_component</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span> <span class='op'>=</span> <span class='id identifier rubyid_new_id'>new_id</span>
-
- <span class='comment'># Fill params
-</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
- <span class='id identifier rubyid_new_component'>new_component</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_key'>key</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span>
- <span class='kw'>end</span>
-
- <span class='comment'># Save Component
-</span> <span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_new_id'>new_id</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_new_component'>new_component</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- </div>
-
- <div id="instance_method_details" class="method_details_list">
- <h2>Instance Method Details</h2>
-
-
- <div class="method_details first">
- <h3 class="signature first" id="attrs-instance_method">
-
- #<strong>attrs</strong> &#x21d2; <tt>Hash</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Returns a hash, where all the keys are attributes linked to their respective values.</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'>(<tt>Hash</tt>)</span>
-
-
-
- &mdash;
- <div class='inline'>
-<p>Returns a hash, where all the keys are attributes linked to their respective values.</p>
-</div>
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-122
-123
-124
-125
-126</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 122</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_attrs'>attrs</span>
- <span class='id identifier rubyid_instance_variables'>instance_variables</span><span class='period'>.</span><span class='id identifier rubyid_each_with_object'>each_with_object</span><span class='lparen'>(</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_final'>final</span><span class='op'>|</span>
- <span class='id identifier rubyid_final'>final</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_delete_prefix'>delete_prefix</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>@</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_instance_variable_get'>instance_variable_get</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
- <span class='kw'>end</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- <div class="method_details ">
- <h3 class="signature " id="delete-instance_method">
-
- #<strong>delete</strong> &#x21d2; <tt>Boolean</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Removes this component from the list and purges all references to this Component from other Entities, as well as its <span class='object_link'><a href="#id-instance_method" title="FelFlame::Helper::ComponentManagerTemplate#id (method)">ID</a></span> and data.</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'>(<tt>Boolean</tt>)</span>
-
-
-
- &mdash;
- <div class='inline'>
-<p>true.</p>
-</div>
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 109</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_delete'>delete</span>
- <span class='id identifier rubyid_linked_entities'>linked_entities</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_entity_id'>entity_id</span><span class='op'>|</span>
- <span class='const'><span class='object_link'><a href="../../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Entities.html" title="FelFlame::Entities (class)">Entities</a></span></span><span class='lbracket'>[</span><span class='id identifier rubyid_entity_id'>entity_id</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_remove'>remove</span> <span class='kw'>self</span>
- <span class='kw'>end</span>
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_id'>id</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>nil</span>
- <span class='ivar'>@linked_entities</span> <span class='op'>=</span> <span class='kw'>nil</span>
- <span class='id identifier rubyid_instance_variables'>instance_variables</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_var'>var</span><span class='op'>|</span>
- <span class='id identifier rubyid_instance_variable_set'>instance_variable_set</span><span class='lparen'>(</span><span class='id identifier rubyid_var'>var</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='rparen'>)</span>
- <span class='kw'>end</span>
- <span class='kw'>true</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- <div class="method_details ">
- <h3 class="signature " id="linked_entities-instance_method">
-
- #<strong>linked_entities</strong> &#x21d2; <tt>Array</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>A list of components that are linked to the component</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'>(<tt>Array</tt>)</span>
-
-
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-95
-96
-97</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 95</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_linked_entities'>linked_entities</span>
- <span class='ivar'>@linked_entities</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- <div class="method_details ">
- <h3 class="signature " id="to_i-instance_method">
-
- #<strong>to_i</strong> &#x21d2; <tt>Integer</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>An alias for the ID reader</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'>(<tt>Integer</tt>)</span>
-
-
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-89
-90
-91</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 89</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_to_i'>to_i</span>
- <span class='id identifier rubyid_id'>id</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- <div class="method_details ">
- <h3 class="signature " id="to_json-instance_method">
-
- #<strong>to_json</strong> &#x21d2; <tt>String</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Export all data into a JSON String, which could then later be loaded or saved to a file TODO: This function is not yet complete</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'>(<tt>String</tt>)</span>
-
-
-
- &mdash;
- <div class='inline'>
-<p>a JSON formatted String</p>
-</div>
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-131
-132
-133</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 131</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_to_json'>to_json</span>
- <span class='comment'># should return a json or hash of all data in this component
-</span><span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- <div class="method_details ">
- <h3 class="signature " id="update_attrs-instance_method">
-
- #<strong>update_attrs</strong>(**opts) &#x21d2; <tt>Object</tt>
-
-
-
-
-
-</h3><div class="docstring">
- <div class="discussion">
-
-<p>Update attribute values using a hash or keywords.</p>
-
-
- </div>
-</div>
-<div class="tags">
-
-<p class="tag_title">Returns:</p>
-<ul class="return">
-
- <li>
-
-
- <span class='type'></span>
-
-
-
-
- <div class='inline'>
-<p>Hash of updated attributes</p>
-</div>
-
- </li>
-
-</ul>
-
-</div><table class="source_code">
- <tr>
- <td>
- <pre class="lines">
-
-
-101
-102
-103
-104
-105</pre>
- </td>
- <td>
- <pre class="code"><span class="info file"># File 'component_manager.rb', line 101</span>
-
-<span class='kw'>def</span> <span class='id identifier rubyid_update_attrs'>update_attrs</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
- <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
- <span class='id identifier rubyid_send'>send</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_key'>key</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span>
- <span class='kw'>end</span>
-<span class='kw'>end</span></pre>
- </td>
- </tr>
-</table>
-</div>
-
- </div>
-
-</div>
-
- <div id="footer">
- Generated on Thu Jun 10 22:55:26 2021 by
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
- 0.9.26 (ruby-2.7.3).
-</div>
-
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/docs/FelFlame/Systems.html b/docs/FelFlame/Systems.html
index 65d463b..8961bf1 100644
--- a/docs/FelFlame/Systems.html
+++ b/docs/FelFlame/Systems.html
@@ -154,6 +154,31 @@
<li class="public ">
<span class="summary_signature">
+ <a href="#attr_triggers-instance_method" title="#attr_triggers (instance method)">#<strong>attr_triggers</strong> &#x21d2; Object </a>
+
+
+
+ </span>
+
+
+
+
+
+
+
+
+
+
+
+
+ <span class="summary_desc"><div class='inline'></div></span>
+
+</li>
+
+
+ <li class="public ">
+ <span class="summary_signature">
+
<a href="#const_name-instance_method" title="#const_name (instance method)">#<strong>const_name</strong> &#x21d2; Object </a>
@@ -452,6 +477,30 @@
<li class="public ">
<span class="summary_signature">
+ <a href="#trigger_when_is_changed-instance_method" title="#trigger_when_is_changed (instance method)">#<strong>trigger_when_is_changed</strong>(component_or_manager, attr) &#x21d2; Object </a>
+
+
+
+ </span>
+
+
+
+
+
+
+
+
+
+ <span class="summary_desc"><div class='inline'>
+<p>Add a component or component manager so that it triggers this system when a component&#39;s attribute is changed.</p>
+</div></span>
+
+</li>
+
+
+ <li class="public ">
+ <span class="summary_signature">
+
<a href="#trigger_when_removed-instance_method" title="#trigger_when_removed (instance method)">#<strong>trigger_when_removed</strong>(component_or_manager) &#x21d2; Boolean </a>
@@ -503,7 +552,7 @@
<p class="tag_title">Examples:</p>
- <pre class="example code"><code><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PassiveHeal</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='op'>-</span><span class='int'>2</span><span class='comma'>,</span> <span class='label'>frame:</span> <span class='int'>2</span><span class='rparen'>)</span> <span class='kw'>do</span>
+ <pre class="example code"><code><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PassiveHeal</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='op'>-</span><span class='int'>2</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Components.html" title="FelFlame::Components (class)">Components</a></span></span><span class='op'>::</span><span class='const'>Health</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_component'>component</span><span class='op'>|</span>
<span class='id identifier rubyid_component'>component</span><span class='period'>.</span><span class='id identifier rubyid_hp'>hp</span> <span class='op'>+=</span> <span class='int'>5</span>
<span class='kw'>end</span>
@@ -575,15 +624,15 @@
<pre class="lines">
-50
-51
-52
-53
-54
-55</pre>
+56
+57
+58
+59
+60
+61</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 50</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 56</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='int'>0</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='period'>.</span><span class='id identifier rubyid_const_set'>const_set</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='kw'>self</span><span class='rparen'>)</span>
@@ -634,6 +683,38 @@
</div>
+ <span id="attr_triggers=-instance_method"></span>
+ <div class="method_details ">
+ <h3 class="signature " id="attr_triggers-instance_method">
+
+ #<strong>attr_triggers</strong> &#x21d2; <tt>Object</tt>
+
+
+
+
+
+</h3><table class="source_code">
+ <tr>
+ <td>
+ <pre class="lines">
+
+
+26
+27
+28</pre>
+ </td>
+ <td>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 26</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_attr_triggers'>attr_triggers</span>
+ <span class='ivar'>@attr_triggers</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
+<span class='kw'>end</span></pre>
+ </td>
+ </tr>
+</table>
+</div>
+
+
<span id="const_name=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="const_name-instance_method">
@@ -840,12 +921,12 @@
<pre class="lines">
-29
-30
-31</pre>
+35
+36
+37</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 29</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 35</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='id identifier rubyid_constants'>constants</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_sym'>sym</span><span class='op'>|</span> <span class='id identifier rubyid_const_get'>const_get</span><span class='lparen'>(</span><span class='id identifier rubyid_sym'>sym</span><span class='rparen'>)</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_sort_by'>sort_by</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:priority</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_reverse'>reverse</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
@@ -887,12 +968,12 @@
<pre class="lines">
-58
-59
-60</pre>
+64
+65
+66</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 58</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 64</span>
<span class='kw'>def</span> <span class='id identifier rubyid_call'>call</span>
<span class='ivar'>@block</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span>
@@ -914,17 +995,54 @@
</h3><div class="docstring">
<div class="discussion">
-<p>Removes triggers from this system</p>
+<p>Removes triggers from this system. This function is fairly flexible so it can accept a few different inputs For addition and removal triggers, you can optionally pass in a component, or a manager to clear specifically the relevant triggers for that one component or manager. If you do not pass a component or manager then it will clear triggers for all components and managers. For attr_triggers</p>
</div>
</div>
<div class="tags">
- <p class="tag_title">Parameters:</p>
+
+ <div class="examples">
+ <p class="tag_title">Examples:</p>
+
+
+ <pre class="example code"><code><span class='comment'># To clear all triggers that execute this system when a component is added:
+</span><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>ExampleSystem</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span> <span class='symbol'>:addition_triggers</span>
+<span class='comment'># Same as above but for when a component is removed instead
+</span><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>ExampleSystem</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span> <span class='symbol'>:removal_triggers</span>
+<span class='comment'># Same as above but for when a component has a certain attribute changed
+</span><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>ExampleSystem</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span> <span class='symbol'>:attr_triggers</span>
+
+<span class='comment'># Clear a trigger from a specific component
+</span><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>ExampleSystem</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span> <span class='symbol'>:addition_triggers</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'>Component</span><span class='op'>::</span><span class='const'>ExampleComponent</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
+<span class='comment'># Clear a trigger from a specific component manager
+</span><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>ExampleSystem</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span> <span class='symbol'>:addition_triggers</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'>Component</span><span class='op'>::</span><span class='const'>ExampleComponent</span>
+
+<span class='comment'># Clear the trigger that executes a system when the &#39;:example_attr&#39; is changes
+</span><span class='const'><span class='object_link'><a href="../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>ExampleSystem</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span> <span class='symbol'>:attr_triggers</span><span class='comma'>,</span> <span class='symbol'>:example_attr</span></code></pre>
+
+ </div>
+<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
+ <span class='name'>trigger_types</span>
+
+
+ <span class='type'>(<tt>:Symbols</tt>)</span>
+
+
+
+ &mdash;
+ <div class='inline'>
+<p>One or more of the following trigger types: <code>:addition_triggers</code>, <code>:removal_triggers</code>, or <code>:attr_triggers</code>. If attr_triggers is used then you may pass attributes you wish to be cleared as symbols in this parameter as well</p>
+</div>
+
+ </li>
+
+ <li>
+
<span class='name'>component_or_manager</span>
@@ -968,39 +1086,147 @@
<pre class="lines">
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91</pre>
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 77</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 103</span>
<span class='kw'>def</span> <span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_trigger_types'>trigger_types</span><span class='comma'>,</span> <span class='label'>component_or_manager:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
- <span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='symbol'>:addition_triggers</span><span class='comma'>,</span> <span class='symbol'>:removal_triggers</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_trigger_types'>trigger_types</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
- <span class='id identifier rubyid_trigger_types'>trigger_types</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='op'>|</span>
+ <span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='symbol'>:addition_triggers</span><span class='comma'>,</span> <span class='symbol'>:removal_triggers</span><span class='comma'>,</span> <span class='symbol'>:attr_triggers</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='id identifier rubyid_trigger_types'>trigger_types</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
+
+ <span class='kw'>if</span> <span class='id identifier rubyid_trigger_types'>trigger_types</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span> <span class='symbol'>:attr_triggers</span>
+ <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='op'>-</span> <span class='lbracket'>[</span><span class='symbol'>:addition_triggers</span><span class='comma'>,</span>
+ <span class='symbol'>:removal_triggers</span><span class='comma'>,</span>
+ <span class='symbol'>:attr_triggers</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
+
+ <span class='kw'>if</span> <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+ <span class='comment'>#remove all attrs
+</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_cmp_or_mgr'>cmp_or_mgr</span><span class='comma'>,</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='op'>|</span>
+ <span class='id identifier rubyid_attrs'>attrs</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='op'>|</span>
+ <span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_cmp_or_mgr'>cmp_or_mgr</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+
+ <span class='id identifier rubyid_cmp_or_mgr'>cmp_or_mgr</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='kw'>self</span>
+ <span class='kw'>end</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
+ <span class='kw'>end</span>
+ <span class='kw'>else</span>
+ <span class='comment'>#remove attrs relevant to comp_or_man
+</span> <span class='kw'>unless</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='op'>|</span>
+ <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='kw'>self</span>
+ <span class='kw'>end</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
+ <span class='kw'>end</span>
+ <span class='kw'>end</span>
+
+ <span class='kw'>else</span>
+
+ <span class='kw'>if</span> <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+ <span class='lparen'>(</span><span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='op'>-</span> <span class='lbracket'>[</span><span class='symbol'>:addition_triggers</span><span class='comma'>,</span> <span class='symbol'>:removal_triggers</span><span class='comma'>,</span> <span class='symbol'>:attr_triggers</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='op'>|</span>
+ <span class='comment'>#remove attr
+</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_cmp_or_mgr'>cmp_or_mgr</span><span class='comma'>,</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='op'>|</span>
+ <span class='id identifier rubyid_cmp_or_mgr'>cmp_or_mgr</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='kw'>self</span>
+ <span class='kw'>end</span>
+ <span class='kw'>end</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='lparen'>(</span><span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='op'>-</span> <span class='lbracket'>[</span><span class='symbol'>:addition_triggers</span><span class='comma'>,</span>
+ <span class='symbol'>:removal_triggers</span><span class='comma'>,</span>
+ <span class='symbol'>:attr_triggers</span><span class='rbracket'>]</span><span class='rparen'>)</span>
+ <span class='kw'>else</span>
+ <span class='comment'>#remove attr from component_or_manager
+</span> <span class='lparen'>(</span><span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='op'>-</span> <span class='lbracket'>[</span><span class='symbol'>:addition_triggers</span><span class='comma'>,</span> <span class='symbol'>:removal_triggers</span><span class='comma'>,</span> <span class='symbol'>:attr_triggers</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='op'>|</span>
+ <span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+ <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='kw'>self</span>
+ <span class='comment'>#self.attr_triggers[component_or_manager].each do |attr|
+</span> <span class='comment'># component_or_manager.attr_triggers[attr].delete self
+</span> <span class='comment'>#end
+</span> <span class='kw'>end</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span> <span class='op'>-=</span> <span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='kw'>unless</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+ <span class='kw'>end</span>
+
+ <span class='kw'>end</span>
+ <span class='kw'>end</span>
+
+ <span class='lparen'>(</span><span class='id identifier rubyid_trigger_types'>trigger_types</span> <span class='op'>&amp;</span> <span class='lbracket'>[</span><span class='symbol'>:removal_triggers</span><span class='comma'>,</span> <span class='symbol'>:addition_triggers</span><span class='rbracket'>]</span> <span class='op'>-</span> <span class='lbracket'>[</span><span class='symbol'>:attr_triggers</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
- <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_trigger'>trigger</span><span class='op'>|</span>
+ <span class='comment'>#remove all removal triggers
+</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_trigger'>trigger</span><span class='op'>|</span>
<span class='id identifier rubyid_trigger'>trigger</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='kw'>self</span>
<span class='kw'>end</span>
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_addition_triggers'>addition_triggers</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>else</span>
- <span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='id identifier rubyid_component_or_manager'>component_or_manager</span>
+ <span class='comment'>#remove removal trigger relevant to comp/man
+</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='id identifier rubyid_component_or_manager'>component_or_manager</span>
<span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_trigger_type'>trigger_type</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span> <span class='kw'>self</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
- <span class='kw'>true</span>
<span class='kw'>end</span></pre>
</td>
</tr>
@@ -1053,12 +1279,12 @@
<pre class="lines">
-70
-71
-72</pre>
+76
+77
+78</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 70</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 76</span>
<span class='kw'>def</span> <span class='id identifier rubyid_redefine'>redefine</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='ivar'>@block</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span>
@@ -1112,10 +1338,10 @@
<pre class="lines">
-66</pre>
+72</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 66</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 72</span>
<span class='kw'>def</span> <span class='id identifier rubyid_step'>step</span><span class='semicolon'>;</span> <span class='kw'>end</span></pre>
</td>
@@ -1187,14 +1413,14 @@
<pre class="lines">
-96
-97
-98
-99
-100</pre>
+176
+177
+178
+179
+180</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 96</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 176</span>
<span class='kw'>def</span> <span class='id identifier rubyid_trigger_when_added'>trigger_when_added</span><span class='lparen'>(</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_addition_triggers'>addition_triggers</span> <span class='op'>|=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span>
@@ -1207,6 +1433,65 @@
</div>
<div class="method_details ">
+ <h3 class="signature " id="trigger_when_is_changed-instance_method">
+
+ #<strong>trigger_when_is_changed</strong>(component_or_manager, attr) &#x21d2; <tt>Object</tt>
+
+
+
+
+
+</h3><div class="docstring">
+ <div class="discussion">
+
+<p>Add a component or component manager so that it triggers this system when a component&#39;s attribute is changed.</p>
+
+
+ </div>
+</div>
+<div class="tags">
+
+
+</div><table class="source_code">
+ <tr>
+ <td>
+ <pre class="lines">
+
+
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203</pre>
+ </td>
+ <td>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 192</span>
+
+<span class='kw'>def</span> <span class='id identifier rubyid_trigger_when_is_changed'>trigger_when_is_changed</span><span class='lparen'>(</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='comma'>,</span> <span class='id identifier rubyid_attr'>attr</span><span class='rparen'>)</span>
+ <span class='kw'>if</span> <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+ <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='kw'>self</span><span class='rbracket'>]</span>
+ <span class='kw'>else</span>
+ <span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span> <span class='op'>|=</span> <span class='lbracket'>[</span><span class='kw'>self</span><span class='rbracket'>]</span>
+ <span class='kw'>end</span>
+ <span class='kw'>if</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span>
+ <span class='kw'>else</span>
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_attr_triggers'>attr_triggers</span><span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span> <span class='op'>|=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span>
+ <span class='kw'>end</span>
+<span class='kw'>end</span></pre>
+ </td>
+ </tr>
+</table>
+</div>
+
+ <div class="method_details ">
<h3 class="signature " id="trigger_when_removed-instance_method">
#<strong>trigger_when_removed</strong>(component_or_manager) &#x21d2; <tt>Boolean</tt>
@@ -1270,14 +1555,14 @@
<pre class="lines">
-105
-106
-107
-108
-109</pre>
+185
+186
+187
+188
+189</pre>
</td>
<td>
- <pre class="code"><span class="info file"># File 'system_manager.rb', line 105</span>
+ <pre class="code"><span class="info file"># File 'system_manager.rb', line 185</span>
<span class='kw'>def</span> <span class='id identifier rubyid_trigger_when_removed'>trigger_when_removed</span><span class='lparen'>(</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_removal_triggers'>removal_triggers</span> <span class='op'>|=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_component_or_manager'>component_or_manager</span><span class='rbracket'>]</span>
@@ -1294,7 +1579,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:52 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/_index.html b/docs/_index.html
index cc26e86..1ce8693 100644
--- a/docs/_index.html
+++ b/docs/_index.html
@@ -164,7 +164,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:51 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/file.README.html b/docs/file.README.html
index 2de097c..ac4599e 100644
--- a/docs/file.README.html
+++ b/docs/file.README.html
@@ -373,7 +373,7 @@ complete I will use a more verbose explanation as below to help users of the fra
</div></div>
<div id="footer">
- Generated on Wed Jun 16 07:08:51 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/index.html b/docs/index.html
index ce3390b..460ae00 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -373,7 +373,7 @@ complete I will use a more verbose explanation as below to help users of the fra
</div></div>
<div id="footer">
- Generated on Wed Jun 16 07:08:51 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/docs/method_list.html b/docs/method_list.html
index 6d634b1..609abe6 100644
--- a/docs/method_list.html
+++ b/docs/method_list.html
@@ -94,6 +94,38 @@
<li class="odd ">
<div class="item">
+ <span class='object_link'><a href="FelFlame/Helper/ComponentManager.html#attr_changed_trigger_systems-instance_method" title="FelFlame::Helper::ComponentManager#attr_changed_trigger_systems (method)">#attr_changed_trigger_systems</a></span>
+ <small>FelFlame::Helper::ComponentManager</small>
+ </div>
+ </li>
+
+
+ <li class="even ">
+ <div class="item">
+ <span class='object_link'><a href="FelFlame/Systems.html#attr_triggers-instance_method" title="FelFlame::Systems#attr_triggers (method)">#attr_triggers</a></span>
+ <small>FelFlame::Systems</small>
+ </div>
+ </li>
+
+
+ <li class="odd ">
+ <div class="item">
+ <span class='object_link'><a href="FelFlame/Helper/ComponentManager.html#attr_triggers-instance_method" title="FelFlame::Helper::ComponentManager#attr_triggers (method)">#attr_triggers</a></span>
+ <small>FelFlame::Helper::ComponentManager</small>
+ </div>
+ </li>
+
+
+ <li class="even ">
+ <div class="item">
+ <span class='object_link'><a href="FelFlame/Helper/ComponentManager.html#attr_triggers-class_method" title="FelFlame::Helper::ComponentManager.attr_triggers (method)">attr_triggers</a></span>
+ <small>FelFlame::Helper::ComponentManager</small>
+ </div>
+ </li>
+
+
+ <li class="odd ">
+ <div class="item">
<span class='object_link'><a href="FelFlame/Helper/ComponentManager.html#attrs-instance_method" title="FelFlame::Helper::ComponentManager#attrs (method)">#attrs</a></span>
<small>FelFlame::Helper::ComponentManager</small>
</div>
@@ -350,7 +382,7 @@
<li class="odd ">
<div class="item">
- <span class='object_link'><a href="FelFlame/Systems.html#trigger_when_removed-instance_method" title="FelFlame::Systems#trigger_when_removed (method)">#trigger_when_removed</a></span>
+ <span class='object_link'><a href="FelFlame/Systems.html#trigger_when_is_changed-instance_method" title="FelFlame::Systems#trigger_when_is_changed (method)">#trigger_when_is_changed</a></span>
<small>FelFlame::Systems</small>
</div>
</li>
@@ -358,6 +390,14 @@
<li class="even ">
<div class="item">
+ <span class='object_link'><a href="FelFlame/Systems.html#trigger_when_removed-instance_method" title="FelFlame::Systems#trigger_when_removed (method)">#trigger_when_removed</a></span>
+ <small>FelFlame::Systems</small>
+ </div>
+ </li>
+
+
+ <li class="odd ">
+ <div class="item">
<span class='object_link'><a href="FelFlame/Helper/ComponentManager.html#update_attrs-instance_method" title="FelFlame::Helper::ComponentManager#update_attrs (method)">#update_attrs</a></span>
<small>FelFlame::Helper::ComponentManager</small>
</div>
diff --git a/docs/top-level-namespace.html b/docs/top-level-namespace.html
index d08d816..00751f9 100644
--- a/docs/top-level-namespace.html
+++ b/docs/top-level-namespace.html
@@ -127,7 +127,7 @@
</div>
<div id="footer">
- Generated on Wed Jun 16 07:08:52 2021 by
+ Generated on Sat Jul 3 00:34:25 2021 by
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.26 (ruby-2.7.3).
</div>
diff --git a/spec/system_manager_spec.rb b/spec/system_manager_spec.rb
index c2b8cf6..783b1a7 100644
--- a/spec/system_manager_spec.rb
+++ b/spec/system_manager_spec.rb
@@ -3,41 +3,44 @@ require_relative '../felflame.rb'
describe 'Components' do
before :all do
- @component_manager ||= FelFlame::Components.new('TestSystems', health: 10, name: 'imp')
+ @component_manager ||= FelFlame::Components.new('TestSystems', health: 10, name: 'imp', mana: 10)
+ @@testitr = 999
end
before :each do
+ @@testitr += 1
+ @system = FelFlame::Systems.new "Test#{@@testitr}" do
+ @component_manager.each do |component|
+ component.health += 5
+ end
+ end
end
after :each do
- #TODO: order breaks it
@component_manager.each(&:delete)
FelFlame::Entities.each(&:delete)
FelFlame::Systems.each(&:clear_triggers)
end
it 'can create a system' do
- FelFlame::Systems.new('Test100') do
+ FelFlame::Systems.new('Test99') do
'Works'
end
- expect(FelFlame::Systems::Test100.call).to eq('Works')
+ expect(FelFlame::Systems::Test99.call).to eq('Works')
end
it 'can be redefined' do
- FelFlame::Systems.new('Test101') do
- 'neat'
- end
- FelFlame::Systems::Test101.redefine do
+ @system.redefine do
'very neat'
end
- expect(FelFlame::Systems::Test101.call).to eq('very neat')
+ expect(@system.call).to eq('very neat')
end
it 'can iterate over the sorted systems by priority' do
- FelFlame::Systems.new('Test102', priority: 1) {}
- FelFlame::Systems.new('Test103', priority: 50) {}
- FelFlame::Systems.new('Test104', priority: 7) {}
- answer_key = ['Test103', 'Test104', 'Test102']
+ FelFlame::Systems.new('Test2', priority: 1) {}
+ FelFlame::Systems.new('Test3', priority: 50) {}
+ FelFlame::Systems.new('Test4', priority: 7) {}
+ answer_key = ['Test3', 'Test4', 'Test2']
test = FelFlame::Systems.each.to_a
# converts the system name to the constant, compares their positions making sure they are sorted
# higher priority should be placed first
@@ -55,29 +58,25 @@ describe 'Components' do
multiple = 3
first = @component_manager.new(health: init1)
second = @component_manager.new(health: init2)
- FelFlame::Systems.new('Test105') do
+ @system.redefine do
@component_manager.each do |component|
component.health -= multiple
end
end
- FelFlame::Systems::Test105.call
+ @system.call
expect(first.health).to eq(init1 -= multiple)
expect(second.health).to eq(init2 -= multiple)
10.times do
- FelFlame::Systems::Test105.call
+ @system.call
end
expect(first.health).to eq(init1 - (multiple * 10))
expect(second.health).to eq(init2 - (multiple * 10))
end
+
it 'can trigger when a single Component is added' do
- FelFlame::Systems.new 'Test107' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test107.trigger_when_added @cmp0
+ @system.trigger_when_added @cmp0
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -90,35 +89,25 @@ describe 'Components' do
end
it 'can trigger when a Component from a manager is added' do
- FelFlame::Systems.new 'Test106' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp1 = @component_manager.new
@cmp2 = @component_manager.new health: 20
- FelFlame::Systems::Test106.trigger_when_added @component_manager
+ @system.trigger_when_added @component_manager
expect(@cmp1.health).to eq(10)
expect(@cmp2.health).to eq(20)
@entity1 = FelFlame::Entities.new
@entity2 = FelFlame::Entities.new @cmp2
expect(@cmp1.health).to eq(15)
expect(@cmp2.health).to eq(25)
- FelFlame::Systems::Test106.trigger_when_added @cmp1
+ @system.trigger_when_added @cmp1
@entity1.add @cmp1
expect(@cmp1.health).to eq(20)
expect(@cmp2.health).to eq(30)
end
it 'can trigger when a single Component is removed' do
- FelFlame::Systems.new 'Test108' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test108.trigger_when_removed @cmp0
+ @system.trigger_when_removed @cmp0
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -132,17 +121,17 @@ describe 'Components' do
@entity0.remove @cmp1
expect(@cmp0.health).to eq(15)
expect(@cmp1.health).to eq(25)
+ @system.clear_triggers(:removal_triggers, component_or_manager: @cmp0)
+ @entity1.add @cmp0
+ @entity1.remove @cmp0
+ expect(@cmp0.health).to eq(15)
+ expect(@cmp1.health).to eq(25)
end
it 'can trigger when a Component from a manager is removed' do
- FelFlame::Systems.new 'Test109' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test109.trigger_when_removed @component_manager
+ @system.trigger_when_removed @component_manager
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -152,22 +141,22 @@ describe 'Components' do
@entity1.remove @cmp0
expect(@cmp0.health).to eq(15)
expect(@cmp1.health).to eq(25)
- FelFlame::Systems::Test109.trigger_when_removed @cmp1
+ @system.trigger_when_removed @cmp1
@entity0.add @cmp1, @cmp0
@entity0.remove @cmp1
expect(@cmp0.health).to eq(20)
expect(@cmp1.health).to eq(30)
+ @system.clear_triggers(:removal_triggers)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
end
-=begin
- it 'can trigger when a single Component is added' do
- FelFlame::Systems.new 'Test110' do
- @component_manager.each do |component|
- component.health += 5
- end
- end
+
+ it 'can trigger when a single Component\'s attribute is changed' do
@cmp0 = @component_manager.new
@cmp1 = @component_manager.new health: 20
- FelFlame::Systems::Test110.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @cmp0, :name
expect(@cmp0.health).to eq(10)
expect(@cmp1.health).to eq(20)
@entity0 = FelFlame::Entities.new
@@ -181,5 +170,231 @@ describe 'Components' do
expect(@cmp0.health).to eq(15)
expect(@cmp1.health).to eq(25)
end
-=end
+
+ it 'can clear all triggers' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @cmp0
+ @system.trigger_when_added @component_manager
+ @system.trigger_when_removed @cmp0
+ @system.trigger_when_removed @component_manager
+ @system.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.clear_triggers
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear individual attr_triggers, without component or manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp0, :mana
+ @system.trigger_when_is_changed @component_manager, :mana
+ @system.clear_triggers :attr_triggers, :name
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ end
+
+ it 'can clear individual attr_triggers, with component' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @cmp0, :name
+ @system.trigger_when_is_changed @cmp0, :mana
+ #expect(@system.attr_triggers).to eq({@cmp0 => [:name, :mana]})
+ #expect(@cmp0.attr_triggers).to eq({:name => [@system], :mana => [@system]})
+ @system.clear_triggers :attr_triggers, :name, component_or_manager: @cmp0
+ #expect(@system.attr_triggers).to eq({@cmp0 => [:mana]})
+ #expect(@cmp0.attr_triggers).to eq({:name => [], :mana => [@system]})
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(15)
+ expect(@cmp1.health).to eq(25)
+ end
+
+ it 'can clear individual attr_triggers, with manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @component_manager, :mana
+ @system.clear_triggers :attr_triggers, :name, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ end
+
+ it 'can clear all attr_triggers, without component or manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp1, :mana
+ @system.clear_triggers :attr_triggers
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear all attr_triggers, with component' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp1, :mana
+ @system.clear_triggers :attr_triggers, component_or_manager: @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(20)
+ expect(@cmp1.health).to eq(30)
+ end
+
+ it 'can clear all attr_triggers, with manager' do
+ @cmp0 = @component_manager.new health: 10, mana: 10
+ @cmp1 = @component_manager.new health: 20, mana: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_is_changed @component_manager, :name
+ @system.trigger_when_is_changed @cmp1, :mana
+ @system.clear_triggers :attr_triggers, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.name = 'something'
+ @cmp1.name = 'different'
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @cmp0.mana = 15
+ @cmp1.mana = 15
+ expect(@cmp0.health).to eq(15)
+ expect(@cmp1.health).to eq(25)
+ end
+
+ it 'can clear addition_trigger, without component or manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @cmp0
+ @system.trigger_when_added @component_manager
+ @system.clear_triggers(:addition_triggers)
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear addition_trigger, with component' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @cmp0
+ @system.clear_triggers :addition_triggers, component_or_manager: @cmp0
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear addition_trigger, with manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_added @component_manager
+ @system.clear_triggers :addition_triggers, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear removal_trigger, without component or manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_removed @cmp0
+ @system.trigger_when_removed @component_manager
+ @system.clear_triggers(:removal_triggers)
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear removal_trigger, with component' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_removed @cmp0
+ @system.clear_triggers :removal_triggers, component_or_manager: @cmp0
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
+
+ it 'can clear removal_trigger, with manager' do
+ @cmp0 = @component_manager.new health: 10
+ @cmp1 = @component_manager.new health: 20
+ @entity1 = FelFlame::Entities.new
+ @system.trigger_when_removed @component_manager
+ @system.clear_triggers :removal_triggers, component_or_manager: @component_manager
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ @entity1.add @cmp0, @cmp1
+ @entity1.remove @cmp0, @cmp1
+ expect(@cmp0.health).to eq(10)
+ expect(@cmp1.health).to eq(20)
+ end
end
diff --git a/system_manager.rb b/system_manager.rb
index 4bd37b2..2e1bd25 100644
--- a/system_manager.rb
+++ b/system_manager.rb
@@ -21,6 +21,12 @@ class FelFlame
@removal_triggers ||= []
end
+ attr_writer :attr_triggers
+
+ def attr_triggers
+ @attr_triggers ||= {}
+ end
+
class <<self
include Enumerable
@@ -35,7 +41,7 @@ class FelFlame
# The name given is what constant the system is assigned to
#
# @example
- # FelFlame::Systems.new('PassiveHeal', priority: -2, frame: 2) do
+ # FelFlame::Systems.new('PassiveHeal', priority: -2) do
# FelFlame::Components::Health.each do |component|
# component.hp += 5
# end
@@ -71,23 +77,97 @@ class FelFlame
@block = block
end
- # Removes triggers from this system
+ # Removes triggers from this system. This function is fairly flexible so it can accept a few different inputs
+ # For addition and removal triggers, you can optionally pass in a component, or a manager to clear specifically
+ # the relevant triggers for that one component or manager. If you do not pass a component or manager then it will
+ # clear triggers for all components and managers.
+ # For attr_triggers
+ # @example
+ # # To clear all triggers that execute this system when a component is added:
+ # FelFlame::Systems::ExampleSystem.clear_triggers :addition_triggers
+ # # Same as above but for when a component is removed instead
+ # FelFlame::Systems::ExampleSystem.clear_triggers :removal_triggers
+ # # Same as above but for when a component has a certain attribute changed
+ # FelFlame::Systems::ExampleSystem.clear_triggers :attr_triggers
+ #
+ # # Clear a trigger from a specific component
+ # FelFlame::Systems::ExampleSystem.clear_triggers :addition_triggers, FelFlame::Component::ExampleComponent[0]
+ # # Clear a trigger from a specific component manager
+ # FelFlame::Systems::ExampleSystem.clear_triggers :addition_triggers, FelFlame::Component::ExampleComponent
+ #
+ # # Clear the trigger that executes a system when the ':example_attr' is changes
+ # FelFlame::Systems::ExampleSystem.clear_triggers :attr_triggers, :example_attr
+ # @param trigger_types [:Symbols] One or more of the following trigger types: +:addition_triggers+, +:removal_triggers+, or +:attr_triggers+. If attr_triggers is used then you may pass attributes you wish to be cleared as symbols in this parameter as well
# @param component_or_manager [Component or ComponentManager] The object to clear triggers from. Use Nil to clear triggers from all components associated with this system.
# @return [Boolean] true
def clear_triggers(*trigger_types, component_or_manager: nil)
- trigger_types = [:addition_triggers, :removal_triggers] if trigger_types.empty?
- trigger_types.each do |trigger_type|
+ trigger_types = [:addition_triggers, :removal_triggers, :attr_triggers] if trigger_types.empty?
+
+ if trigger_types.include? :attr_triggers
+ if (trigger_types - [:addition_triggers,
+ :removal_triggers,
+ :attr_triggers]).empty?
+
+ if component_or_manager.nil?
+ #remove all attrs
+ self.attr_triggers.each do |cmp_or_mgr, attrs|
+ attrs.each do |attr|
+ next if cmp_or_mgr.attr_triggers[attr].nil?
+
+ cmp_or_mgr.attr_triggers[attr].delete self
+ end
+ self.attr_triggers = {}
+ end
+ else
+ #remove attrs relevant to comp_or_man
+ unless self.attr_triggers[component_or_manager].nil?
+ self.attr_triggers[component_or_manager].each do |attr|
+ component_or_manager.attr_triggers[attr].delete self
+ end
+ self.attr_triggers[component_or_manager] = []
+ end
+ end
+
+ else
+
+ if component_or_manager.nil?
+ (trigger_types - [:addition_triggers, :removal_triggers, :attr_triggers]).each do |attr|
+ #remove attr
+ self.attr_triggers.each do |cmp_or_mgr, attrs|
+ cmp_or_mgr.attr_triggers[attr].delete self
+ end
+ end
+ self.attr_triggers.delete (trigger_types - [:addition_triggers,
+ :removal_triggers,
+ :attr_triggers])
+ else
+ #remove attr from component_or_manager
+ (trigger_types - [:addition_triggers, :removal_triggers, :attr_triggers]).each do |attr|
+ next if component_or_manager.attr_triggers[attr].nil?
+ component_or_manager.attr_triggers[attr].delete self
+ #self.attr_triggers[component_or_manager].each do |attr|
+ # component_or_manager.attr_triggers[attr].delete self
+ #end
+ end
+ self.attr_triggers[component_or_manager] -= trigger_types unless self.attr_triggers[component_or_manager].nil?
+ end
+
+ end
+ end
+
+ (trigger_types & [:removal_triggers, :addition_triggers] - [:attr_triggers]).each do |trigger_type|
if component_or_manager.nil?
- send(trigger_type).each do |trigger|
+ #remove all removal triggers
+ self.send(trigger_type).each do |trigger|
trigger.send(trigger_type).delete self
end
- self.addition_triggers = []
+ self.send("#{trigger_type.to_s}=", [])
else
- send(trigger_type).delete component_or_manager
+ #remove removal trigger relevant to comp/man
+ self.send(trigger_type).delete component_or_manager
component_or_manager.send(trigger_type).delete self
end
end
- true
end
# Add a component or component manager so that it triggers this system when the component or a component from the component manager is added to an entity
@@ -107,5 +187,19 @@ class FelFlame
component_or_manager.removal_triggers |= [self]
true
end
+
+ # Add a component or component manager so that it triggers this system when a component's attribute is changed.
+ def trigger_when_is_changed(component_or_manager, attr)
+ if component_or_manager.attr_triggers[attr].nil?
+ component_or_manager.attr_triggers[attr] = [self]
+ else
+ component_or_manager.attr_triggers[attr] |= [self]
+ end
+ if self.attr_triggers[component_or_manager].nil?
+ self.attr_triggers[component_or_manager] = [attr]
+ else
+ self.attr_triggers[component_or_manager] |= [attr]
+ end
+ end
end
end