diff options
| author | realtradam <[email protected]> | 2021-07-03 00:36:00 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-07-03 00:36:00 -0400 |
| commit | a96733c75ce7caff16a1d79a9caa1894ed95d2ca (patch) | |
| tree | c4c6ed488c1b100eca0de065348a7d056f521134 | |
| parent | ba707eebb995eb46141d3c5e1701cd7252ba81c8 (diff) | |
| download | FelECS-a96733c75ce7caff16a1d79a9caa1894ed95d2ca.tar.gz FelECS-a96733c75ce7caff16a1d79a9caa1894ed95d2ca.zip | |
completed systems functionality
| -rw-r--r-- | component_manager.rb | 40 | ||||
| -rw-r--r-- | docs/FelFlame.html | 2 | ||||
| -rw-r--r-- | docs/FelFlame/Components.html | 24 | ||||
| -rw-r--r-- | docs/FelFlame/Entities.html | 2 | ||||
| -rw-r--r-- | docs/FelFlame/Helper.html | 2 | ||||
| -rw-r--r-- | docs/FelFlame/Helper/ComponentManager.html | 363 | ||||
| -rw-r--r-- | docs/FelFlame/Helper/ComponentManagerTemplate.html | 1042 | ||||
| -rw-r--r-- | docs/FelFlame/Systems.html | 403 | ||||
| -rw-r--r-- | docs/_index.html | 2 | ||||
| -rw-r--r-- | docs/file.README.html | 2 | ||||
| -rw-r--r-- | docs/index.html | 2 | ||||
| -rw-r--r-- | docs/method_list.html | 42 | ||||
| -rw-r--r-- | docs/top-level-namespace.html | 2 | ||||
| -rw-r--r-- | spec/system_manager_spec.rb | 317 | ||||
| -rw-r--r-- | system_manager.rb | 110 |
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'>&</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'>&</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'>"</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'>"</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'>"</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'>"</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> ⇒ 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> ⇒ 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> ⇒ 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> ⇒ 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) ⇒ 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> ⇒ 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> ⇒ <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> ⇒ <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'>&</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'>&</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) ⇒ <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'>&</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'>&</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> ⇒ <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'>'</span><span class='tstring_content'>@</span><span class='tstring_end'>'</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 - - — 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> » - <span class='title'><span class='object_link'><a href="../../FelFlame.html" title="FelFlame (class)">FelFlame</a></span></span> » <span class='title'><span class='object_link'><a href="../Helper.html" title="FelFlame::Helper (class)">Helper</a></span></span> - » - <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> ⇒ 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) ⇒ 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> ⇒ 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) ⇒ 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> ⇒ 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> ⇒ 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> ⇒ 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> ⇒ 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> ⇒ 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) ⇒ 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> ⇒ <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) ⇒ <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> - - - - — - <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> ⇒ <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) ⇒ <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'>"</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'>"</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> ⇒ <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> - - - - — - <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'>'</span><span class='tstring_content'>@</span><span class='tstring_end'>'</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> ⇒ <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> - - - - — - <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> ⇒ <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> ⇒ <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> ⇒ <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> - - - - — - <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) ⇒ <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'>"</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'>"</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> ⇒ 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> ⇒ 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) ⇒ 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'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) ⇒ 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'>'</span><span class='tstring_content'>PassiveHeal</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>PassiveHeal</span><span class='tstring_end'>'</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'>&</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> ⇒ <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'>&</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'>&</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'>&</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 ':example_attr' 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> + + + + — + <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'>&</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'>"</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'>"</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'>&</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) ⇒ <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'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) ⇒ <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 |
