felflame 3.0.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -2
- data/.ruby-version +1 -0
- data/CHANGELOG.mdown +47 -27
- data/Gemfile +2 -3
- data/Gemfile.lock +1 -1
- data/README.mdown +116 -81
- data/Rakefile +29 -9
- data/bin/console +3 -3
- data/docs/FelFlame/ComponentManager.html +129 -519
- data/docs/FelFlame/Components.html +22 -120
- data/docs/FelFlame/Entities.html +117 -377
- data/docs/FelFlame/Order.html +251 -0
- data/docs/FelFlame/Scenes.html +68 -66
- data/docs/FelFlame/Stage.html +28 -54
- data/docs/FelFlame/Systems.html +206 -242
- data/docs/FelFlame.html +32 -30
- data/docs/Felflame_.html +2 -2
- data/docs/_index.html +19 -4
- data/docs/class_list.html +1 -1
- data/docs/file.README.html +125 -87
- data/docs/index.html +125 -87
- data/docs/method_list.html +37 -93
- data/docs/top-level-namespace.html +4 -6
- data/felflame.gemspec +21 -21
- data/lib/felflame/component_manager.rb +98 -71
- data/lib/felflame/entity_manager.rb +75 -49
- data/lib/felflame/order.rb +24 -0
- data/lib/felflame/scene_manager.rb +23 -12
- data/lib/felflame/stage_manager.rb +10 -33
- data/lib/felflame/system_manager.rb +92 -47
- data/lib/felflame/version.rb +1 -1
- data/lib/felflame.rb +22 -14
- metadata +32 -29
data/docs/file.README.html
CHANGED
@@ -57,7 +57,9 @@
|
|
57
57
|
<div class="clear"></div>
|
58
58
|
</div>
|
59
59
|
|
60
|
-
<div id="content"><div id='filecontents'><p><img src="https://
|
60
|
+
<div id="content"><div id='filecontents'><p><img src="https://raw.githubusercontent.com/realtradam/FelFlame/master/logos/felflame-logo-text.png" alt="FelFlame"></p>
|
61
|
+
|
62
|
+
<!-- ![FelFlame](https://filestorage.catgirls.rodeo/images/felflame-logo-smaller-text.png) -->
|
61
63
|
|
62
64
|
<p><a href="https://codeclimate.com/github/realtradam/FelFlame/maintainability"><img src="https://api.codeclimate.com/v1/badges/56d425d9078e98efb74b/maintainability" alt="Maintainability"></a>
|
63
65
|
<a href="https://codeclimate.com/github/realtradam/FelFlame/test_coverage"><img src="https://api.codeclimate.com/v1/badges/56d425d9078e98efb74b/test_coverage" alt="Test Coverage"></a>
|
@@ -74,11 +76,12 @@
|
|
74
76
|
<ul>
|
75
77
|
<li><a href="#what-is-felflame">What is FelFlame?</a></li>
|
76
78
|
<li><a href="#what-is-ecs">What is ECS?</a>
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
* <a href="#components">Components</a>
|
80
|
+
* <a href="#entities">Entities</a>
|
81
|
+
* <a href="#systems">Systems</a>
|
82
|
+
* <a href="#scenes">Scenes</a>
|
83
|
+
* <a href="#stage">Stage</a>
|
84
|
+
* <a href="#order">Order</a></li>
|
82
85
|
<li><a href="#usage">Usage</a>
|
83
86
|
|
84
87
|
<ul>
|
@@ -87,7 +90,6 @@
|
|
87
90
|
<ul>
|
88
91
|
<li><a href="#creation">Creation</a></li>
|
89
92
|
<li><a href="#accessing">Accessing</a></li>
|
90
|
-
<li><a href="#get-id">Get ID</a></li>
|
91
93
|
<li><a href="#adding-and-removing-components">Adding and Removing Components</a></li>
|
92
94
|
<li><a href="#accessing-entities-attached-components">Accessing Entities' Attached Components</a></li>
|
93
95
|
<li><a href="#deletion">Deletion</a></li>
|
@@ -97,10 +99,9 @@
|
|
97
99
|
<ul>
|
98
100
|
<li><a href="#creating-a-component-manager">Creating a Component Manager</a></li>
|
99
101
|
<li><a href="#creating-a-component-from-a-component-manager">Creating a Component from a Component Manager</a></li>
|
100
|
-
<li><a href="#accessing-
|
102
|
+
<li><a href="#accessing-1">Accessing</a></li>
|
101
103
|
<li><a href="#accessing-attributes-and-changing-them">Accessing Attributes and Changing Them</a></li>
|
102
104
|
<li><a href="#deleting-components">Deleting Components</a></li>
|
103
|
-
<li><a href="#iterating-over-components">Iterating over Components</a></li>
|
104
105
|
<li><a href="#accessing-components-attached-entities">Accessing Components' attached Entities</a></li>
|
105
106
|
</ul></li>
|
106
107
|
<li><a href="#systems-1">Systems</a>
|
@@ -116,7 +117,7 @@
|
|
116
117
|
|
117
118
|
<ul>
|
118
119
|
<li><a href="#creation-2">Creation</a></li>
|
119
|
-
<li><a href="#accessing-
|
120
|
+
<li><a href="#accessing-2">Accessing</a></li>
|
120
121
|
<li><a href="#adding-systems">Adding Systems</a></li>
|
121
122
|
<li><a href="#removing-systems">Removing Systems</a></li>
|
122
123
|
<li><a href="#clearing">Clearing</a></li>
|
@@ -129,6 +130,11 @@
|
|
129
130
|
<li><a href="#removing-scenes">Removing Scenes</a></li>
|
130
131
|
<li><a href="#executing">Executing</a></li>
|
131
132
|
</ul></li>
|
133
|
+
<li><a href="#order-1">Order</a>
|
134
|
+
|
135
|
+
<ul>
|
136
|
+
<li><a href="#setting-the-order">Setting the order</a></li>
|
137
|
+
</ul></li>
|
132
138
|
<li><a href="#closing-notes">Closing Notes</a></li>
|
133
139
|
</ul></li>
|
134
140
|
<li><a href="#contribution">Contribution</a></li>
|
@@ -143,7 +149,7 @@
|
|
143
149
|
<ol>
|
144
150
|
<li><strong>Engine Agnostic:</strong> FelFlame has been designed to be rendering engine agnostic as long as the target rendering engine is written in Ruby. This means that this framework can be dropped into existing rendering engines such as <a href="http://www.ruby2d.com">Ruby2D</a> or <a href="https://dragonruby.org/toolkit/game">DRGTK</a> with little modifications.</li>
|
145
151
|
<li><strong>Easily Extensible:</strong> FelFlame has been designed such that extensions to its capabilities can be easily added. Extensions such as rendering engine wrappers, premade systems, premade components, etcetera can be easily coded and then distributed as gems.</li>
|
146
|
-
<li><strong>
|
152
|
+
<li><strong>Principle of (My) Least Astonishment:</strong> I want to develop games using a language and framework I love and makes sense to me, inspired by the <a href="https://en.wikipedia.org/wiki/Ruby_(programming_language)#Philosophy">Philosophy of the creator of Ruby</a>.</li>
|
147
153
|
</ol>
|
148
154
|
|
149
155
|
<h1 id="what-is-ecs">What is ECS?</h1>
|
@@ -169,7 +175,7 @@ ECS stands for Entity, Component, and System.</p>
|
|
169
175
|
|
170
176
|
<p>By using this pattern it allows programmers to easily control what an "object" or entity can do and how much data it needs to have. It avoids the issue of inhertance as no inhertance is ever required in this system. If you need a certain entity to have a certain functionality you just add the relevant component to it, and the systems that automatically go over specific components will give your entitiy the desired functionality. </p>
|
171
177
|
|
172
|
-
<p><strong>"But your framework also has <code>Scenes</code> and
|
178
|
+
<p><strong>"But your framework also has <code>Scenes</code>, <code>Stage</code>, and <code>Order</code>, what is that about?"</strong> </p>
|
173
179
|
|
174
180
|
<hr>
|
175
181
|
|
@@ -181,13 +187,19 @@ ECS stands for Entity, Component, and System.</p>
|
|
181
187
|
|
182
188
|
<p>The Stage is Scenes which are activated. This means any Scenes on the Stage are executed each frame, while the rest of the Systems are not.</p>
|
183
189
|
|
184
|
-
<
|
190
|
+
<h3 id="order">Order</h3>
|
185
191
|
|
186
|
-
<p>
|
192
|
+
<p>Order is a helper class which can set the priority of Scenes and Systems.</p>
|
193
|
+
|
194
|
+
<hr>
|
187
195
|
|
188
196
|
<h1 id="usage">Usage</h1>
|
189
197
|
|
190
|
-
<p>
|
198
|
+
<p>There are 2 ways of using FelFlame. You can either <code>include</code> it as a gem in your project if your game engine supports this. The other option is to download the single file export of FelFlame and then <code>require_relative</code> this file in your project. The single file export takes all the ruby code in the various files and concatenates them into a single file so it is more portable and easy to add.</p>
|
199
|
+
|
200
|
+
<p>To use the gem method you can do the following: install the gem using <code>gem install felflame</code> or using bundler <code>bundle add felflame</code> and then require it in your project like so: <code>require 'felflame'</code>.</p>
|
201
|
+
|
202
|
+
<p>To use the single file export method you simply download the felflame.rb file from the <a href="https://github.com/realtradam/FelFlame/releases">releases page on Github</a> and add it to your source folder and add a <code>require relative 'felflame.rb'</code> line or wherever you have placed the file to use it.</p>
|
191
203
|
|
192
204
|
<h2 id="entities">Entities</h2>
|
193
205
|
|
@@ -195,32 +207,27 @@ ECS stands for Entity, Component, and System.</p>
|
|
195
207
|
|
196
208
|
<p>Entities are essentially "objects" in the game world. To create a new Entity we do the following:</p>
|
197
209
|
|
198
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
210
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Entities.html" title="FelFlame::Entities (class)">Entities</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="FelFlame/Entities.html#initialize-instance_method" title="FelFlame::Entities#initialize (method)">new</a></span></span>
|
199
211
|
</code></pre>
|
200
212
|
|
201
|
-
<p>or if we want to add (any number of)components to it:</p>
|
213
|
+
<p>or if we want to add (any number of)components to it when creating it:</p>
|
202
214
|
|
203
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
204
|
-
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
215
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'>Entites</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
|
216
|
+
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>Health</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='comma'>,</span>
|
205
217
|
<span class='ivar'>@component</span><span class='comma'>,</span>
|
206
|
-
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
218
|
+
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>EnemyTeam</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
207
219
|
<span class='rparen'>)</span>
|
208
220
|
</code></pre>
|
209
221
|
|
210
222
|
<h3 id="accessing">Accessing</h3>
|
211
223
|
|
212
|
-
<p>
|
213
|
-
|
214
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</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="FelFlame/Entities.html" title="FelFlame::Entities (class)">Entities</a></span></span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span>
|
215
|
-
</code></pre>
|
216
|
-
|
217
|
-
<h3 id="get-id">Get ID</h3>
|
218
|
-
|
219
|
-
<p>Entity ID's are generated starting from 0 and ascending, unless if there is a missing ID because of a deleted
|
220
|
-
entity where a new entity will claim that ID. To get the ID of an Entity:</p>
|
224
|
+
<p>Oftentimes you will not be accessing an Entity this way. Later we will shows you a more common way of accessing entities.
|
225
|
+
If you need to you can access Entities using the <code>Entities</code> module:</p>
|
221
226
|
|
222
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span><span class='
|
223
|
-
</
|
227
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Entities.html" title="FelFlame::Entities (class)">Entities</a></span></span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span>
|
228
|
+
<span class='ivar'>@entity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Entities.html" title="FelFlame::Entities (class)">Entities</a></span></span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
229
|
+
<span class='ivar'>@entity</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Entities.html" title="FelFlame::Entities (class)">Entities</a></span></span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='comment'># you can iterate over all entities this way. Any valid array method can be used
|
230
|
+
</span></code></pre>
|
224
231
|
|
225
232
|
<h3 id="adding-and-removing-components">Adding and Removing Components</h3>
|
226
233
|
|
@@ -232,14 +239,18 @@ entity where a new entity will claim that ID. To get the ID of an Entity:</p>
|
|
232
239
|
|
233
240
|
<h3 id="accessing-entities-attached-components">Accessing Entities' Attached Components</h3>
|
234
241
|
|
242
|
+
<p>This is the most common way of accessing an Entity</p>
|
243
|
+
|
235
244
|
<p>When Components are added to Entities, they can be accessed from the Entity. By using a Component Manager as a key we can access an array of all components created from that Component Manager that are attached to an entity:</p>
|
236
245
|
|
237
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span><span class='period'>.</span><span class='id identifier rubyid_components'>components</span><span class='lbracket'>[</span><span class='ivar'>@component_manager</span><span class='rbracket'>]</span> <span class='comment'># => [@component1, @component2, component3]
|
246
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span><span class='period'>.</span><span class='id identifier rubyid_components'>components</span><span class='lbracket'>[</span><span class='ivar'>@component_manager</span><span class='rbracket'>]</span> <span class='comment'># => [@component1, @component2, @component3]
|
238
247
|
</span></code></pre>
|
239
248
|
|
240
249
|
<h3 id="deletion">Deletion</h3>
|
241
250
|
|
242
|
-
<p>To have all Components from an Entity removed and the Entity deleted we do the following:</p>
|
251
|
+
<p>To have all Components from an Entity <strong>removed</strong> and the Entity deleted we do the following:</p>
|
252
|
+
|
253
|
+
<p>NOTE: The components will <strong>not be deleted</strong>. They are simply <strong>removed</strong> from the entity and then the entity is destroyed. You must handle component deletion yourself as for example singleton components need to removed instead of deleted.</p>
|
243
254
|
|
244
255
|
<pre class="code ruby"><code class="ruby"><span class='ivar'>@entity</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span>
|
245
256
|
</code></pre>
|
@@ -251,7 +262,7 @@ entity where a new entity will claim that ID. To get the ID of an Entity:</p>
|
|
251
262
|
<p>Components are where all the data is stored. The data is stored in variables or accessors in each component.
|
252
263
|
These accessors and their defaults are configured when a component manager is created, like so:</p>
|
253
264
|
|
254
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component_manager</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
265
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component_manager</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="FelFlame/Components.html#new-class_method" title="FelFlame::Components.new (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Stats</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='symbol'>:armour</span><span class='comma'>,</span> <span class='label'>hp:</span> <span class='int'>100</span><span class='rparen'>)</span>
|
255
266
|
</code></pre>
|
256
267
|
|
257
268
|
<p>In this example we created a component manager called "Stats".
|
@@ -265,22 +276,21 @@ When defining attributes symbols should be used.</p>
|
|
265
276
|
|
266
277
|
<p>Now that we have a component manager we can make components from it like so:</p>
|
267
278
|
|
268
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
279
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>Stats</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
|
269
280
|
</code></pre>
|
270
281
|
|
271
|
-
<p>Or we can even
|
282
|
+
<p>Or we can even override the defaults when creating the component:</p>
|
272
283
|
|
273
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
284
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>Stats</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>armour:</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>steel</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span>
|
274
285
|
</code></pre>
|
275
286
|
|
276
|
-
<h3 id="accessing
|
287
|
+
<h3 id="accessing">Accessing</h3>
|
277
288
|
|
278
|
-
<p>
|
279
|
-
These IDs are only unique within the scope of their respective Component Managers.
|
280
|
-
Here is how we can get the ID, as well as how to access a Component from its Component Manager.</p>
|
289
|
+
<p>You can access components using any array method.</p>
|
281
290
|
|
282
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
283
|
-
<span class='ivar'>@component</span><span class='
|
291
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>Stats</span><span class='lbracket'>[</span><span class='int'>2</span><span class='rbracket'>]</span>
|
292
|
+
<span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>Stats</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
|
293
|
+
<span class='ivar'>@component</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>Stats</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='comment'># you can use iterators this way
|
284
294
|
</span></code></pre>
|
285
295
|
|
286
296
|
<h3 id="accessing-attributes-and-changing-them">Accessing Attributes and Changing Them</h3>
|
@@ -293,30 +303,26 @@ Here are the ways to edit attrubutes, followed by the ways to read them.</p>
|
|
293
303
|
</code></pre>
|
294
304
|
|
295
305
|
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span><span class='period'>.</span><span class='id identifier rubyid_hp'>hp</span> <span class='comment'># => 95
|
296
|
-
</span><span class='ivar'>@component</span><span class='period'>.</span><span class='id identifier
|
306
|
+
</span><span class='ivar'>@component</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span> <span class='comment'># => {armour: 'Leather', hp: 95}
|
297
307
|
</span></code></pre>
|
298
308
|
|
299
309
|
<h3 id="deleting-components">Deleting Components</h3>
|
300
310
|
|
301
|
-
<p>Deleting a Component is the same
|
311
|
+
<p>Deleting a Component is the same convention as deleting an Entity. When a Component is deleted referenced to it such as to entities are automatically cleared.</p>
|
302
312
|
|
303
313
|
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span>
|
304
314
|
</code></pre>
|
305
315
|
|
306
|
-
<h3 id="iterating-over-components">Iterating over Components</h3>
|
307
|
-
|
308
|
-
<p>When you make Systems you will want to be able to iterate over all Components of the same Component Manager(for example iterating over all sprites to render them). Here is how we do that:</p>
|
309
|
-
|
310
|
-
<pre class="code ruby"><code class="ruby"><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="FelFlame/Components.html" title="FelFlame::Components (class)">Components</a></span></span><span class='op'>::</span><span class='const'>Sprites</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>
|
311
|
-
<span class='comment'>#do something with components
|
312
|
-
</span><span class='kw'>end</span>
|
313
|
-
</code></pre>
|
314
|
-
|
315
316
|
<h3 id="accessing-components-attached-entities">Accessing Components' attached Entities</h3>
|
316
317
|
|
317
318
|
<p>Components also keep track of what Entities are using it. To access this list we do the following:</p>
|
318
319
|
|
319
320
|
<pre class="code ruby"><code class="ruby"><span class='ivar'>@component</span><span class='period'>.</span><span class='id identifier rubyid_entities'>entities</span> <span class='comment'># => [@entity1, @entity2, @entity3]
|
321
|
+
</span>
|
322
|
+
<span class='comment'># get the first entity attached.
|
323
|
+
</span><span class='comment'># this will throw a warning if there is more or less then
|
324
|
+
</span><span class='comment'># exactly one entity
|
325
|
+
</span><span class='ivar'>@component</span><span class='period'>.</span><span class='id identifier rubyid_entity'>entity</span> <span class='comment'># => @entity
|
320
326
|
</span></code></pre>
|
321
327
|
|
322
328
|
<h2 id="systems">Systems</h2>
|
@@ -325,24 +331,26 @@ Here are the ways to edit attrubutes, followed by the ways to read them.</p>
|
|
325
331
|
|
326
332
|
<p>We can create Systems like so:</p>
|
327
333
|
|
328
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
334
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="FelFlame/Systems.html#initialize-instance_method" title="FelFlame::Systems#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Render</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='int'>2</span><span class='rparen'>)</span> <span class='kw'>do</span>
|
329
335
|
<span class='comment'># Code and Logic
|
330
336
|
</span><span class='kw'>end</span>
|
331
337
|
</code></pre>
|
332
338
|
|
333
339
|
<p>The name we assign is how we can access the System, like so:</p>
|
334
340
|
|
335
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
341
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>Render</span>
|
336
342
|
</code></pre>
|
337
343
|
|
338
344
|
<p>Priority determines the order Systems should be executed, this is used for <code>Scenes</code> and the <code>Stage</code>.
|
339
345
|
The lower the number, the earlier a given System will be executed.
|
340
|
-
E.g priority 1 will go first, priority 2 will go second, etcetera.
|
346
|
+
E.g priority 1 will go first, priority 2 will go second, etcetera. </p>
|
347
|
+
|
348
|
+
<p>Both Scenes and Systems have a priority. System priority will decide the order it will be called inside of a Scene, which the Scene priority will decide the order it will be called inside of the Stage.</p>
|
341
349
|
|
342
350
|
<p>Often we will want to execute some logic on each Component in a given Component Manager so our code might look like this:</p>
|
343
351
|
|
344
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
345
|
-
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
352
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="FelFlame/Systems.html#initialize-instance_method" title="FelFlame::Systems#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Render</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='int'>2</span><span class='rparen'>)</span> <span class='kw'>do</span>
|
353
|
+
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Components.html" title="FelFlame::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'>Sprites</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>
|
346
354
|
<span class='comment'># do something with these components
|
347
355
|
</span> <span class='kw'>end</span>
|
348
356
|
<span class='kw'>end</span>
|
@@ -352,7 +360,7 @@ E.g priority 1 will go first, priority 2 will go second, etcetera. </p>
|
|
352
360
|
|
353
361
|
<p>After we create a System, it won't do anything on its own until we tell it to. Here is how:</p>
|
354
362
|
|
355
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
363
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>Render</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span>
|
356
364
|
</code></pre>
|
357
365
|
|
358
366
|
<p>Sometimes you might want to manually activate a System, but the more common way to have Systems be triggered is to use Scenes and the Stage or the alternative ways of execution.</p>
|
@@ -362,25 +370,25 @@ E.g priority 1 will go first, priority 2 will go second, etcetera. </p>
|
|
362
370
|
<p>Sometimes you want a System to automatically trigger when a special even happens. FelFlame can keep track of when a Component is added, removed, or when an attribute is changed and then execute Systems linked to these events. Here is how to create these links:</p>
|
363
371
|
|
364
372
|
<pre class="code ruby"><code class="ruby"><span class='comment'># When this Component is added to an Entity, this System will be called
|
365
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
373
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_trigger_when_added'>trigger_when_added</span><span class='lparen'>(</span><span class='ivar'>@component</span><span class='rparen'>)</span>
|
366
374
|
|
367
375
|
<span class='comment'># When this Component is removed from an Entity, this System will be called
|
368
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
376
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_trigger_when_removed'>trigger_when_removed</span><span class='lparen'>(</span><span class='ivar'>@component</span><span class='rparen'>)</span>
|
369
377
|
|
370
378
|
<span class='comment'># When this Component's health attribute is changed, this System will be called
|
371
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
379
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_trigger_when_is_set'>trigger_when_is_set</span><span class='lparen'>(</span><span class='ivar'>@component</span><span class='comma'>,</span> <span class='symbol'>:health</span><span class='rparen'>)</span>
|
372
380
|
</code></pre>
|
373
381
|
|
374
382
|
<p>If we want these triggers to happen for all Components that belong to specific Component Manager then we can do that instead:</p>
|
375
383
|
|
376
384
|
<pre class="code ruby"><code class="ruby"><span class='comment'># When a Component from this Component Manager is added to an Entity, this System will be called
|
377
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
385
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_trigger_when_added'>trigger_when_added</span><span class='lparen'>(</span><span class='ivar'>@component_manager</span><span class='rparen'>)</span>
|
378
386
|
|
379
387
|
<span class='comment'># When a Component from this Component Manager is removed from an Entity, this System will be called
|
380
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
388
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_trigger_when_removed'>trigger_when_removed</span><span class='lparen'>(</span><span class='ivar'>@component_manager</span><span class='rparen'>)</span>
|
381
389
|
|
382
390
|
<span class='comment'># When this Component's health attribute from this Component Manager is changed, this System will be called
|
383
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
391
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_trigger_when_is_set'>trigger_when_is_set</span><span class='lparen'>(</span><span class='ivar'>@component_manager</span><span class='comma'>,</span> <span class='symbol'>:health</span><span class='rparen'>)</span>
|
384
392
|
</code></pre>
|
385
393
|
|
386
394
|
<p>We can create any number of these links between Systems, Components, and Component Manangers as we like, simply call the method again with our other Components and Component Managers</p>
|
@@ -390,41 +398,41 @@ E.g priority 1 will go first, priority 2 will go second, etcetera. </p>
|
|
390
398
|
<p>If we wish to remove these links that we created, we can do that using the follwing function in any of the following ways:</p>
|
391
399
|
|
392
400
|
<pre class="code ruby"><code class="ruby"><span class='comment'># clears ALL triggers with this system
|
393
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
401
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span>
|
394
402
|
|
395
403
|
<span class='comment'># clears ALL triggers with this Component Manager
|
396
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
404
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component</span><span class='rparen'>)</span>
|
397
405
|
|
398
406
|
<span class='comment'># clear the 'trigger_when_added' for this Component
|
399
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
407
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component</span><span class='comma'>,</span> <span class='symbol'>:added</span><span class='rparen'>)</span>
|
400
408
|
|
401
409
|
<span class='comment'># clear the 'trigger_when_removed' for this Component
|
402
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
410
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component</span><span class='comma'>,</span> <span class='symbol'>:removed</span><span class='rparen'>)</span>
|
403
411
|
|
404
412
|
<span class='comment'># clear the 'trigger_when_is_set' for this Component specifically for the health attribute
|
405
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
413
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component</span><span class='comma'>,</span> <span class='symbol'>:is_set</span><span class='comma'>,</span> <span class='symbol'>:health</span><span class='rparen'>)</span>
|
406
414
|
</code></pre>
|
407
415
|
|
408
416
|
<p>Likewise we can do the same with Component Managers:</p>
|
409
417
|
|
410
418
|
<pre class="code ruby"><code class="ruby"><span class='comment'># clears ALL triggers with this Component
|
411
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
419
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component_manager</span><span class='rparen'>)</span>
|
412
420
|
|
413
421
|
<span class='comment'># clear the 'trigger_when_added' for this Component Manager
|
414
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
422
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component_manager</span><span class='comma'>,</span> <span class='symbol'>:added</span><span class='rparen'>)</span>
|
415
423
|
|
416
424
|
<span class='comment'># clear the 'trigger_when_removed' for this Component Manager
|
417
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
425
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component_manager</span><span class='comma'>,</span> <span class='symbol'>:removed</span><span class='rparen'>)</span>
|
418
426
|
|
419
427
|
<span class='comment'># clear the 'trigger_when_is_set' for this Component Manager specifically for the health attribute
|
420
|
-
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
428
|
+
</span><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_clear_triggers'>clear_triggers</span><span class='lparen'>(</span><span class='ivar'>@component_manager</span><span class='comma'>,</span> <span class='symbol'>:is_set</span><span class='comma'>,</span> <span class='symbol'>:health</span><span class='rparen'>)</span>
|
421
429
|
</code></pre>
|
422
430
|
|
423
431
|
<h3 id="redefinition">Redefinition</h3>
|
424
432
|
|
425
433
|
<p>If we wanted to change what code or logic a given System executes, we could do that with:</p>
|
426
434
|
|
427
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
435
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>PassiveRegen</span><span class='period'>.</span><span class='id identifier rubyid_redefine'>redefine</span> <span class='kw'>do</span>
|
428
436
|
<span class='comment'># Some new logic or code
|
429
437
|
</span><span class='kw'>end</span>
|
430
438
|
</code></pre>
|
@@ -435,28 +443,36 @@ E.g priority 1 will go first, priority 2 will go second, etcetera. </p>
|
|
435
443
|
|
436
444
|
<p>Once we have all the core parts of ECS, we will want to organize our Systems. To do this we will use Scenes to group up Systems so they can quickly be enabled or disabled. Note that <a href="#alternative-execution">Alternative Executions</a> will occur even if they are not part of a Scene. Here is how we make a new Scene:</p>
|
437
445
|
|
438
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@scene</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
446
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@scene</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Scenes.html" title="FelFlame::Scenes (class)">Scenes</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="FelFlame/Scenes.html#initialize-instance_method" title="FelFlame::Scenes#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>ExampleScene</span><span class='tstring_end'>'</span></span><span class='comma'>,</span> <span class='label'>priority:</span> <span class='int'>5</span><span class='rparen'>)</span>
|
439
447
|
</code></pre>
|
440
448
|
|
441
449
|
<h3 id="accessing">Accessing</h3>
|
442
450
|
|
443
451
|
<p>Just like other classes in FelFlame, the name we gave the Scene is how we access it:</p>
|
444
452
|
|
445
|
-
<pre class="code ruby"><code class="ruby"><span class='ivar'>@scene</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
453
|
+
<pre class="code ruby"><code class="ruby"><span class='ivar'>@scene</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Scenes.html" title="FelFlame::Scenes (class)">Scenes</a></span></span><span class='op'>::</span><span class='const'>ExampleScene</span>
|
446
454
|
</code></pre>
|
447
455
|
|
448
456
|
<h3 id="adding-systems">Adding Systems</h3>
|
449
457
|
|
450
458
|
<p>Adding Systems is simple. We can add as many as we want. In this example we add 3 different systems:</p>
|
451
459
|
|
452
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
460
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Scenes.html" title="FelFlame::Scenes (class)">Scenes</a></span></span><span class='op'>::</span><span class='const'>ExampleScene</span><span class='period'>.</span><span class='id identifier rubyid_add'>add</span><span class='lparen'>(</span>
|
461
|
+
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>Render</span><span class='comma'>,</span>
|
462
|
+
<span class='ivar'>@system2</span><span class='comma'>,</span>
|
463
|
+
<span class='ivar'>@system3</span>
|
464
|
+
<span class='rparen'>)</span>
|
453
465
|
</code></pre>
|
454
466
|
|
455
467
|
<h3 id="removing-systems">Removing Systems</h3>
|
456
468
|
|
457
|
-
<p>Removing Systems works
|
469
|
+
<p>Removing Systems works similarly:</p>
|
458
470
|
|
459
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
471
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Scenes.html" title="FelFlame::Scenes (class)">Scenes</a></span></span><span class='op'>::</span><span class='const'>ExampleScene</span><span class='period'>.</span><span class='id identifier rubyid_remove'>remove</span><span class='lparen'>(</span>
|
472
|
+
<span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Systems.html" title="FelFlame::Systems (class)">Systems</a></span></span><span class='op'>::</span><span class='const'>Render</span><span class='comma'>,</span>
|
473
|
+
<span class='ivar'>@system2</span><span class='comma'>,</span>
|
474
|
+
<span class='ivar'>@system3</span>
|
475
|
+
<span class='rparen'>)</span>
|
460
476
|
</code></pre>
|
461
477
|
|
462
478
|
<h3 id="clearing">Clearing</h3>
|
@@ -479,23 +495,45 @@ E.g priority 1 will go first, priority 2 will go second, etcetera. </p>
|
|
479
495
|
|
480
496
|
<h3 id="adding-scenes">Adding Scenes</h3>
|
481
497
|
|
482
|
-
<p>Finally we have the Stage. There is only a single Stage and we do not have to create it as it exists by default. By adding a Scene to the Stage we are saying that the Scene is active
|
498
|
+
<p>Finally we have the Stage. There is only a single Stage and we do not have to create it as it exists by default. By adding a Scene to the Stage we are saying that the Scene is 'active'. To add a Scene we do the following:</p>
|
483
499
|
|
484
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
500
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Stage.html" title="FelFlame::Stage (module)">Stage</a></span></span><span class='period'>.</span><span class='id identifier rubyid_add'><span class='object_link'><a href="FelFlame/Stage.html#add-class_method" title="FelFlame::Stage.add (method)">add</a></span></span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'>Scene</span><span class='op'>::</span><span class='const'>ExampleScene</span>
|
485
501
|
</code></pre>
|
486
502
|
|
487
503
|
<h3 id="removing-scenes">Removing Scenes</h3>
|
488
504
|
|
489
505
|
<p>Likewise we can remove Scenes:</p>
|
490
506
|
|
491
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
507
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Stage.html" title="FelFlame::Stage (module)">Stage</a></span></span><span class='period'>.</span><span class='id identifier rubyid_remove'><span class='object_link'><a href="FelFlame/Stage.html#remove-class_method" title="FelFlame::Stage.remove (method)">remove</a></span></span> <span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'>Scene</span><span class='op'>::</span><span class='const'>ExampleScene</span>
|
492
508
|
</code></pre>
|
493
509
|
|
494
510
|
<h3 id="executing">Executing</h3>
|
495
511
|
|
496
|
-
<p>On each frame of the game we want to execute the Stage once. When the Stage is executed it is progressing your game 1 frame forward. The Stage will
|
512
|
+
<p>On each frame of the game generally we will want to execute the Stage once. When the Stage is executed it is progressing your game 1 frame forward. The Stage will call all Scenes you added to it in the order of their priority. Here is how we do it:</p>
|
513
|
+
|
514
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Stage.html" title="FelFlame::Stage (module)">Stage</a></span></span><span class='period'>.</span><span class='id identifier rubyid_call'><span class='object_link'><a href="FelFlame/Stage.html#call-class_method" title="FelFlame::Stage.call (method)">call</a></span></span>
|
515
|
+
</code></pre>
|
516
|
+
|
517
|
+
<h2 id="order">Order</h2>
|
518
|
+
|
519
|
+
<h3 id="setting-the-order">Setting the order</h3>
|
520
|
+
|
521
|
+
<p>To set the order you just need to call <code>FelFlame::Order.sort</code> and pass Scenes or Systems in the parameters in the order you wish for them to execute</p>
|
522
|
+
|
523
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Order.html" title="FelFlame::Order (module)">Order</a></span></span><span class='period'>.</span><span class='id identifier rubyid_sort'><span class='object_link'><a href="FelFlame/Order.html#sort-class_method" title="FelFlame::Order.sort (method)">sort</a></span></span><span class='lparen'>(</span>
|
524
|
+
<span class='ivar'>@system1</span><span class='comma'>,</span>
|
525
|
+
<span class='ivar'>@system2</span><span class='comma'>,</span>
|
526
|
+
<span class='ivar'>@system3</span>
|
527
|
+
<span class='rparen'>)</span>
|
528
|
+
</code></pre>
|
529
|
+
|
530
|
+
<p>If you want some Scenes or Systems to have the same priority then just pass them as an array:</p>
|
497
531
|
|
498
|
-
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
532
|
+
<pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="FelFlame/Order.html" title="FelFlame::Order (module)">Order</a></span></span><span class='period'>.</span><span class='id identifier rubyid_sort'><span class='object_link'><a href="FelFlame/Order.html#sort-class_method" title="FelFlame::Order.sort (method)">sort</a></span></span><span class='lparen'>(</span>
|
533
|
+
<span class='ivar'>@scene1</span><span class='comma'>,</span>
|
534
|
+
<span class='lbracket'>[</span><span class='ivar'>@scene2_1</span><span class='comma'>,</span> <span class='ivar'>@scene2_2</span><span class='rbracket'>]</span><span class='comma'>,</span>
|
535
|
+
<span class='ivar'>@scene3</span>
|
536
|
+
<span class='rparen'>)</span>
|
499
537
|
</code></pre>
|
500
538
|
|
501
539
|
<h2 id="closing-notes">Closing Notes</h2>
|
@@ -512,7 +550,7 @@ E.g priority 1 will go first, priority 2 will go second, etcetera. </p>
|
|
512
550
|
</div></div>
|
513
551
|
|
514
552
|
<div id="footer">
|
515
|
-
Generated on Mon
|
553
|
+
Generated on Mon Jan 3 08:23:03 2022 by
|
516
554
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
517
555
|
0.9.26 (ruby-2.7.3).
|
518
556
|
</div>
|