fantasy 0.1.13 → 0.1.17

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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +22 -1
  3. data/.yardopts +4 -0
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +55 -0
  7. data/README.md +14 -6
  8. data/docs/Actor.html +2737 -0
  9. data/docs/Background.html +961 -0
  10. data/docs/Camera.html +791 -0
  11. data/docs/Clock.html +753 -0
  12. data/docs/Color.html +776 -0
  13. data/docs/Coordinates.html +730 -0
  14. data/docs/Cursor.html +752 -0
  15. data/docs/Disk.html +236 -0
  16. data/docs/Draggable.html +198 -0
  17. data/docs/Fantasy.html +121 -0
  18. data/docs/Game.html +904 -0
  19. data/docs/Global.html +2791 -0
  20. data/docs/Gravitier.html +179 -0
  21. data/docs/HudImage.html +979 -0
  22. data/docs/HudText.html +1151 -0
  23. data/docs/Image.html +506 -0
  24. data/docs/Jumper.html +189 -0
  25. data/docs/Mouse.html +226 -0
  26. data/docs/MoveByCursor.html +374 -0
  27. data/docs/MoveByDirection.html +179 -0
  28. data/docs/Mover.html +305 -0
  29. data/docs/Music.html +524 -0
  30. data/docs/Shape.html +1057 -0
  31. data/docs/Sound.html +374 -0
  32. data/docs/Tilemap.html +491 -0
  33. data/docs/Tween.html +186 -0
  34. data/docs/UserInputs.html +879 -0
  35. data/docs/Utils.html +345 -0
  36. data/docs/_index.html +346 -0
  37. data/docs/class_list.html +51 -0
  38. data/docs/css/common.css +1 -0
  39. data/docs/css/full_list.css +58 -0
  40. data/docs/css/style.css +497 -0
  41. data/docs/file.CHANGELOG.html +121 -0
  42. data/docs/file.README.html +599 -0
  43. data/docs/file_list.html +61 -0
  44. data/docs/frames.html +17 -0
  45. data/docs/index.html +599 -0
  46. data/docs/js/app.js +314 -0
  47. data/docs/js/full_list.js +216 -0
  48. data/docs/js/jquery.js +4 -0
  49. data/docs/method_list.html +1931 -0
  50. data/docs/top-level-namespace.html +978 -0
  51. data/lib/fantasy/actor.rb +455 -123
  52. data/lib/fantasy/background.rb +109 -13
  53. data/lib/fantasy/base.rb +113 -1
  54. data/lib/fantasy/camera.rb +95 -11
  55. data/lib/fantasy/clock.rb +4 -2
  56. data/lib/fantasy/color.rb +158 -153
  57. data/lib/fantasy/coordinates.rb +5 -9
  58. data/lib/fantasy/cursor.rb +2 -1
  59. data/lib/fantasy/disk.rb +12 -8
  60. data/lib/fantasy/draggable.rb +22 -1
  61. data/lib/fantasy/global.rb +59 -31
  62. data/lib/fantasy/hud_image.rb +5 -3
  63. data/lib/fantasy/hud_text.rb +6 -2
  64. data/lib/fantasy/image.rb +12 -4
  65. data/lib/fantasy/includes/gravitier.rb +2 -0
  66. data/lib/fantasy/includes/jumper.rb +3 -2
  67. data/lib/fantasy/includes/log.rb +12 -0
  68. data/lib/fantasy/includes/move_by_cursors.rb +24 -15
  69. data/lib/fantasy/includes/move_by_direction.rb +2 -0
  70. data/lib/fantasy/includes/mover.rb +3 -0
  71. data/lib/fantasy/includes/user_inputs.rb +6 -0
  72. data/lib/fantasy/loop.rb +41 -44
  73. data/lib/fantasy/mouse.rb +2 -0
  74. data/lib/fantasy/music.rb +4 -2
  75. data/lib/fantasy/shape.rb +11 -2
  76. data/lib/fantasy/sound.rb +3 -1
  77. data/lib/fantasy/tilemap.rb +19 -13
  78. data/lib/fantasy/tween.rb +3 -1
  79. data/lib/fantasy/utils.rb +7 -13
  80. data/lib/fantasy/version.rb +1 -1
  81. data/lib/fantasy.rb +2 -0
  82. metadata +90 -4
  83. data/fantasy.gemspec +0 -40
  84. data/fonts/VT323-Regular.ttf +0 -0
