felflame 3.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/method_list.html
CHANGED
@@ -44,22 +44,6 @@
|
|
44
44
|
<ul id="full_list" class="method">
|
45
45
|
|
46
46
|
|
47
|
-
<li class="odd ">
|
48
|
-
<div class="item">
|
49
|
-
<span class='object_link'><a href="FelFlame/Entities.html#[]-class_method" title="FelFlame::Entities.[] (method)">[]</a></span>
|
50
|
-
<small>FelFlame::Entities</small>
|
51
|
-
</div>
|
52
|
-
</li>
|
53
|
-
|
54
|
-
|
55
|
-
<li class="even ">
|
56
|
-
<div class="item">
|
57
|
-
<span class='object_link'><a href="FelFlame/ComponentManager.html#[]-class_method" title="FelFlame::ComponentManager.[] (method)">[]</a></span>
|
58
|
-
<small>FelFlame::ComponentManager</small>
|
59
|
-
</div>
|
60
|
-
</li>
|
61
|
-
|
62
|
-
|
63
47
|
<li class="odd ">
|
64
48
|
<div class="item">
|
65
49
|
<span class='object_link'><a href="FelFlame/Scenes.html#add-instance_method" title="FelFlame::Scenes#add (method)">#add</a></span>
|
@@ -109,14 +93,6 @@
|
|
109
93
|
|
110
94
|
|
111
95
|
<li class="odd ">
|
112
|
-
<div class="item">
|
113
|
-
<span class='object_link'><a href="FelFlame/ComponentManager.html#attr_changed_trigger_systems-instance_method" title="FelFlame::ComponentManager#attr_changed_trigger_systems (method)">#attr_changed_trigger_systems</a></span>
|
114
|
-
<small>FelFlame::ComponentManager</small>
|
115
|
-
</div>
|
116
|
-
</li>
|
117
|
-
|
118
|
-
|
119
|
-
<li class="even ">
|
120
96
|
<div class="item">
|
121
97
|
<span class='object_link'><a href="FelFlame/Systems.html#attr_triggers-instance_method" title="FelFlame::Systems#attr_triggers (method)">#attr_triggers</a></span>
|
122
98
|
<small>FelFlame::Systems</small>
|
@@ -124,17 +100,9 @@
|
|
124
100
|
</li>
|
125
101
|
|
126
102
|
|
127
|
-
<li class="odd ">
|
128
|
-
<div class="item">
|
129
|
-
<span class='object_link'><a href="FelFlame/ComponentManager.html#attr_triggers-instance_method" title="FelFlame::ComponentManager#attr_triggers (method)">#attr_triggers</a></span>
|
130
|
-
<small>FelFlame::ComponentManager</small>
|
131
|
-
</div>
|
132
|
-
</li>
|
133
|
-
|
134
|
-
|
135
103
|
<li class="even ">
|
136
104
|
<div class="item">
|
137
|
-
<span class='object_link'><a href="FelFlame/ComponentManager.html#attr_triggers-
|
105
|
+
<span class='object_link'><a href="FelFlame/ComponentManager.html#attr_triggers-instance_method" title="FelFlame::ComponentManager#attr_triggers (method)">#attr_triggers</a></span>
|
138
106
|
<small>FelFlame::ComponentManager</small>
|
139
107
|
</div>
|
140
108
|
</li>
|
@@ -142,7 +110,7 @@
|
|
142
110
|
|
143
111
|
<li class="odd ">
|
144
112
|
<div class="item">
|
145
|
-
<span class='object_link'><a href="FelFlame/ComponentManager.html#
|
113
|
+
<span class='object_link'><a href="FelFlame/ComponentManager.html#attr_triggers-class_method" title="FelFlame::ComponentManager.attr_triggers (method)">attr_triggers</a></span>
|
146
114
|
<small>FelFlame::ComponentManager</small>
|
147
115
|
</div>
|
148
116
|
</li>
|
@@ -206,7 +174,7 @@
|
|
206
174
|
|
207
175
|
<li class="odd ">
|
208
176
|
<div class="item">
|
209
|
-
<span class='object_link'><a href="FelFlame/Entities.html#
|
177
|
+
<span class='object_link'><a href="FelFlame/Entities.html#component-instance_method" title="FelFlame::Entities#component (method)">#component</a></span>
|
210
178
|
<small>FelFlame::Entities</small>
|
211
179
|
</div>
|
212
180
|
</li>
|
@@ -214,15 +182,15 @@
|
|
214
182
|
|
215
183
|
<li class="even ">
|
216
184
|
<div class="item">
|
217
|
-
<span class='object_link'><a href="FelFlame/
|
218
|
-
<small>FelFlame::
|
185
|
+
<span class='object_link'><a href="FelFlame/Entities.html#components-instance_method" title="FelFlame::Entities#components (method)">#components</a></span>
|
186
|
+
<small>FelFlame::Entities</small>
|
219
187
|
</div>
|
220
188
|
</li>
|
221
189
|
|
222
190
|
|
223
191
|
<li class="odd ">
|
224
192
|
<div class="item">
|
225
|
-
<span class='object_link'><a href="FelFlame/Systems.html#
|
193
|
+
<span class='object_link'><a href="FelFlame/Systems.html#const_cache-class_method" title="FelFlame::Systems.const_cache (method)">const_cache</a></span>
|
226
194
|
<small>FelFlame::Systems</small>
|
227
195
|
</div>
|
228
196
|
</li>
|
@@ -244,38 +212,6 @@
|
|
244
212
|
</li>
|
245
213
|
|
246
214
|
|
247
|
-
<li class="even ">
|
248
|
-
<div class="item">
|
249
|
-
<span class='object_link'><a href="FelFlame/Entities.html#each-class_method" title="FelFlame::Entities.each (method)">each</a></span>
|
250
|
-
<small>FelFlame::Entities</small>
|
251
|
-
</div>
|
252
|
-
</li>
|
253
|
-
|
254
|
-
|
255
|
-
<li class="odd ">
|
256
|
-
<div class="item">
|
257
|
-
<span class='object_link'><a href="FelFlame/Systems.html#each-class_method" title="FelFlame::Systems.each (method)">each</a></span>
|
258
|
-
<small>FelFlame::Systems</small>
|
259
|
-
</div>
|
260
|
-
</li>
|
261
|
-
|
262
|
-
|
263
|
-
<li class="even ">
|
264
|
-
<div class="item">
|
265
|
-
<span class='object_link'><a href="FelFlame/Components.html#each-class_method" title="FelFlame::Components.each (method)">each</a></span>
|
266
|
-
<small>FelFlame::Components</small>
|
267
|
-
</div>
|
268
|
-
</li>
|
269
|
-
|
270
|
-
|
271
|
-
<li class="odd ">
|
272
|
-
<div class="item">
|
273
|
-
<span class='object_link'><a href="FelFlame/ComponentManager.html#each-class_method" title="FelFlame::ComponentManager.each (method)">each</a></span>
|
274
|
-
<small>FelFlame::ComponentManager</small>
|
275
|
-
</div>
|
276
|
-
</li>
|
277
|
-
|
278
|
-
|
279
215
|
<li class="even ">
|
280
216
|
<div class="item">
|
281
217
|
<span class='object_link'><a href="FelFlame/ComponentManager.html#entities-instance_method" title="FelFlame::ComponentManager#entities (method)">#entities</a></span>
|
@@ -286,21 +222,13 @@
|
|
286
222
|
|
287
223
|
<li class="odd ">
|
288
224
|
<div class="item">
|
289
|
-
<span class='object_link'><a href="FelFlame/
|
290
|
-
<small>FelFlame::Entities</small>
|
291
|
-
</div>
|
292
|
-
</li>
|
293
|
-
|
294
|
-
|
295
|
-
<li class="even ">
|
296
|
-
<div class="item">
|
297
|
-
<span class='object_link'><a href="FelFlame/ComponentManager.html#id-instance_method" title="FelFlame::ComponentManager#id (method)">#id</a></span>
|
225
|
+
<span class='object_link'><a href="FelFlame/ComponentManager.html#entity-instance_method" title="FelFlame::ComponentManager#entity (method)">#entity</a></span>
|
298
226
|
<small>FelFlame::ComponentManager</small>
|
299
227
|
</div>
|
300
228
|
</li>
|
301
229
|
|
302
230
|
|
303
|
-
<li class="
|
231
|
+
<li class="even ">
|
304
232
|
<div class="item">
|
305
233
|
<span class='object_link'><a href="FelFlame/Scenes.html#initialize-instance_method" title="FelFlame::Scenes#initialize (method)">#initialize</a></span>
|
306
234
|
<small>FelFlame::Scenes</small>
|
@@ -308,7 +236,7 @@
|
|
308
236
|
</li>
|
309
237
|
|
310
238
|
|
311
|
-
<li class="
|
239
|
+
<li class="odd ">
|
312
240
|
<div class="item">
|
313
241
|
<span class='object_link'><a href="FelFlame/Entities.html#initialize-instance_method" title="FelFlame::Entities#initialize (method)">#initialize</a></span>
|
314
242
|
<small>FelFlame::Entities</small>
|
@@ -316,7 +244,7 @@
|
|
316
244
|
</li>
|
317
245
|
|
318
246
|
|
319
|
-
<li class="
|
247
|
+
<li class="even ">
|
320
248
|
<div class="item">
|
321
249
|
<span class='object_link'><a href="FelFlame/Systems.html#initialize-instance_method" title="FelFlame::Systems#initialize (method)">#initialize</a></span>
|
322
250
|
<small>FelFlame::Systems</small>
|
@@ -324,7 +252,7 @@
|
|
324
252
|
</li>
|
325
253
|
|
326
254
|
|
327
|
-
<li class="
|
255
|
+
<li class="odd ">
|
328
256
|
<div class="item">
|
329
257
|
<span class='object_link'><a href="FelFlame/ComponentManager.html#initialize-instance_method" title="FelFlame::ComponentManager#initialize (method)">#initialize</a></span>
|
330
258
|
<small>FelFlame::ComponentManager</small>
|
@@ -332,7 +260,7 @@
|
|
332
260
|
</li>
|
333
261
|
|
334
262
|
|
335
|
-
<li class="
|
263
|
+
<li class="even ">
|
336
264
|
<div class="item">
|
337
265
|
<span class='object_link'><a href="FelFlame/Components.html#new-class_method" title="FelFlame::Components.new (method)">new</a></span>
|
338
266
|
<small>FelFlame::Components</small>
|
@@ -340,6 +268,14 @@
|
|
340
268
|
</li>
|
341
269
|
|
342
270
|
|
271
|
+
<li class="odd ">
|
272
|
+
<div class="item">
|
273
|
+
<span class='object_link'><a href="FelFlame/Scenes.html#priority-instance_method" title="FelFlame::Scenes#priority (method)">#priority</a></span>
|
274
|
+
<small>FelFlame::Scenes</small>
|
275
|
+
</div>
|
276
|
+
</li>
|
277
|
+
|
278
|
+
|
343
279
|
<li class="even ">
|
344
280
|
<div class="item">
|
345
281
|
<span class='object_link'><a href="FelFlame/Systems.html#priority-instance_method" title="FelFlame::Systems#priority (method)">#priority</a></span>
|
@@ -414,29 +350,37 @@
|
|
414
350
|
|
415
351
|
<li class="odd ">
|
416
352
|
<div class="item">
|
417
|
-
<span class='object_link'><a href="FelFlame/
|
418
|
-
<small>FelFlame::
|
353
|
+
<span class='object_link'><a href="FelFlame/Systems.html#scenes-instance_method" title="FelFlame::Systems#scenes (method)">#scenes</a></span>
|
354
|
+
<small>FelFlame::Systems</small>
|
419
355
|
</div>
|
420
356
|
</li>
|
421
357
|
|
422
358
|
|
423
359
|
<li class="even ">
|
424
360
|
<div class="item">
|
425
|
-
<span class='object_link'><a href="FelFlame/
|
426
|
-
<small>FelFlame::
|
361
|
+
<span class='object_link'><a href="FelFlame/Order.html#sort-class_method" title="FelFlame::Order.sort (method)">sort</a></span>
|
362
|
+
<small>FelFlame::Order</small>
|
427
363
|
</div>
|
428
364
|
</li>
|
429
365
|
|
430
366
|
|
431
367
|
<li class="odd ">
|
432
368
|
<div class="item">
|
433
|
-
<span class='object_link'><a href="FelFlame/
|
434
|
-
<small>FelFlame::
|
369
|
+
<span class='object_link'><a href="FelFlame/Scenes.html#systems-instance_method" title="FelFlame::Scenes#systems (method)">#systems</a></span>
|
370
|
+
<small>FelFlame::Scenes</small>
|
435
371
|
</div>
|
436
372
|
</li>
|
437
373
|
|
438
374
|
|
439
375
|
<li class="even ">
|
376
|
+
<div class="item">
|
377
|
+
<span class='object_link'><a href="FelFlame/ComponentManager.html#to_h-instance_method" title="FelFlame::ComponentManager#to_h (method)">#to_h</a></span>
|
378
|
+
<small>FelFlame::ComponentManager</small>
|
379
|
+
</div>
|
380
|
+
</li>
|
381
|
+
|
382
|
+
|
383
|
+
<li class="odd ">
|
440
384
|
<div class="item">
|
441
385
|
<span class='object_link'><a href="FelFlame/Systems.html#trigger_when_added-instance_method" title="FelFlame::Systems#trigger_when_added (method)">#trigger_when_added</a></span>
|
442
386
|
<small>FelFlame::Systems</small>
|
@@ -444,7 +388,7 @@
|
|
444
388
|
</li>
|
445
389
|
|
446
390
|
|
447
|
-
<li class="
|
391
|
+
<li class="even ">
|
448
392
|
<div class="item">
|
449
393
|
<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>
|
450
394
|
<small>FelFlame::Systems</small>
|
@@ -452,7 +396,7 @@
|
|
452
396
|
</li>
|
453
397
|
|
454
398
|
|
455
|
-
<li class="
|
399
|
+
<li class="odd ">
|
456
400
|
<div class="item">
|
457
401
|
<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>
|
458
402
|
<small>FelFlame::Systems</small>
|
@@ -460,7 +404,7 @@
|
|
460
404
|
</li>
|
461
405
|
|
462
406
|
|
463
|
-
<li class="
|
407
|
+
<li class="even ">
|
464
408
|
<div class="item">
|
465
409
|
<span class='object_link'><a href="FelFlame/ComponentManager.html#update_attrs-instance_method" title="FelFlame::ComponentManager#update_attrs (method)">#update_attrs</a></span>
|
466
410
|
<small>FelFlame::ComponentManager</small>
|
@@ -82,12 +82,10 @@
|
|
82
82
|
<p class="children">
|
83
83
|
|
84
84
|
|
85
|
-
<strong class="modules">Modules:</strong> <span class='object_link'><a href="Felflame_.html" title="Felflame (module)">Felflame</a></span>
|
85
|
+
<strong class="modules">Modules:</strong> <span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span>, <span class='object_link'><a href="Felflame_.html" title="Felflame (module)">Felflame</a></span>
|
86
86
|
|
87
87
|
|
88
88
|
|
89
|
-
<strong class="classes">Classes:</strong> <span class='object_link'><a href="FelFlame.html" title="FelFlame (class)">FelFlame</a></span>
|
90
|
-
|
91
89
|
|
92
90
|
</p>
|
93
91
|
|
@@ -103,7 +101,7 @@
|
|
103
101
|
<div class="docstring">
|
104
102
|
<div class="discussion">
|
105
103
|
|
106
|
-
<p>An alias for <span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
104
|
+
<p>An alias for <span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></p>
|
107
105
|
|
108
106
|
|
109
107
|
</div>
|
@@ -113,7 +111,7 @@
|
|
113
111
|
|
114
112
|
</div>
|
115
113
|
</dt>
|
116
|
-
<dd><pre class="code"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (
|
114
|
+
<dd><pre class="code"><span class='const'><span class='object_link'><a href="FelFlame.html" title="FelFlame (module)">FelFlame</a></span></span></pre></dd>
|
117
115
|
|
118
116
|
</dl>
|
119
117
|
|
@@ -129,7 +127,7 @@
|
|
129
127
|
</div>
|
130
128
|
|
131
129
|
<div id="footer">
|
132
|
-
Generated on Mon
|
130
|
+
Generated on Mon Jan 3 08:23:04 2022 by
|
133
131
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
134
132
|
0.9.26 (ruby-2.7.3).
|
135
133
|
</div>
|
data/felflame.gemspec
CHANGED
@@ -1,44 +1,44 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative 'lib/felflame/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name =
|
6
|
+
spec.name = 'felflame'
|
7
7
|
spec.version = Felflame::VERSION
|
8
|
-
spec.authors = [
|
9
|
-
spec.email = [
|
8
|
+
spec.authors = ['Tradam']
|
9
|
+
spec.email = ['felflame@tradam.dev']
|
10
10
|
|
11
|
-
spec.summary =
|
12
|
-
#spec.description = "TODO: Write a longer description or delete this line."
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
15
|
-
spec.required_ruby_version =
|
11
|
+
spec.summary = 'The Engine Agnostic ECS Ruby Framework'
|
12
|
+
# spec.description = "TODO: Write a longer description or delete this line."
|
13
|
+
spec.homepage = 'https://felflame.tradam.fyi'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
spec.required_ruby_version = '>= 2.4.0'
|
16
16
|
|
17
|
-
#spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
17
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
18
18
|
|
19
|
-
spec.metadata[
|
20
|
-
spec.metadata[
|
21
|
-
#spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
19
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
20
|
+
spec.metadata['source_code_uri'] = 'https://github.com/realtradam/FelFlame'
|
21
|
+
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
22
22
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
25
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
26
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features|deprecated|codeclimate|logos)/}) }
|
27
27
|
end
|
28
|
-
spec.bindir =
|
28
|
+
spec.bindir = 'exe'
|
29
29
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
30
|
-
spec.require_paths = [
|
30
|
+
spec.require_paths = ['lib']
|
31
31
|
|
32
32
|
# Uncomment to register a new dependency of your gem
|
33
33
|
# spec.add_dependency "example-gem", "~> 1.0"
|
34
|
-
spec.add_development_dependency 'minitest-reporters', '~> 1.4', '>= 1.4.3'
|
34
|
+
spec.add_development_dependency 'minitest-reporters', '~> 1.4', '>= 1.4.3' # , require: false
|
35
|
+
spec.add_development_dependency 'redcarpet', '~> 3.5', '>= 3.5.1' # , require: false
|
35
36
|
spec.add_development_dependency 'rspec', '~> 3.10'
|
36
|
-
spec.add_development_dependency 'simplecov', '~> 0.21.2'#, require: false
|
37
|
-
spec.add_development_dependency 'simplecov-console', '~> 0.9.1'
|
38
|
-
spec.add_development_dependency 'simplecov_json_formatter', '~> 0.1.3'#, require: false
|
39
|
-
spec.add_development_dependency 'redcarpet', '~> 3.5', '>= 3.5.1'#, require: false
|
40
|
-
spec.add_development_dependency 'yard', '~> 0.9.26'#, require: false
|
41
37
|
spec.add_development_dependency 'rubocop', '~> 1.7'
|
38
|
+
spec.add_development_dependency 'simplecov', '~> 0.21.2' # , require: false
|
39
|
+
spec.add_development_dependency 'simplecov-console', '~> 0.9.1'
|
40
|
+
spec.add_development_dependency 'simplecov_json_formatter', '~> 0.1.3' # , require: false
|
41
|
+
spec.add_development_dependency 'yard', '~> 0.9.26' # , require: false
|
42
42
|
|
43
43
|
# For more information and examples about making a new gem, checkout our
|
44
44
|
# guide at: https://bundler.io/guides/creating_gem.html
|
@@ -1,8 +1,9 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FelFlame
|
4
|
+
module Components
|
3
5
|
@component_map = []
|
4
|
-
class <<self
|
5
|
-
include Enumerable
|
6
|
+
class << self
|
6
7
|
# Creates a new {FelFlame::ComponentManager component manager}.
|
7
8
|
#
|
8
9
|
# @example
|
@@ -21,13 +22,14 @@ class FelFlame
|
|
21
22
|
raise(NameError.new, "Component Manager '#{component_name}' is already defined")
|
22
23
|
end
|
23
24
|
|
24
|
-
|
25
25
|
const_set(component_name, Class.new(FelFlame::ComponentManager) {})
|
26
|
+
update_const_cache
|
26
27
|
|
27
28
|
attrs.each do |attr|
|
28
|
-
if FelFlame::Components.const_get(component_name).method_defined?(
|
29
|
-
raise NameError
|
29
|
+
if FelFlame::Components.const_get(component_name).method_defined?(attr.to_s) || FelFlame::Components.const_get(component_name).method_defined?("#{attr}=")
|
30
|
+
raise NameError, "The attribute name \"#{attr}\" is already a method"
|
30
31
|
end
|
32
|
+
|
31
33
|
FelFlame::Components.const_get(component_name).attr_accessor attr
|
32
34
|
end
|
33
35
|
attrs_with_defaults.each do |attr, _default|
|
@@ -46,28 +48,54 @@ class FelFlame
|
|
46
48
|
FelFlame::Components.const_get(component_name)
|
47
49
|
end
|
48
50
|
|
49
|
-
#
|
50
|
-
#
|
51
|
-
|
52
|
-
|
51
|
+
# Stores the components managers in {FelFlame::Components}. This
|
52
|
+
# is needed because calling `FelFlame::Components.constants`
|
53
|
+
# will not let you iterate over the value of the constants
|
54
|
+
# but will instead give you an array of symbols. This caches
|
55
|
+
# the convertion of those symbols to the actual value of the
|
56
|
+
# constants
|
57
|
+
# @!visibility private
|
58
|
+
def const_cache
|
59
|
+
@const_cache || update_const_cache
|
60
|
+
end
|
61
|
+
|
62
|
+
# Updates the array that stores the constants.
|
63
|
+
# Used internally by FelFlame
|
64
|
+
# @!visibility private
|
65
|
+
def update_const_cache
|
66
|
+
@const_cache = constants.map do |constant|
|
67
|
+
const_get constant
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Forwards undefined methods to the array of constants
|
72
|
+
# if the array can handle the request. Otherwise tells
|
73
|
+
# the programmer their code errored
|
74
|
+
# @!visibility private
|
75
|
+
def respond_to_missing?(method, *)
|
76
|
+
if const_cache.respond_to? method
|
77
|
+
true
|
78
|
+
else
|
79
|
+
super
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Makes component module behave like arrays with additional
|
84
|
+
# methods for managing the array
|
85
|
+
# @!visibility private
|
86
|
+
def method_missing(method, *args, **kwargs, &block)
|
87
|
+
if const_cache.respond_to? method
|
88
|
+
const_cache.send(method, *args, **kwargs, &block)
|
89
|
+
else
|
90
|
+
super
|
91
|
+
end
|
53
92
|
end
|
54
93
|
end
|
55
94
|
end
|
56
95
|
|
57
96
|
# Component Managers are what is used to create individual components which can be attached to entities.
|
58
|
-
# 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 {#
|
97
|
+
# 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 {#to_h} and {#update_attrs} methods instead.
|
59
98
|
class ComponentManager
|
60
|
-
|
61
|
-
# Holds the {id unique ID} of a component. The {id ID} is only unique within the scope of the component manager it was created from.
|
62
|
-
# @return [Integer]
|
63
|
-
attr_reader :id
|
64
|
-
|
65
|
-
# A seperate attr_writer was made for documentation readability reasons.
|
66
|
-
# Yard will list attr_reader is readonly which is my intention.
|
67
|
-
# This value needs to be changable as it is set by other functions.
|
68
|
-
# @!visibility private
|
69
|
-
attr_writer :id
|
70
|
-
|
71
99
|
# Allows overwriting the storage of triggers, such as for clearing.
|
72
100
|
# This method should generally only need to be used internally and
|
73
101
|
# not by a game developer.
|
@@ -104,24 +132,40 @@ class FelFlame
|
|
104
132
|
def initialize(**attrs)
|
105
133
|
# Prepare the object
|
106
134
|
# (this is a function created with metaprogramming
|
107
|
-
# in FelFlame::Components
|
135
|
+
# in FelFlame::Components)
|
108
136
|
set_defaults
|
109
137
|
|
110
|
-
# Generate ID
|
111
|
-
new_id = self.class.data.find_index { |i| i.nil? }
|
112
|
-
new_id = self.class.data.size if new_id.nil?
|
113
|
-
@id = new_id
|
114
|
-
|
115
138
|
# Fill params
|
116
139
|
attrs.each do |key, value|
|
117
140
|
send "#{key}=", value
|
118
141
|
end
|
119
142
|
|
120
143
|
# Save Component
|
121
|
-
self.class.
|
144
|
+
self.class.push self
|
122
145
|
end
|
123
146
|
|
124
|
-
class <<self
|
147
|
+
class << self
|
148
|
+
# Makes component managers behave like arrays with additional
|
149
|
+
# methods for managing the array
|
150
|
+
# @!visibility private
|
151
|
+
def respond_to_missing?(method, *)
|
152
|
+
if _data.respond_to? method
|
153
|
+
true
|
154
|
+
else
|
155
|
+
super
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
# Makes component managers behave like arrays with additional
|
160
|
+
# methods for managing the array
|
161
|
+
# @!visibility private
|
162
|
+
def method_missing(method, *args, **kwargs, &block)
|
163
|
+
if _data.respond_to? method
|
164
|
+
_data.send(method, *args, **kwargs, &block)
|
165
|
+
else
|
166
|
+
super
|
167
|
+
end
|
168
|
+
end
|
125
169
|
|
126
170
|
# Allows overwriting the storage of triggers, such as for clearing.
|
127
171
|
# This method should generally only need to be used internally and
|
@@ -155,41 +199,28 @@ class FelFlame
|
|
155
199
|
|
156
200
|
# @return [Array<Component>] Array of all Components that belong to a given component manager
|
157
201
|
# @!visibility private
|
158
|
-
def
|
202
|
+
def _data
|
159
203
|
@data ||= []
|
160
204
|
end
|
161
|
-
|
162
|
-
# Gets a Component from the given {id unique ID}. Usage is simular to how an Array lookup works.
|
163
|
-
#
|
164
|
-
# @example
|
165
|
-
# # this gets the 'Health' Component with ID 7
|
166
|
-
# FelFlame::Components::Health[7]
|
167
|
-
# @param component_id [Integer]
|
168
|
-
# @return [Component] Returns the Component that uses the given unique {id ID}, nil if there is no Component associated with the given {id ID}
|
169
|
-
def [](component_id)
|
170
|
-
data[component_id]
|
171
|
-
end
|
172
|
-
|
173
|
-
# Iterates over all components within the component manager.
|
174
|
-
# Special Enumerable methods like +map+ or +each_with_index+ are not implemented
|
175
|
-
# @return [Enumerator]
|
176
|
-
def each(&block)
|
177
|
-
data.compact.each(&block)
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
# An alias for the {id ID Reader}
|
182
|
-
# @return [Integer]
|
183
|
-
def to_i
|
184
|
-
id
|
185
205
|
end
|
186
206
|
|
187
|
-
#
|
188
|
-
# @return [Array<
|
207
|
+
# Entities that have this component
|
208
|
+
# @return [Array<Component>]
|
189
209
|
def entities
|
190
210
|
@entities ||= []
|
191
211
|
end
|
192
212
|
|
213
|
+
# A single entity. Use this if you expect the component to only belong to one entity and you want to access it.
|
214
|
+
# @return [Component]
|
215
|
+
def entity
|
216
|
+
if entities.empty?
|
217
|
+
Warning.warn("This component belongs to NO entities but you called the method that is intended for components belonging to a single entity.\nYou may have a bug in your logic.")
|
218
|
+
elsif entities.length > 1
|
219
|
+
Warning.warn("This component belongs to MANY entities but you called the method that is intended for components belonging to a single entity.\nYou may have a bug in your logic.")
|
220
|
+
end
|
221
|
+
entities.first
|
222
|
+
end
|
223
|
+
|
193
224
|
# Update attribute values using a hash or keywords.
|
194
225
|
# @return [Hash<Symbol, Value>] Hash of updated attributes
|
195
226
|
def update_attrs(**opts)
|
@@ -200,39 +231,35 @@ class FelFlame
|
|
200
231
|
|
201
232
|
# Execute systems that have been added to execute on variable change
|
202
233
|
# @return [Boolean] +true+
|
234
|
+
# @!visibility private
|
203
235
|
def attr_changed_trigger_systems(attr)
|
204
236
|
systems_to_execute = self.class.attr_triggers[attr]
|
205
237
|
systems_to_execute = [] if systems_to_execute.nil?
|
206
238
|
|
207
239
|
systems_to_execute |= attr_triggers[attr] unless attr_triggers[attr].nil?
|
208
240
|
|
209
|
-
systems_to_execute.sort_by(&:priority).
|
241
|
+
systems_to_execute.sort_by(&:priority).reverse_each(&:call)
|
210
242
|
true
|
211
243
|
end
|
212
244
|
|
213
|
-
# Removes this component from the list and purges all references to this Component from other Entities, as well as its
|
245
|
+
# Removes this component from the list and purges all references to this Component from other Entities, as well as its data.
|
214
246
|
# @return [Boolean] +true+.
|
215
247
|
def delete
|
216
248
|
addition_triggers.each do |system|
|
217
249
|
system.clear_triggers component_or_manager: self
|
218
250
|
end
|
219
|
-
|
220
|
-
# the remove command is called, breaking the loop if it
|
221
|
-
# wasn't referencing a clone(will get Nil errors)
|
222
|
-
iter = entities.map(&:clone)
|
223
|
-
iter.each do |entity|
|
224
|
-
#FelFlame::Entities[entity_id].remove self #unless FelFlame::Entities[entity_id].nil?
|
251
|
+
entities.reverse_each do |entity|
|
225
252
|
entity.remove self
|
226
253
|
end
|
227
|
-
self.class.
|
254
|
+
self.class._data.delete self
|
228
255
|
instance_variables.each do |var|
|
229
256
|
instance_variable_set(var, nil)
|
230
257
|
end
|
231
258
|
true
|
232
259
|
end
|
233
260
|
|
234
|
-
# @return [Hash<Symbol, Value>] A hash, where all the keys are attributes
|
235
|
-
def
|
261
|
+
# @return [Hash<Symbol, Value>] A hash, where all the keys are attributes storing their respective values.
|
262
|
+
def to_h
|
236
263
|
return_hash = instance_variables.each_with_object({}) do |key, final|
|
237
264
|
final[key.to_s.delete_prefix('@').to_sym] = instance_variable_get(key)
|
238
265
|
end
|
@@ -243,8 +270,8 @@ class FelFlame
|
|
243
270
|
# Export all data into a JSON String, which could then later be loaded or saved to a file
|
244
271
|
# TODO: This function is not yet complete
|
245
272
|
# @return [String] a JSON formatted String
|
246
|
-
#def to_json
|
273
|
+
# def to_json
|
247
274
|
# # should return a json or hash of all data in this component
|
248
|
-
#end
|
275
|
+
# end
|
249
276
|
end
|
250
277
|
end
|