@@ -0,0 +1,599 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Documentation by YARD 0.9.27
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="file_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <div id="content"><div id='filecontents'><h1 id="ruby-in-fantasy">Ruby in Fantasy</h1>
61
+
62
+ <p>Simple toolbox library and lean API to build great mini games in Ruby.</p>
63
+
64
+ <p>An upper layer over Gosu library to offer a more friendly API for an easy and lean game development.</p>
65
+
66
+ <p>Specially intended to use Ruby as a learning language to introduce children into programming.</p>
67
+
68
+ <p><strong>Attention</strong>: This project is in early development phase, right now it is just an experiment</p>
69
+
70
+ <h2 id="use">Use</h2>
71
+
72
+ <h3 id="hello-world">Hello World</h3>
73
+
74
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>fantasy</span><span class='tstring_end'>&quot;</span></span>
75
+
76
+ <span class='const'>SCREEN_WIDTH</span> <span class='op'>=</span> <span class='int'>320</span>
77
+ <span class='const'>SCREEN_HEIGHT</span> <span class='op'>=</span> <span class='int'>240</span>
78
+
79
+ <span class='id identifier rubyid_on_game'><span class='object_link'><a href="top-level-namespace.html#on_game-instance_method" title="#on_game (method)">on_game</a></span></span> <span class='kw'>do</span>
80
+ <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="HudText.html" title="HudText (class)">HudText</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="HudText.html#initialize-instance_method" title="HudText#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>position:</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='int'>10</span><span class='rparen'>)</span><span class='rparen'>)</span>
81
+ <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Hello, World!</span><span class='tstring_end'>&quot;</span></span>
82
+ <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>big</span><span class='tstring_end'>&quot;</span></span>
83
+ <span class='kw'>end</span>
84
+
85
+ <span class='id identifier rubyid_start!'><span class='object_link'><a href="top-level-namespace.html#start!-instance_method" title="#start! (method)">start!</a></span></span>
86
+ </code></pre>
87
+
88
+ <h3 id="action-game">Action game</h3>
89
+
90
+ <pre class="code ruby"><code class="ruby"><span class='const'>SCREEN_WIDTH</span> <span class='op'>=</span> <span class='int'>640</span>
91
+ <span class='const'>SCREEN_HEIGHT</span> <span class='op'>=</span> <span class='int'>360</span>
92
+
93
+ <span class='id identifier rubyid_on_game'><span class='object_link'><a href="top-level-namespace.html#on_game-instance_method" title="#on_game (method)">on_game</a></span></span> <span class='kw'>do</span>
94
+ <span class='id identifier rubyid_player'>player</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Actor.html" title="Actor (class)">Actor</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Actor.html#initialize-instance_method" title="Actor#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>warrior</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
95
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>100</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span>
96
+ <span class='id identifier rubyid_points'>points</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="HudText.html" title="HudText (class)">HudText</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="HudText.html#initialize-instance_method" title="HudText#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>position:</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='int'>20</span><span class='rparen'>)</span><span class='rparen'>)</span>
97
+ <span class='id identifier rubyid_points'>points</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span> <span class='op'>=</span> <span class='int'>0</span>
98
+
99
+ <span class='id identifier rubyid_on_space_bar'><span class='object_link'><a href="top-level-namespace.html#on_space_bar-instance_method" title="#on_space_bar (method)">on_space_bar</a></span></span> <span class='kw'>do</span>
100
+ <span class='const'><span class='object_link'><a href="Sound.html" title="Sound (module)">Sound</a></span></span><span class='period'>.</span><span class='id identifier rubyid_play'><span class='object_link'><a href="Sound.html#play-class_method" title="Sound.play (method)">play</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>shoot</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
101
+ <span class='id identifier rubyid_bullet'>bullet</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Actor.html" title="Actor (class)">Actor</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Actor.html#initialize-instance_method" title="Actor#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>bullet</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
102
+ <span class='id identifier rubyid_bullet'>bullet</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span> <span class='op'>=</span> <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span>
103
+ <span class='id identifier rubyid_bullet'>bullet</span><span class='period'>.</span><span class='id identifier rubyid_speed'>speed</span> <span class='op'>=</span> <span class='int'>100</span>
104
+ <span class='id identifier rubyid_bullet'>bullet</span><span class='period'>.</span><span class='id identifier rubyid_direction'>direction</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_up'><span class='object_link'><a href="Coordinates.html#up-class_method" title="Coordinates.up (method)">up</a></span></span>
105
+ <span class='id identifier rubyid_bullet'>bullet</span><span class='period'>.</span><span class='id identifier rubyid_on_collision'>on_collision</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_other'>other</span><span class='op'>|</span>
106
+ <span class='kw'>if</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>enemy</span><span class='tstring_end'>&quot;</span></span>
107
+ <span class='const'><span class='object_link'><a href="Sound.html" title="Sound (module)">Sound</a></span></span><span class='period'>.</span><span class='id identifier rubyid_play'><span class='object_link'><a href="Sound.html#play-class_method" title="Sound.play (method)">play</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>impact</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
108
+ <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_destroy'>destroy</span>
109
+ <span class='id identifier rubyid_bullet'>bullet</span><span class='period'>.</span><span class='id identifier rubyid_destroy'>destroy</span>
110
+ <span class='id identifier rubyid_points'>points</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span> <span class='op'>+=</span> <span class='int'>1</span>
111
+ <span class='kw'>end</span>
112
+ <span class='kw'>end</span>
113
+ <span class='kw'>end</span>
114
+
115
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_on_collision'>on_collision</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_other'>other</span><span class='op'>|</span>
116
+ <span class='kw'>if</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>enemy</span><span class='tstring_end'>&quot;</span></span>
117
+ <span class='const'><span class='object_link'><a href="Sound.html" title="Sound (module)">Sound</a></span></span><span class='period'>.</span><span class='id identifier rubyid_play'><span class='object_link'><a href="Sound.html#play-class_method" title="Sound.play (method)">play</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>game_over</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
118
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_end'><span class='object_link'><a href="Global.html#go_to_end-class_method" title="Global.go_to_end (method)">go_to_end</a></span></span>
119
+ <span class='kw'>end</span>
120
+ <span class='kw'>end</span>
121
+ <span class='kw'>end</span>
122
+
123
+ <span class='id identifier rubyid_on_end'><span class='object_link'><a href="top-level-namespace.html#on_end-instance_method" title="#on_end (method)">on_end</a></span></span> <span class='kw'>do</span>
124
+ <span class='const'><span class='object_link'><a href="HudText.html" title="HudText (class)">HudText</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="HudText.html#initialize-instance_method" title="HudText#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>position:</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>text:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You are dead. Press space to re-tart</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
125
+
126
+ <span class='id identifier rubyid_on_space_bar'><span class='object_link'><a href="top-level-namespace.html#on_space_bar-instance_method" title="#on_space_bar (method)">on_space_bar</a></span></span> <span class='kw'>do</span>
127
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_game'><span class='object_link'><a href="Global.html#go_to_game-class_method" title="Global.go_to_game (method)">go_to_game</a></span></span>
128
+ <span class='kw'>end</span>
129
+ <span class='kw'>end</span>
130
+
131
+ <span class='id identifier rubyid_start!'><span class='object_link'><a href="top-level-namespace.html#start!-instance_method" title="#start! (method)">start!</a></span></span>
132
+ </code></pre>
133
+
134
+ <h2 id="examples">Examples</h2>
135
+
136
+ <p>See the <a href="https://github.com/fguillen/RubyInFantasyGames">Ruby in Fantasy Games Collection</a>.</p>
137
+
138
+ <h2 id="installation">Installation</h2>
139
+
140
+ <p>Add this line to your application&#39;s Gemfile:</p>
141
+
142
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>fantasy</span><span class='tstring_end'>&quot;</span></span>
143
+ </code></pre>
144
+
145
+ <p>And then execute:</p>
146
+
147
+ <pre class="code ruby"><code class="ruby">$ bundle install
148
+ </code></pre>
149
+
150
+ <p>Or install it yourself as:</p>
151
+
152
+ <pre class="code ruby"><code class="ruby">$ gem install fantasy
153
+ </code></pre>
154
+
155
+ <h2 id="features">Features</h2>
156
+
157
+ <h3 id="game-scenes">Game Scenes</h3>
158
+
159
+ <p>Easy to configure 3 basic game states:</p>
160
+
161
+ <ul>
162
+ <li>Game presentation scene</li>
163
+ <li>Game game scene</li>
164
+ <li>Game end scene</li>
165
+ <li>Other scenes, like levels or such (TODO)</li>
166
+ </ul>
167
+
168
+ <p>Each state should be independent and unique Actors and other elements can be created and configured for each state</p>
169
+
170
+ <p>Built-in mechanism to move from one state to another.</p>
171
+
172
+ <h3 id="actor">Actor</h3>
173
+
174
+ <p>Managing game elements which have (optionally) image, movement and collision</p>
175
+
176
+ <ul>
177
+ <li>Easy to set an <code>image</code></li>
178
+ <li>Managing movement through <code>direction</code> and <code>speed</code></li>
179
+ <li>Built-in movement control through cursors</li>
180
+ <li>Collision detection, OnCollision callback, Collision matrix</li>
181
+ <li>Jump</li>
182
+ <li>Gravity</li>
183
+ <li>Animations (TODO)</li>
184
+ <li>Possibility to extend Actor class or instantiate it directly for simple characters</li>
185
+ <li>Allowing magic instance properties (Like in OpenStruct). So programmer can do <code>actor.stuff = 1</code> and it is valid (TODO)</li>
186
+ <li>Alignment &quot;center&quot; and &quot;top-left&quot; (TODO)</li>
187
+ </ul>
188
+
189
+ <h3 id="clock">Clock</h3>
190
+
191
+ <p>Create new execution threads to program delayed behaviors, repetitive actions, animations, ...</p>
192
+
193
+ <ul>
194
+ <li>Run now</li>
195
+ <li>Run after a delay</li>
196
+ <li>Repeat</li>
197
+ <li>Stop</li>
198
+ <li>Callback when finished (TODO)</li>
199
+ </ul>
200
+
201
+ <h3 id="animations">Animations</h3>
202
+
203
+ <p>Add animations to an Actor and activate them when special state triggered</p>
204
+
205
+ <ul>
206
+ <li>Set frames (TODO)</li>
207
+ <li>Duration in seconds (TODO)</li>
208
+ <li>Run once (TODO)</li>
209
+ <li>Run on loop (TODO)</li>
210
+ <li>Stop (TODO)</li>
211
+ <li>Callback when finished (TODO)</li>
212
+ </ul>
213
+
214
+ <h3 id="ui">UI</h3>
215
+
216
+ <h4 id="button-todo">Button (TODO)</h4>
217
+
218
+ <p>Easy to set up a graphical component that responds to mouse hover and click events.</p>
219
+
220
+ <ul>
221
+ <li>Set image (TODO)</li>
222
+ <li>Set image when hover (TODO)</li>
223
+ <li>Set image when clicked (TODO)</li>
224
+ <li>OnClicked callback (TODO)</li>
225
+ </ul>
226
+
227
+ <h4 id="hud-elements">HUD Elements</h4>
228
+
229
+ <p>For easy creation of head-up display components.</p>
230
+
231
+ <ul>
232
+ <li>Text Element</li>
233
+ <li>Image Element</li>
234
+ <li>Auto update text (observer variable changes) (TODO)</li>
235
+ </ul>
236
+
237
+ <h3 id="debug-mode">Debug Mode</h3>
238
+
239
+ <p>Press <code>d</code> to activate it. When active debug visuals are shown:</p>
240
+
241
+ <ul>
242
+ <li>Position</li>
243
+ <li>Collider</li>
244
+ </ul>
245
+
246
+ <p>On top, when debug mode is active, the Actors and HUD elements become draggable.
247
+ The new position won&#39;t be persistent but it will be helpful to identify which should be the desired position.</p>
248
+
249
+ <h3 id="camera">Camera</h3>
250
+
251
+ <p>Setting up a camera component that we can easily move around and all the active
252
+ Actors in the game will be rendered in the relative position to this camera.</p>
253
+
254
+ <ul>
255
+ <li>Allow camera move</li>
256
+ <li>Easy to follow one actor</li>
257
+ </ul>
258
+
259
+ <h3 id="colors-palette">Colors palette</h3>
260
+
261
+ <ul>
262
+ <li>Not deal with RGB or anything, just a list of colors. See <a href="COLOR_PALETTE.md">Color.palette</a></li>
263
+ </ul>
264
+
265
+ <h3 id="pause-game-todo">Pause Game (TODO)</h3>
266
+
267
+ <ul>
268
+ <li>Pause game, pause Actors, animations, clocks, ... (TODO)</li>
269
+ </ul>
270
+
271
+ <h3 id="core-run">Core run</h3>
272
+
273
+ <p>Move the core functions to the top level hierarchy so I don&#39;t need to create a <code>Game::Window</code> class</p>
274
+
275
+ <h3 id="sound">Sound</h3>
276
+
277
+ <ul>
278
+ <li>Direct and easy way to play a sound</li>
279
+ <li>Direct and easy way to play a background music</li>
280
+ </ul>
281
+
282
+ <h3 id="background">Background</h3>
283
+
284
+ <p>Simple way to set up:</p>
285
+
286
+ <ul>
287
+ <li>Background color</li>
288
+ <li>Image background</li>
289
+ <li>Repeatable image background</li>
290
+ </ul>
291
+
292
+ <h3 id="data-persistance">Data Persistance</h3>
293
+
294
+ <p>Simple mechanism to save data in disk. For user preferences, game progress, high scores and others</p>
295
+
296
+ <h3 id="user-inputs">User Inputs</h3>
297
+
298
+ <p>Easy access to keyboard and mouse inputs on any part of the code. Specially in the Actors.</p>
299
+
300
+ <ul>
301
+ <li>Allow &quot;on_space_bar&quot; and each Actor (TODO)</li>
302
+ <li>Allow multiple &quot;on_space_bar&quot; (TODO)</li>
303
+ <li>Remove &quot;on_space_bar&quot; when changing scene (TODO)</li>
304
+ <li>Detect when key/mouse button is pressed in the actual frame in any part of the code (TODO)</li>
305
+ </ul>
306
+
307
+ <h3 id="tilemap-todo">Tilemap (TODO)</h3>
308
+
309
+ <p>For easy creation of:</p>
310
+
311
+ <ul>
312
+ <li>Top-down map levels</li>
313
+ <li>Platformer map levels (TODO)</li>
314
+ <li>Allow specific map keys like a=&gt;actor_1, b=&gt;actor_2 (TODO)</li>
315
+ </ul>
316
+
317
+ <h3 id="tweens-todo">Tweens (TODO)</h3>
318
+
319
+ <p>Multiple movement animation effects like in <a href="http://dotween.demigiant.com/documentation.php">DoTween</a> (TODO)</p>
320
+
321
+ <h2 id="api">API</h2>
322
+
323
+ <h3 id="game-scenes">Game Scenes</h3>
324
+
325
+ <p>Configure your game elements on each Scene:</p>
326
+
327
+ <pre class="code ruby"><code class="ruby"><span class='const'>SCREEN_WIDTH</span> <span class='op'>=</span> <span class='int'>640</span>
328
+ <span class='const'>SCREEN_HEIGHT</span> <span class='op'>=</span> <span class='int'>360</span>
329
+
330
+ <span class='comment'># (Optional)
331
+ </span><span class='id identifier rubyid_on_presentation'><span class='object_link'><a href="top-level-namespace.html#on_presentation-instance_method" title="#on_presentation (method)">on_presentation</a></span></span> <span class='kw'>do</span>
332
+ <span class='comment'># Game elements running when the game loads
333
+ </span><span class='kw'>end</span>
334
+
335
+ <span class='id identifier rubyid_on_game'><span class='object_link'><a href="top-level-namespace.html#on_game-instance_method" title="#on_game (method)">on_game</a></span></span> <span class='kw'>do</span>
336
+ <span class='comment'># Game elements running when in game Scene
337
+ </span><span class='kw'>end</span>
338
+
339
+ <span class='comment'># (Optional)
340
+ </span><span class='id identifier rubyid_on_end'><span class='object_link'><a href="top-level-namespace.html#on_end-instance_method" title="#on_end (method)">on_end</a></span></span> <span class='kw'>do</span>
341
+ <span class='comment'># Game elements running when game is ended
342
+ </span><span class='kw'>end</span>
343
+ </code></pre>
344
+
345
+ <p>How to go from Scene to Scene:</p>
346
+
347
+ <pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_presentation'><span class='object_link'><a href="Global.html#go_to_presentation-class_method" title="Global.go_to_presentation (method)">go_to_presentation</a></span></span>
348
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_game'><span class='object_link'><a href="Global.html#go_to_game-class_method" title="Global.go_to_game (method)">go_to_game</a></span></span>
349
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_end'><span class='object_link'><a href="Global.html#go_to_end-class_method" title="Global.go_to_end (method)">go_to_end</a></span></span>
350
+ </code></pre>
351
+
352
+ <h4 id="example">Example</h4>
353
+
354
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_on_presentation'><span class='object_link'><a href="top-level-namespace.html#on_presentation-instance_method" title="#on_presentation (method)">on_presentation</a></span></span> <span class='kw'>do</span>
355
+ <span class='const'><span class='object_link'><a href="HudText.html" title="HudText (class)">HudText</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="HudText.html#initialize-instance_method" title="HudText#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>position:</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>text:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Press space to start</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
356
+
357
+ <span class='id identifier rubyid_on_space_bar'><span class='object_link'><a href="top-level-namespace.html#on_space_bar-instance_method" title="#on_space_bar (method)">on_space_bar</a></span></span> <span class='kw'>do</span>
358
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_game'><span class='object_link'><a href="Global.html#go_to_game-class_method" title="Global.go_to_game (method)">go_to_game</a></span></span>
359
+ <span class='kw'>end</span>
360
+ <span class='kw'>end</span>
361
+
362
+ <span class='id identifier rubyid_on_game'><span class='object_link'><a href="top-level-namespace.html#on_game-instance_method" title="#on_game (method)">on_game</a></span></span> <span class='kw'>do</span>
363
+ <span class='comment'># [...]
364
+ </span> <span class='kw'>if</span> <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_dead'>dead</span>
365
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_end'><span class='object_link'><a href="Global.html#go_to_end-class_method" title="Global.go_to_end (method)">go_to_end</a></span></span>
366
+ <span class='kw'>end</span>
367
+ <span class='kw'>end</span>
368
+
369
+ <span class='id identifier rubyid_on_end'><span class='object_link'><a href="top-level-namespace.html#on_end-instance_method" title="#on_end (method)">on_end</a></span></span> <span class='kw'>do</span>
370
+ <span class='const'><span class='object_link'><a href="HudText.html" title="HudText (class)">HudText</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="HudText.html#initialize-instance_method" title="HudText#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>position:</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>10</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>text:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You are dead. Press space to re-tart</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
371
+
372
+ <span class='id identifier rubyid_on_space_bar'><span class='object_link'><a href="top-level-namespace.html#on_space_bar-instance_method" title="#on_space_bar (method)">on_space_bar</a></span></span> <span class='kw'>do</span>
373
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_go_to_presentation'><span class='object_link'><a href="Global.html#go_to_presentation-class_method" title="Global.go_to_presentation (method)">go_to_presentation</a></span></span>
374
+ <span class='kw'>end</span>
375
+ <span class='kw'>end</span>
376
+ </code></pre>
377
+
378
+ <h3 id="actor">Actor</h3>
379
+
380
+ <p>Actor can be used directly:</p>
381
+
382
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_player'>player</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Actor.html" title="Actor (class)">Actor</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Actor.html#initialize-instance_method" title="Actor#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>warrior</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='comment'># ./images/warrior.png
383
+ </span><span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>100</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span>
384
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_solid'>solid</span> <span class='op'>=</span> <span class='kw'>true</span>
385
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_speed'>speed</span> <span class='op'>=</span> <span class='int'>200</span>
386
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_layer'>layer</span> <span class='op'>=</span> <span class='int'>1</span>
387
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_move_with_cursors'>move_with_cursors</span>
388
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_collision_with'>collision_with</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>enemy</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>bullets</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='comment'># default &quot;all&quot;
389
+ </span>
390
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_on_collision'>on_collision</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_other'>other</span><span class='op'>|</span>
391
+ <span class='kw'>if</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>enemy</span><span class='tstring_end'>&quot;</span></span>
392
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_destroy'>destroy</span>
393
+ <span class='kw'>end</span>
394
+ <span class='kw'>end</span>
395
+
396
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_on_after_move'>on_after_move</span> <span class='kw'>do</span>
397
+ <span class='kw'>if</span> <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>&gt;</span> <span class='const'>SCREEN_WIDTH</span>
398
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>=</span> <span class='const'>SCREEN_WIDTH</span>
399
+ <span class='kw'>end</span>
400
+
401
+ <span class='kw'>if</span> <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>&lt;</span> <span class='int'>0</span>
402
+ <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>=</span> <span class='int'>0</span>
403
+ <span class='kw'>end</span>
404
+ <span class='kw'>end</span>
405
+ </code></pre>
406
+
407
+ <p>Or in a subclass:</p>
408
+
409
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>Player</span> <span class='op'>&lt;</span> <span class='const'><span class='object_link'><a href="Actor.html" title="Actor (class)">Actor</a></span></span>
410
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span>
411
+ <span class='kw'>super</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>warrior</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='comment'># ./images/warrior.png
412
+ </span> <span class='ivar'>@position</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>100</span><span class='comma'>,</span> <span class='int'>100</span><span class='rparen'>)</span>
413
+ <span class='ivar'>@solid</span> <span class='op'>=</span> <span class='kw'>true</span>
414
+ <span class='ivar'>@speed</span> <span class='op'>=</span> <span class='int'>200</span>
415
+ <span class='ivar'>@layer</span> <span class='op'>=</span> <span class='int'>1</span>
416
+ <span class='ivar'>@direction</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_zero'><span class='object_link'><a href="Coordinates.html#zero-class_method" title="Coordinates.zero (method)">zero</a></span></span>
417
+ <span class='ivar'>@collision_with</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>enemy</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>bullets</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='comment'># default &quot;all&quot;
418
+ </span> <span class='id identifier rubyid_move_with_cursors'>move_with_cursors</span>
419
+ <span class='kw'>end</span>
420
+
421
+ <span class='id identifier rubyid_on_collision'>on_collision</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_other'>other</span><span class='op'>|</span>
422
+ <span class='kw'>if</span> <span class='id identifier rubyid_other'>other</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>enemy</span><span class='tstring_end'>&quot;</span></span>
423
+ <span class='id identifier rubyid_destroy'>destroy</span>
424
+ <span class='kw'>end</span>
425
+ <span class='kw'>end</span>
426
+
427
+ <span class='id identifier rubyid_on_after_move'>on_after_move</span> <span class='kw'>do</span>
428
+ <span class='kw'>if</span> <span class='ivar'>@position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>&gt;</span> <span class='const'>SCREEN_WIDTH</span>
429
+ <span class='ivar'>@position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>=</span> <span class='const'>SCREEN_WIDTH</span>
430
+ <span class='kw'>end</span>
431
+
432
+ <span class='kw'>if</span> <span class='ivar'>@position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>&lt;</span> <span class='int'>0</span>
433
+ <span class='ivar'>@position</span><span class='period'>.</span><span class='id identifier rubyid_x'>x</span> <span class='op'>=</span> <span class='int'>0</span>
434
+ <span class='kw'>end</span>
435
+ <span class='kw'>end</span>
436
+ <span class='kw'>end</span>
437
+ </code></pre>
438
+
439
+ <p>Actor settings for a platformer:</p>
440
+
441
+ <pre class="code ruby"><code class="ruby">player = Actor.new(&quot;warrior&quot;) # ./images/warrior.png
442
+ player.solid = true
443
+ player.jump = 150
444
+ player.gravity = 200
445
+ player.move_with_cursors(left: true, right: true, up: false, down: false, jump: true)
446
+
447
+ player.on_jumping do
448
+ Sound.play(&quot;jump&quot;)
449
+ player.image = &quot;warrior_jump&quot;)
450
+ end
451
+
452
+ player.on_floor do
453
+ player.image = &quot;warrior&quot;)
454
+ end
455
+ </code></pre>
456
+
457
+ <h3 id="clock">Clock</h3>
458
+
459
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_clock'>clock</span> <span class='op'>=</span>
460
+ <span class='const'><span class='object_link'><a href="Clock.html" title="Clock (class)">Clock</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Clock.html#initialize-instance_method" title="Clock#initialize (method)">new</a></span></span> <span class='kw'>do</span>
461
+ <span class='id identifier rubyid_enemy'>enemy</span><span class='period'>.</span><span class='id identifier rubyid_attack'>attack</span>
462
+ <span class='id identifier rubyid_sleep'>sleep</span><span class='lparen'>(</span><span class='int'>1</span><span class='rparen'>)</span>
463
+ <span class='id identifier rubyid_enemy'>enemy</span><span class='period'>.</span><span class='id identifier rubyid_defend'>defend</span>
464
+ <span class='kw'>end</span>
465
+
466
+ <span class='id identifier rubyid_clock'>clock</span><span class='period'>.</span><span class='id identifier rubyid_run_now'>run_now</span>
467
+ <span class='id identifier rubyid_clock'>clock</span><span class='period'>.</span><span class='id identifier rubyid_run_on'>run_on</span><span class='lparen'>(</span><span class='label'>seconds:</span> <span class='int'>2</span><span class='rparen'>)</span>
468
+ <span class='id identifier rubyid_clock'>clock</span><span class='period'>.</span><span class='id identifier rubyid_repeat'>repeat</span><span class='lparen'>(</span><span class='label'>seconds:</span> <span class='int'>2</span><span class='comma'>,</span> <span class='label'>times:</span> <span class='int'>10</span><span class='rparen'>)</span>
469
+ <span class='id identifier rubyid_clock'>clock</span><span class='period'>.</span><span class='id identifier rubyid_stop'>stop</span>
470
+ </code></pre>
471
+
472
+ <h3 id="background">Background</h3>
473
+
474
+ <pre class="code ruby"><code class="ruby"><span class='comment'># Simple color
475
+ </span><span class='id identifier rubyid_on_presentation'><span class='object_link'><a href="top-level-namespace.html#on_presentation-instance_method" title="#on_presentation (method)">on_presentation</a></span></span> <span class='kw'>do</span>
476
+ <span class='const'><span class='object_link'><a href="Global.html" title="Global (module)">Global</a></span></span><span class='period'>.</span><span class='id identifier rubyid_background'><span class='object_link'><a href="Global.html#background-class_method" title="Global.background (method)">background</a></span></span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Color.html" title="Color (class)">Color</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Color.html#initialize-instance_method" title="Color#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>r:</span> <span class='int'>34</span><span class='comma'>,</span> <span class='label'>g:</span> <span class='int'>35</span><span class='comma'>,</span> <span class='label'>b:</span> <span class='int'>35</span><span class='rparen'>)</span>
477
+ <span class='kw'>end</span>
478
+
479
+ <span class='comment'># Replicable (by default) Image
480
+ </span><span class='comment'># position is relative to Camera.main
481
+ </span><span class='id identifier rubyid_on_game'><span class='object_link'><a href="top-level-namespace.html#on_game-instance_method" title="#on_game (method)">on_game</a></span></span> <span class='kw'>do</span>
482
+ <span class='id identifier rubyid_background'>background</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Background.html" title="Background (class)">Background</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Background.html#initialize-instance_method" title="Background#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>image_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>beach</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
483
+ <span class='comment'># background.replicable = false # if you don&#39;t want the image to replicate
484
+ </span> <span class='id identifier rubyid_background'>background</span><span class='period'>.</span><span class='id identifier rubyid_scale'>scale</span> <span class='op'>=</span> <span class='int'>6</span>
485
+ <span class='kw'>end</span>
486
+ </code></pre>
487
+
488
+ <h3 id="data-persistance">Data Persistance</h3>
489
+
490
+ <pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Disk.html" title="Disk (module)">Disk</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data'><span class='object_link'><a href="Disk.html#data-class_method" title="Disk.data (method)">data</a></span></span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='int'>120_000</span><span class='comma'>,</span> <span class='int'>11_000</span><span class='comma'>,</span> <span class='int'>678</span><span class='rbracket'>]</span>
491
+ <span class='const'><span class='object_link'><a href="Disk.html" title="Disk (module)">Disk</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data'><span class='object_link'><a href="Disk.html#data-class_method" title="Disk.data (method)">data</a></span></span><span class='period'>.</span><span class='id identifier rubyid_last_level'>last_level</span> <span class='op'>=</span> <span class='int'>3</span>
492
+ <span class='const'><span class='object_link'><a href="Disk.html" title="Disk (module)">Disk</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data'><span class='object_link'><a href="Disk.html#data-class_method" title="Disk.data (method)">data</a></span></span><span class='period'>.</span><span class='id identifier rubyid_sound_volume'>sound_volume</span> <span class='op'>=</span> <span class='int'>12</span>
493
+ <span class='const'><span class='object_link'><a href="Disk.html" title="Disk (module)">Disk</a></span></span><span class='period'>.</span><span class='id identifier rubyid_save'><span class='object_link'><a href="Disk.html#save-class_method" title="Disk.save (method)">save</a></span></span> <span class='comment'># data stored in ./disk/data.json
494
+ </span>
495
+ <span class='comment'># ... in another session
496
+ </span>
497
+ <span class='const'><span class='object_link'><a href="Disk.html" title="Disk (module)">Disk</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data'><span class='object_link'><a href="Disk.html#data-class_method" title="Disk.data (method)">data</a></span></span><span class='period'>.</span><span class='id identifier rubyid_records'>records</span> <span class='comment'># =&gt; [120_000, 11_000, 678]
498
+ </span><span class='const'><span class='object_link'><a href="Disk.html" title="Disk (module)">Disk</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data'><span class='object_link'><a href="Disk.html#data-class_method" title="Disk.data (method)">data</a></span></span><span class='period'>.</span><span class='id identifier rubyid_last_level'>last_level</span> <span class='comment'># =&gt; 3
499
+ </span><span class='const'><span class='object_link'><a href="Disk.html" title="Disk (module)">Disk</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data'><span class='object_link'><a href="Disk.html#data-class_method" title="Disk.data (method)">data</a></span></span><span class='period'>.</span><span class='id identifier rubyid_sound_volume'>sound_volume</span> <span class='comment'># =&gt; 12
500
+ </span></code></pre>
501
+
502
+ <h3 id="camera">Camera</h3>
503
+
504
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_on_game'><span class='object_link'><a href="top-level-namespace.html#on_game-instance_method" title="#on_game (method)">on_game</a></span></span> <span class='kw'>do</span>
505
+ <span class='id identifier rubyid_on_loop'><span class='object_link'><a href="top-level-namespace.html#on_loop-instance_method" title="#on_loop (method)">on_loop</a></span></span> <span class='kw'>do</span>
506
+ <span class='comment'># Camera follows player
507
+ </span> <span class='const'><span class='object_link'><a href="Camera.html" title="Camera (class)">Camera</a></span></span><span class='period'>.</span><span class='id identifier rubyid_main'><span class='object_link'><a href="Camera.html#main-class_method" title="Camera.main (method)">main</a></span></span><span class='period'>.</span><span class='id identifier rubyid_position'><span class='object_link'><a href="Camera.html#position-instance_method" title="Camera#position (method)">position</a></span></span><span class='period'>.</span><span class='id identifier rubyid_y'>y</span> <span class='op'>=</span> <span class='id identifier rubyid_player'>player</span><span class='period'>.</span><span class='id identifier rubyid_position'>position</span><span class='period'>.</span><span class='id identifier rubyid_y'>y</span> <span class='op'>-</span> <span class='lparen'>(</span><span class='const'>SCREEN_HEIGHT</span> <span class='op'>/</span> <span class='int'>2</span><span class='rparen'>)</span>
508
+ <span class='kw'>end</span>
509
+ <span class='kw'>end</span>
510
+ </code></pre>
511
+
512
+ <h3 id="sound">Sound</h3>
513
+
514
+ <p>Plays only once:</p>
515
+
516
+ <pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Sound.html" title="Sound (module)">Sound</a></span></span><span class='period'>.</span><span class='id identifier rubyid_play'><span class='object_link'><a href="Sound.html#play-class_method" title="Sound.play (method)">play</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>shoot</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='comment'># ./sounds/shoot.wav
517
+ </span></code></pre>
518
+
519
+ <p>Plays in loop:</p>
520
+
521
+ <pre class="code ruby"><code class="ruby"><span class='const'><span class='object_link'><a href="Music.html" title="Music (module)">Music</a></span></span><span class='period'>.</span><span class='id identifier rubyid_play'><span class='object_link'><a href="Music.html#play-class_method" title="Music.play (method)">play</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>music</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='comment'># ./musics/music.mp3
522
+ </span><span class='const'><span class='object_link'><a href="Music.html" title="Music (module)">Music</a></span></span><span class='period'>.</span><span class='id identifier rubyid_volume'><span class='object_link'><a href="Music.html#volume-class_method" title="Music.volume (method)">volume</a></span></span> <span class='op'>=</span> <span class='float'>0.5</span>
523
+ <span class='const'><span class='object_link'><a href="Music.html" title="Music (module)">Music</a></span></span><span class='period'>.</span><span class='id identifier rubyid_stop'><span class='object_link'><a href="Music.html#stop-class_method" title="Music.stop (method)">stop</a></span></span>
524
+ </code></pre>
525
+
526
+ <h3 id="tilemap">Tilemap</h3>
527
+
528
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./maps/sky.txt
529
+ </span><span class='comment'># 0 0
530
+ </span><span class='comment'># 0 1
531
+ </span><span class='comment'># 0 0
532
+ </span><span class='comment'># 0 01
533
+ </span>
534
+ <span class='id identifier rubyid_planet'>planet</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Actor.html" title="Actor (class)">Actor</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Actor.html#initialize-instance_method" title="Actor#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>planet</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
535
+ <span class='id identifier rubyid_star'>star</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Actor.html" title="Actor (class)">Actor</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Actor.html#initialize-instance_method" title="Actor#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>star</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
536
+ <span class='id identifier rubyid_map'>map</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Tilemap.html" title="Tilemap (class)">Tilemap</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Tilemap.html#initialize-instance_method" title="Tilemap#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>map_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>sky</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>tiles:</span> <span class='lbracket'>[</span><span class='id identifier rubyid_planet'>planet</span><span class='comma'>,</span> <span class='id identifier rubyid_star'>star</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>tile_size:</span> <span class='int'>30</span><span class='rparen'>)</span>
537
+ <span class='id identifier rubyid_map'>map</span><span class='period'>.</span><span class='id identifier rubyid_spawn'>spawn</span>
538
+ </code></pre>
539
+
540
+ <h3 id="ui">UI</h3>
541
+
542
+ <h4 id="hud-text">HUD Text</h4>
543
+
544
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_timer'>timer</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="HudText.html" title="HudText (class)">HudText</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="HudText.html#initialize-instance_method" title="HudText#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>position:</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'>SCREEN_WIDTH</span> <span class='op'>/</span> <span class='int'>2</span><span class='comma'>,</span> <span class='int'>10</span><span class='rparen'>)</span><span class='rparen'>)</span>
545
+ <span class='id identifier rubyid_timer'>timer</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span> <span class='op'>=</span> <span class='int'>0</span>
546
+ <span class='id identifier rubyid_timer'>timer</span><span class='period'>.</span><span class='id identifier rubyid_alignment'>alignment</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>center</span><span class='tstring_end'>&quot;</span></span>
547
+ <span class='id identifier rubyid_timer'>timer</span><span class='period'>.</span><span class='id identifier rubyid_size'>size</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>big</span><span class='tstring_end'>&quot;</span></span>
548
+
549
+ <span class='const'><span class='object_link'><a href="Clock.html" title="Clock (class)">Clock</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Clock.html#initialize-instance_method" title="Clock#initialize (method)">new</a></span></span> <span class='lbrace'>{</span> <span class='id identifier rubyid_timer'>timer</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span> <span class='op'>+=</span> <span class='int'>1</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_repeat'>repeat</span><span class='lparen'>(</span><span class='label'>seconds:</span> <span class='int'>1</span><span class='rparen'>)</span>
550
+ </code></pre>
551
+
552
+ <h4 id="hud-image">HUD Image</h4>
553
+
554
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_icon'>icon</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="HudImage.html" title="HudImage (class)">HudImage</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="HudImage.html#initialize-instance_method" title="HudImage#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>position:</span> <span class='const'><span class='object_link'><a href="Coordinates.html" title="Coordinates (class)">Coordinates</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'>SCREEN_WIDTH</span> <span class='op'>-</span> <span class='int'>220</span><span class='comma'>,</span> <span class='int'>8</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>image_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>ring</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
555
+ <span class='id identifier rubyid_icon'>icon</span><span class='period'>.</span><span class='id identifier rubyid_scale'>scale</span> <span class='op'>=</span> <span class='int'>4</span>
556
+ <span class='id identifier rubyid_icon'>icon</span><span class='period'>.</span><span class='id identifier rubyid_visible'>visible</span> <span class='op'>=</span> <span class='kw'>true</span>
557
+
558
+ <span class='const'><span class='object_link'><a href="Clock.html" title="Clock (class)">Clock</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Clock.html#initialize-instance_method" title="Clock#initialize (method)">new</a></span></span> <span class='lbrace'>{</span> <span class='id identifier rubyid_icon'>icon</span><span class='period'>.</span><span class='id identifier rubyid_visible'>visible</span> <span class='op'>=</span> <span class='op'>!</span><span class='id identifier rubyid_icon'>icon</span><span class='period'>.</span><span class='id identifier rubyid_visible'>visible</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_repeat'>repeat</span><span class='lparen'>(</span><span class='label'>seconds:</span> <span class='int'>1</span><span class='rparen'>)</span>
559
+ </code></pre>
560
+
561
+ <h2 id="credits-for-assets">Credits for assets</h2>
562
+
563
+ <ul>
564
+ <li>Font: VT323 Project Authors (<a href="mailto:peter.hull@oikoi.com">peter.hull@oikoi.com</a>)</li>
565
+ </ul>
566
+
567
+ <h2 id="bugs">Bugs</h2>
568
+
569
+ <ul>
570
+ <li>When dragging in debug mode new elements are being added to the drag (TODO)</li>
571
+ <li>Rubocop is not passing</li>
572
+ <li>Tests are missing</li>
573
+ <li>Allow Ruby 2.5+</li>
574
+ </ul>
575
+
576
+ <h2 id="development">Development</h2>
577
+
578
+ <p>After checking out the repo, run <code>bin/setup</code> to install dependencies. Then, run <code>rake test</code> to run the tests. You can also run <code>bin/console</code> for an interactive prompt that will allow you to experiment.</p>
579
+
580
+ <p>To install this gem onto your local machine, run <code>bundle exec rake install</code>. To release a new version, update the version number in <code>version.rb</code>, and then run <code>bundle exec rake release</code>, which will create a git tag for the version, push git commits and the created tag, and push the <code>.gem</code> file to <a href="https://rubygems.org">rubygems.org</a>.</p>
581
+
582
+ <h2 id="contributing">Contributing</h2>
583
+
584
+ <p>Bug reports and pull requests are welcome on GitHub at <a href="https://github.com/fguillen/fantasy">https://github.com/fguillen/fantasy</a>.</p>
585
+
586
+ <h2 id="license">License</h2>
587
+
588
+ <p>The gem is available as open source under the terms of the <a href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
589
+ </div></div>
590
+
591
+ <div id="footer">
592
+ Generated on Sat Apr 2 14:24:11 2022 by
593
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
594
+ 0.9.27 (ruby-3.0.2).
595
+ </div>
596
+
597
+ </div>
598
+ </body>
599
+ </html>