ruby2d-rpeck-windows 0.11.1

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 (289) hide show
  1. checksums.yaml +7 -0
  2. data/assets/README.md +22 -0
  3. data/assets/Rakefile +85 -0
  4. data/assets/app.icns +0 -0
  5. data/assets/include/SDL2/SDL.h +138 -0
  6. data/assets/include/SDL2/SDL_assert.h +293 -0
  7. data/assets/include/SDL2/SDL_atomic.h +295 -0
  8. data/assets/include/SDL2/SDL_audio.h +859 -0
  9. data/assets/include/SDL2/SDL_bits.h +121 -0
  10. data/assets/include/SDL2/SDL_blendmode.h +123 -0
  11. data/assets/include/SDL2/SDL_clipboard.h +71 -0
  12. data/assets/include/SDL2/SDL_config.h +55 -0
  13. data/assets/include/SDL2/SDL_config_android.h +182 -0
  14. data/assets/include/SDL2/SDL_config_iphoneos.h +207 -0
  15. data/assets/include/SDL2/SDL_config_macosx.h +266 -0
  16. data/assets/include/SDL2/SDL_config_minimal.h +85 -0
  17. data/assets/include/SDL2/SDL_config_os2.h +188 -0
  18. data/assets/include/SDL2/SDL_config_pandora.h +135 -0
  19. data/assets/include/SDL2/SDL_config_psp.h +165 -0
  20. data/assets/include/SDL2/SDL_config_windows.h +288 -0
  21. data/assets/include/SDL2/SDL_config_winrt.h +243 -0
  22. data/assets/include/SDL2/SDL_config_wiz.h +149 -0
  23. data/assets/include/SDL2/SDL_copying.h +20 -0
  24. data/assets/include/SDL2/SDL_cpuinfo.h +299 -0
  25. data/assets/include/SDL2/SDL_egl.h +1676 -0
  26. data/assets/include/SDL2/SDL_endian.h +263 -0
  27. data/assets/include/SDL2/SDL_error.h +112 -0
  28. data/assets/include/SDL2/SDL_events.h +827 -0
  29. data/assets/include/SDL2/SDL_filesystem.h +136 -0
  30. data/assets/include/SDL2/SDL_gamecontroller.h +541 -0
  31. data/assets/include/SDL2/SDL_gesture.h +87 -0
  32. data/assets/include/SDL2/SDL_haptic.h +1247 -0
  33. data/assets/include/SDL2/SDL_hints.h +1578 -0
  34. data/assets/include/SDL2/SDL_image.h +161 -0
  35. data/assets/include/SDL2/SDL_joystick.h +499 -0
  36. data/assets/include/SDL2/SDL_keyboard.h +217 -0
  37. data/assets/include/SDL2/SDL_keycode.h +351 -0
  38. data/assets/include/SDL2/SDL_loadso.h +81 -0
  39. data/assets/include/SDL2/SDL_locale.h +101 -0
  40. data/assets/include/SDL2/SDL_log.h +211 -0
  41. data/assets/include/SDL2/SDL_main.h +180 -0
  42. data/assets/include/SDL2/SDL_messagebox.h +146 -0
  43. data/assets/include/SDL2/SDL_metal.h +117 -0
  44. data/assets/include/SDL2/SDL_misc.h +75 -0
  45. data/assets/include/SDL2/SDL_mixer.h +651 -0
  46. data/assets/include/SDL2/SDL_mouse.h +302 -0
  47. data/assets/include/SDL2/SDL_mutex.h +251 -0
  48. data/assets/include/SDL2/SDL_name.h +33 -0
  49. data/assets/include/SDL2/SDL_opengl.h +2183 -0
  50. data/assets/include/SDL2/SDL_opengl_glext.h +11180 -0
  51. data/assets/include/SDL2/SDL_opengles.h +39 -0
  52. data/assets/include/SDL2/SDL_opengles2.h +52 -0
  53. data/assets/include/SDL2/SDL_opengles2_gl2.h +621 -0
  54. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +2050 -0
  55. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +30 -0
  56. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +282 -0
  57. data/assets/include/SDL2/SDL_pixels.h +479 -0
  58. data/assets/include/SDL2/SDL_platform.h +198 -0
  59. data/assets/include/SDL2/SDL_power.h +75 -0
  60. data/assets/include/SDL2/SDL_quit.h +58 -0
  61. data/assets/include/SDL2/SDL_rect.h +174 -0
  62. data/assets/include/SDL2/SDL_render.h +1158 -0
  63. data/assets/include/SDL2/SDL_revision.h +2 -0
  64. data/assets/include/SDL2/SDL_rwops.h +283 -0
  65. data/assets/include/SDL2/SDL_scancode.h +413 -0
  66. data/assets/include/SDL2/SDL_sensor.h +267 -0
  67. data/assets/include/SDL2/SDL_shape.h +144 -0
  68. data/assets/include/SDL2/SDL_stdinc.h +647 -0
  69. data/assets/include/SDL2/SDL_surface.h +563 -0
  70. data/assets/include/SDL2/SDL_system.h +325 -0
  71. data/assets/include/SDL2/SDL_syswm.h +354 -0
  72. data/assets/include/SDL2/SDL_test.h +69 -0
  73. data/assets/include/SDL2/SDL_test_assert.h +105 -0
  74. data/assets/include/SDL2/SDL_test_common.h +218 -0
  75. data/assets/include/SDL2/SDL_test_compare.h +69 -0
  76. data/assets/include/SDL2/SDL_test_crc32.h +124 -0
  77. data/assets/include/SDL2/SDL_test_font.h +81 -0
  78. data/assets/include/SDL2/SDL_test_fuzzer.h +384 -0
  79. data/assets/include/SDL2/SDL_test_harness.h +134 -0
  80. data/assets/include/SDL2/SDL_test_images.h +78 -0
  81. data/assets/include/SDL2/SDL_test_log.h +67 -0
  82. data/assets/include/SDL2/SDL_test_md5.h +129 -0
  83. data/assets/include/SDL2/SDL_test_memory.h +63 -0
  84. data/assets/include/SDL2/SDL_test_random.h +115 -0
  85. data/assets/include/SDL2/SDL_thread.h +366 -0
  86. data/assets/include/SDL2/SDL_timer.h +115 -0
  87. data/assets/include/SDL2/SDL_touch.h +102 -0
  88. data/assets/include/SDL2/SDL_ttf.h +294 -0
  89. data/assets/include/SDL2/SDL_types.h +29 -0
  90. data/assets/include/SDL2/SDL_version.h +162 -0
  91. data/assets/include/SDL2/SDL_video.h +1282 -0
  92. data/assets/include/SDL2/SDL_vulkan.h +276 -0
  93. data/assets/include/SDL2/begin_code.h +166 -0
  94. data/assets/include/SDL2/close_code.h +40 -0
  95. data/assets/include/glew.h +23686 -0
  96. data/assets/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  97. data/assets/ios/Assets.xcassets/Contents.json +6 -0
  98. data/assets/ios/Base.lproj/LaunchScreen.storyboard +27 -0
  99. data/assets/ios/Info.plist +43 -0
  100. data/assets/ios/MRuby.framework/Headers/mrbconf.h +143 -0
  101. data/assets/ios/MRuby.framework/Headers/mruby/array.h +280 -0
  102. data/assets/ios/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  103. data/assets/ios/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  104. data/assets/ios/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
  105. data/assets/ios/MRuby.framework/Headers/mruby/class.h +97 -0
  106. data/assets/ios/MRuby.framework/Headers/mruby/common.h +77 -0
  107. data/assets/ios/MRuby.framework/Headers/mruby/compile.h +195 -0
  108. data/assets/ios/MRuby.framework/Headers/mruby/data.h +75 -0
  109. data/assets/ios/MRuby.framework/Headers/mruby/debug.h +67 -0
  110. data/assets/ios/MRuby.framework/Headers/mruby/dump.h +196 -0
  111. data/assets/ios/MRuby.framework/Headers/mruby/error.h +75 -0
  112. data/assets/ios/MRuby.framework/Headers/mruby/gc.h +91 -0
  113. data/assets/ios/MRuby.framework/Headers/mruby/hash.h +215 -0
  114. data/assets/ios/MRuby.framework/Headers/mruby/irep.h +75 -0
  115. data/assets/ios/MRuby.framework/Headers/mruby/istruct.h +47 -0
  116. data/assets/ios/MRuby.framework/Headers/mruby/khash.h +274 -0
  117. data/assets/ios/MRuby.framework/Headers/mruby/numeric.h +161 -0
  118. data/assets/ios/MRuby.framework/Headers/mruby/object.h +44 -0
  119. data/assets/ios/MRuby.framework/Headers/mruby/opcode.h +69 -0
  120. data/assets/ios/MRuby.framework/Headers/mruby/ops.h +117 -0
  121. data/assets/ios/MRuby.framework/Headers/mruby/proc.h +131 -0
  122. data/assets/ios/MRuby.framework/Headers/mruby/range.h +49 -0
  123. data/assets/ios/MRuby.framework/Headers/mruby/re.h +16 -0
  124. data/assets/ios/MRuby.framework/Headers/mruby/string.h +444 -0
  125. data/assets/ios/MRuby.framework/Headers/mruby/throw.h +55 -0
  126. data/assets/ios/MRuby.framework/Headers/mruby/value.h +309 -0
  127. data/assets/ios/MRuby.framework/Headers/mruby/variable.h +136 -0
  128. data/assets/ios/MRuby.framework/Headers/mruby/version.h +110 -0
  129. data/assets/ios/MRuby.framework/Headers/mruby.h +1282 -0
  130. data/assets/ios/MRuby.framework/Info.plist +20 -0
  131. data/assets/ios/MRuby.framework/MRuby +0 -0
  132. data/assets/ios/MyApp.xcodeproj/project.pbxproj +368 -0
  133. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  134. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  135. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  136. data/assets/ios/main.c +1 -0
  137. data/assets/macos/lib/libFLAC.a +0 -0
  138. data/assets/macos/lib/libSDL2.a +0 -0
  139. data/assets/macos/lib/libSDL2_image.a +0 -0
  140. data/assets/macos/lib/libSDL2_mixer.a +0 -0
  141. data/assets/macos/lib/libSDL2_ttf.a +0 -0
  142. data/assets/macos/lib/libfreetype.a +0 -0
  143. data/assets/macos/lib/libjpeg.a +0 -0
  144. data/assets/macos/lib/libmodplug.a +0 -0
  145. data/assets/macos/lib/libmpg123.a +0 -0
  146. data/assets/macos/lib/libogg.a +0 -0
  147. data/assets/macos/lib/libpng16.a +0 -0
  148. data/assets/macos/lib/libtiff.a +0 -0
  149. data/assets/macos/lib/libvorbis.a +0 -0
  150. data/assets/macos/lib/libvorbisfile.a +0 -0
  151. data/assets/macos/lib/libwebp.a +0 -0
  152. data/assets/mingw/bin/SDL2.dll +0 -0
  153. data/assets/mingw/bin/SDL2_image.dll +0 -0
  154. data/assets/mingw/bin/SDL2_mixer.dll +0 -0
  155. data/assets/mingw/bin/SDL2_ttf.dll +0 -0
  156. data/assets/mingw/bin/glew32.dll +0 -0
  157. data/assets/mingw/bin/libFLAC-8.dll +0 -0
  158. data/assets/mingw/bin/libfreetype-6.dll +0 -0
  159. data/assets/mingw/bin/libjpeg-9.dll +0 -0
  160. data/assets/mingw/bin/libmodplug-1.dll +0 -0
  161. data/assets/mingw/bin/libmpg123-0.dll +0 -0
  162. data/assets/mingw/bin/libogg-0.dll +0 -0
  163. data/assets/mingw/bin/libopus-0.dll +0 -0
  164. data/assets/mingw/bin/libopusfile-0.dll +0 -0
  165. data/assets/mingw/bin/libpng16-16.dll +0 -0
  166. data/assets/mingw/bin/libtiff-5.dll +0 -0
  167. data/assets/mingw/bin/libvorbis-0.dll +0 -0
  168. data/assets/mingw/bin/libvorbisfile-3.dll +0 -0
  169. data/assets/mingw/bin/libwebp-7.dll +0 -0
  170. data/assets/mingw/bin/libwinpthread-1.dll +0 -0
  171. data/assets/mingw/bin/zlib1.dll +0 -0
  172. data/assets/mingw/lib/libSDL2.a +0 -0
  173. data/assets/mingw/lib/libSDL2.dll.a +0 -0
  174. data/assets/mingw/lib/libSDL2_image.a +0 -0
  175. data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
  176. data/assets/mingw/lib/libSDL2_mixer.a +0 -0
  177. data/assets/mingw/lib/libSDL2_mixer.dll.a +0 -0
  178. data/assets/mingw/lib/libSDL2_test.a +0 -0
  179. data/assets/mingw/lib/libSDL2_ttf.a +0 -0
  180. data/assets/mingw/lib/libSDL2_ttf.dll.a +0 -0
  181. data/assets/mingw/lib/libSDL2main.a +0 -0
  182. data/assets/mingw/lib/libglew32.a +0 -0
  183. data/assets/mingw/lib/libglew32.dll.a +0 -0
  184. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
  185. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +6 -0
  186. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +17 -0
  187. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
  188. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +6 -0
  189. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
  190. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  191. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
  192. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +6 -0
  193. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +17 -0
  194. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
  195. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +6 -0
  196. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
  197. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  198. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +32 -0
  199. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +16 -0
  200. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +16 -0
  201. data/assets/tvos/Assets.xcassets/Contents.json +6 -0
  202. data/assets/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +22 -0
  203. data/assets/tvos/Info.plist +30 -0
  204. data/assets/tvos/MRuby.framework/Headers/mrbconf.h +143 -0
  205. data/assets/tvos/MRuby.framework/Headers/mruby/array.h +280 -0
  206. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  207. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  208. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
  209. data/assets/tvos/MRuby.framework/Headers/mruby/class.h +97 -0
  210. data/assets/tvos/MRuby.framework/Headers/mruby/common.h +77 -0
  211. data/assets/tvos/MRuby.framework/Headers/mruby/compile.h +195 -0
  212. data/assets/tvos/MRuby.framework/Headers/mruby/data.h +75 -0
  213. data/assets/tvos/MRuby.framework/Headers/mruby/debug.h +67 -0
  214. data/assets/tvos/MRuby.framework/Headers/mruby/dump.h +196 -0
  215. data/assets/tvos/MRuby.framework/Headers/mruby/error.h +75 -0
  216. data/assets/tvos/MRuby.framework/Headers/mruby/gc.h +91 -0
  217. data/assets/tvos/MRuby.framework/Headers/mruby/hash.h +215 -0
  218. data/assets/tvos/MRuby.framework/Headers/mruby/irep.h +75 -0
  219. data/assets/tvos/MRuby.framework/Headers/mruby/istruct.h +47 -0
  220. data/assets/tvos/MRuby.framework/Headers/mruby/khash.h +274 -0
  221. data/assets/tvos/MRuby.framework/Headers/mruby/numeric.h +161 -0
  222. data/assets/tvos/MRuby.framework/Headers/mruby/object.h +44 -0
  223. data/assets/tvos/MRuby.framework/Headers/mruby/opcode.h +69 -0
  224. data/assets/tvos/MRuby.framework/Headers/mruby/ops.h +117 -0
  225. data/assets/tvos/MRuby.framework/Headers/mruby/proc.h +131 -0
  226. data/assets/tvos/MRuby.framework/Headers/mruby/range.h +49 -0
  227. data/assets/tvos/MRuby.framework/Headers/mruby/re.h +16 -0
  228. data/assets/tvos/MRuby.framework/Headers/mruby/string.h +444 -0
  229. data/assets/tvos/MRuby.framework/Headers/mruby/throw.h +55 -0
  230. data/assets/tvos/MRuby.framework/Headers/mruby/value.h +309 -0
  231. data/assets/tvos/MRuby.framework/Headers/mruby/variable.h +136 -0
  232. data/assets/tvos/MRuby.framework/Headers/mruby/version.h +110 -0
  233. data/assets/tvos/MRuby.framework/Headers/mruby.h +1282 -0
  234. data/assets/tvos/MRuby.framework/Info.plist +20 -0
  235. data/assets/tvos/MRuby.framework/MRuby +0 -0
  236. data/assets/tvos/MyApp.xcodeproj/project.pbxproj +350 -0
  237. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  238. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  239. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  240. data/assets/tvos/main.c +1 -0
  241. data/bin/ruby2d +142 -0
  242. data/ext/ruby2d/common.c +185 -0
  243. data/ext/ruby2d/controllers.c +110 -0
  244. data/ext/ruby2d/extconf.rb +147 -0
  245. data/ext/ruby2d/font.c +35 -0
  246. data/ext/ruby2d/gl.c +398 -0
  247. data/ext/ruby2d/gl2.c +86 -0
  248. data/ext/ruby2d/gl3.c +305 -0
  249. data/ext/ruby2d/gles.c +249 -0
  250. data/ext/ruby2d/image.c +58 -0
  251. data/ext/ruby2d/input.c +48 -0
  252. data/ext/ruby2d/music.c +127 -0
  253. data/ext/ruby2d/ruby2d.c +1374 -0
  254. data/ext/ruby2d/ruby2d.h +656 -0
  255. data/ext/ruby2d/shapes.c +154 -0
  256. data/ext/ruby2d/sound.c +118 -0
  257. data/ext/ruby2d/text.c +22 -0
  258. data/ext/ruby2d/window.c +414 -0
  259. data/lib/ruby2d/circle.rb +43 -0
  260. data/lib/ruby2d/cli/build.rb +237 -0
  261. data/lib/ruby2d/cli/colorize.rb +10 -0
  262. data/lib/ruby2d/cli/console.rb +65 -0
  263. data/lib/ruby2d/cli/enable_console.rb +5 -0
  264. data/lib/ruby2d/cli/launch.rb +50 -0
  265. data/lib/ruby2d/color.rb +136 -0
  266. data/lib/ruby2d/dsl.rb +46 -0
  267. data/lib/ruby2d/entity.rb +17 -0
  268. data/lib/ruby2d/exceptions.rb +6 -0
  269. data/lib/ruby2d/font.rb +96 -0
  270. data/lib/ruby2d/image.rb +58 -0
  271. data/lib/ruby2d/line.rb +89 -0
  272. data/lib/ruby2d/music.rb +67 -0
  273. data/lib/ruby2d/pixel.rb +17 -0
  274. data/lib/ruby2d/quad.rb +96 -0
  275. data/lib/ruby2d/rectangle.rb +65 -0
  276. data/lib/ruby2d/renderable.rb +40 -0
  277. data/lib/ruby2d/ruby2d.so +0 -0
  278. data/lib/ruby2d/sound.rb +55 -0
  279. data/lib/ruby2d/sprite.rb +232 -0
  280. data/lib/ruby2d/square.rb +37 -0
  281. data/lib/ruby2d/text.rb +76 -0
  282. data/lib/ruby2d/texture.rb +28 -0
  283. data/lib/ruby2d/tileset.rb +87 -0
  284. data/lib/ruby2d/triangle.rb +82 -0
  285. data/lib/ruby2d/version.rb +5 -0
  286. data/lib/ruby2d/vertices.rb +84 -0
  287. data/lib/ruby2d/window.rb +673 -0
  288. data/lib/ruby2d.rb +69 -0
  289. metadata +346 -0
@@ -0,0 +1,185 @@
1
+ // Ruby 2D Shared functions and data
2
+
3
+ #include "ruby2d.h"
4
+
5
+ // Initalize shared data
6
+ bool R2D_diagnostics = false;
7
+
8
+ // Initialization status
9
+ static bool initted = false;
10
+
11
+
12
+ /*
13
+ * Provide a `vasprintf()` implementation for Windows
14
+ */
15
+ #if WINDOWS && !MINGW
16
+ int vasprintf(char **strp, const char *fmt, va_list ap) {
17
+ int r = -1, size = _vscprintf(fmt, ap);
18
+ if ((size >= 0) && (size < INT_MAX)) {
19
+ *strp = (char *)malloc(size + 1);
20
+ if (*strp) {
21
+ r = vsnprintf(*strp, size + 1, fmt, ap);
22
+ if (r == -1) free(*strp);
23
+ }
24
+ } else { *strp = 0; }
25
+ return(r);
26
+ }
27
+ #endif
28
+
29
+
30
+ /*
31
+ * Checks if a file exists and can be accessed
32
+ */
33
+ bool R2D_FileExists(const char *path) {
34
+ if (!path) return false;
35
+
36
+ if (access(path, F_OK) != -1) {
37
+ return true;
38
+ } else {
39
+ return false;
40
+ }
41
+ }
42
+
43
+
44
+ /*
45
+ * Logs standard messages to the console
46
+ */
47
+ void R2D_Log(int type, const char *msg, ...) {
48
+
49
+ // Always log if diagnostics set, or if a warning or error message
50
+ if (R2D_diagnostics || type != R2D_INFO) {
51
+
52
+ va_list args;
53
+ va_start(args, msg);
54
+
55
+ switch (type) {
56
+ case R2D_INFO:
57
+ printf("\033[1;36mInfo:\033[0m ");
58
+ break;
59
+ case R2D_WARN:
60
+ printf("\033[1;33mWarning:\033[0m ");
61
+ break;
62
+ case R2D_ERROR:
63
+ printf("\033[1;31mError:\033[0m ");
64
+ break;
65
+ }
66
+
67
+ vprintf(msg, args);
68
+ printf("\n");
69
+ va_end(args);
70
+ }
71
+ }
72
+
73
+
74
+ /*
75
+ * Logs Ruby 2D errors to the console, with caller and message body
76
+ */
77
+ void R2D_Error(const char *caller, const char *msg, ...) {
78
+ va_list args;
79
+ va_start(args, msg);
80
+ char *fmsg;
81
+ vasprintf(&fmsg, msg, args);
82
+ R2D_Log(R2D_ERROR, "(%s) %s", caller, fmsg);
83
+ free(fmsg);
84
+ va_end(args);
85
+ }
86
+
87
+
88
+ /*
89
+ * Enable/disable logging of diagnostics
90
+ */
91
+ void R2D_Diagnostics(bool status) {
92
+ R2D_diagnostics = status;
93
+ }
94
+
95
+
96
+ /*
97
+ * Enable terminal colors in Windows
98
+ */
99
+ void R2D_Windows_EnableTerminalColors() {
100
+ #if WINDOWS
101
+ HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
102
+ DWORD dwMode = 0;
103
+ GetConsoleMode(hOut, &dwMode);
104
+ dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
105
+ SetConsoleMode(hOut, dwMode);
106
+ #endif
107
+ }
108
+
109
+
110
+ /*
111
+ * Initialize Ruby 2D subsystems
112
+ */
113
+ bool R2D_Init() {
114
+ if (initted) return true;
115
+
116
+ // Enable terminal colors in Windows
117
+ R2D_Windows_EnableTerminalColors();
118
+
119
+ R2D_Log(R2D_INFO, "Initializing Ruby 2D");
120
+
121
+ // Initialize SDL
122
+ if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
123
+ R2D_Error("SDL_Init", SDL_GetError());
124
+ return false;
125
+ }
126
+
127
+ // Initialize SDL_ttf
128
+ if (TTF_Init() != 0) {
129
+ R2D_Error("TTF_Init", TTF_GetError());
130
+ return false;
131
+ }
132
+
133
+ // Initialize SDL_mixer
134
+ int mix_flags = MIX_INIT_FLAC | MIX_INIT_OGG | MIX_INIT_MP3;
135
+ int mix_initted = Mix_Init(mix_flags);
136
+
137
+ // Bug in SDL2_mixer 2.0.2:
138
+ // Mix_Init should return OR'ed flags if successful, but returns 0 instead.
139
+ // Fixed in: https://hg.libsdl.org/SDL_mixer/rev/7fa15b556953
140
+ const SDL_version *linked_version = Mix_Linked_Version();
141
+ if (linked_version->major == 2 && linked_version->minor == 0 && linked_version->patch == 2) {
142
+ // It's version 2.0.2, don't check for Mix_Init errors
143
+ } else {
144
+ if ((mix_initted&mix_flags) != mix_flags) {
145
+ R2D_Error("Mix_Init", Mix_GetError());
146
+ }
147
+ }
148
+
149
+ if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 4096) != 0) {
150
+ R2D_Error("Mix_OpenAudio", Mix_GetError());
151
+ return false;
152
+ }
153
+
154
+ // Call `R2D_Quit` at program exit
155
+ atexit(R2D_Quit);
156
+
157
+ // All subsystems initted
158
+ initted = true;
159
+ return true;
160
+ }
161
+
162
+
163
+ /*
164
+ * Gets the primary display's dimensions
165
+ */
166
+ void R2D_GetDisplayDimensions(int *w, int *h) {
167
+ R2D_Init();
168
+ SDL_DisplayMode dm;
169
+ SDL_GetCurrentDisplayMode(0, &dm);
170
+ *w = dm.w;
171
+ *h = dm.h;
172
+ }
173
+
174
+
175
+ /*
176
+ * Quits Ruby 2D subsystems
177
+ */
178
+ void R2D_Quit() {
179
+ IMG_Quit();
180
+ Mix_CloseAudio();
181
+ Mix_Quit();
182
+ TTF_Quit();
183
+ SDL_Quit();
184
+ initted = false;
185
+ }
@@ -0,0 +1,110 @@
1
+ // controllers.c
2
+
3
+ #include "ruby2d.h"
4
+
5
+ // Stores the last joystick instance ID seen by the system. These instance IDs
6
+ // are unique and increment with each new joystick connected.
7
+ static int last_intance_id = -1;
8
+
9
+
10
+ /*
11
+ * Add controller mapping from string
12
+ */
13
+ void R2D_AddControllerMapping(const char *map) {
14
+ int result = SDL_GameControllerAddMapping(map);
15
+
16
+ char guid[33];
17
+ strncpy(guid, map, 32);
18
+
19
+ switch (result) {
20
+ case 1:
21
+ R2D_Log(R2D_INFO, "Mapping added for GUID: %s", guid);
22
+ break;
23
+ case 0:
24
+ R2D_Log(R2D_INFO, "Mapping updated for GUID: %s", guid);
25
+ break;
26
+ case -1:
27
+ R2D_Error("SDL_GameControllerAddMapping", SDL_GetError());
28
+ break;
29
+ }
30
+ }
31
+
32
+
33
+ /*
34
+ * Add controller mappings from the specified file
35
+ */
36
+ void R2D_AddControllerMappingsFromFile(const char *path) {
37
+ if (!R2D_FileExists(path)) {
38
+ R2D_Log(R2D_WARN, "Controller mappings file not found: %s", path);
39
+ return;
40
+ }
41
+
42
+ int mappings_added = SDL_GameControllerAddMappingsFromFile(path);
43
+ if (mappings_added == -1) {
44
+ R2D_Error("SDL_GameControllerAddMappingsFromFile", SDL_GetError());
45
+ } else {
46
+ R2D_Log(R2D_INFO, "Added %i controller mapping(s)", mappings_added);
47
+ }
48
+ }
49
+
50
+
51
+ /*
52
+ * Check if joystick is a controller
53
+ */
54
+ bool R2D_IsController(SDL_JoystickID id) {
55
+ return SDL_GameControllerFromInstanceID(id) == NULL ? false : true;
56
+ }
57
+
58
+
59
+ /*
60
+ * Open controllers and joysticks
61
+ */
62
+ void R2D_OpenControllers() {
63
+
64
+ char guid_str[33];
65
+
66
+ // Enumerate joysticks
67
+ for (int device_index = 0; device_index < SDL_NumJoysticks(); ++device_index) {
68
+
69
+ // Check if joystick supports SDL's game controller interface (a mapping is available)
70
+ if (SDL_IsGameController(device_index)) {
71
+ SDL_GameController *controller = SDL_GameControllerOpen(device_index);
72
+ SDL_JoystickID intance_id = SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(controller));
73
+
74
+ SDL_JoystickGetGUIDString(
75
+ SDL_JoystickGetGUID(SDL_GameControllerGetJoystick(controller)),
76
+ guid_str, 33
77
+ );
78
+
79
+ if (intance_id > last_intance_id) {
80
+ if (controller) {
81
+ R2D_Log(R2D_INFO, "Controller #%i: %s\n GUID: %s", intance_id, SDL_GameControllerName(controller), guid_str);
82
+ } else {
83
+ R2D_Log(R2D_ERROR, "Could not open controller #%i: %s", intance_id, SDL_GetError());
84
+ }
85
+ last_intance_id = intance_id;
86
+ }
87
+
88
+ // Controller interface not supported, try to open as joystick
89
+ } else {
90
+ SDL_Joystick *joy = SDL_JoystickOpen(device_index);
91
+ SDL_JoystickID intance_id = SDL_JoystickInstanceID(joy);
92
+
93
+ if (!joy) {
94
+ R2D_Log(R2D_ERROR, "Could not open controller");
95
+ } else if(intance_id > last_intance_id) {
96
+ SDL_JoystickGetGUIDString(
97
+ SDL_JoystickGetGUID(joy),
98
+ guid_str, 33
99
+ );
100
+ R2D_Log(R2D_INFO,
101
+ "Controller #%i: %s\n GUID: %s\n Axes: %d\n Buttons: %d\n Balls: %d",
102
+ intance_id, SDL_JoystickName(joy), guid_str, SDL_JoystickNumAxes(joy),
103
+ SDL_JoystickNumButtons(joy), SDL_JoystickNumBalls(joy)
104
+ );
105
+ R2D_Log(R2D_WARN, "Controller #%i does not have a mapping available", intance_id);
106
+ last_intance_id = intance_id;
107
+ }
108
+ }
109
+ }
110
+ }
@@ -0,0 +1,147 @@
1
+ require 'mkmf'
2
+ require_relative '../../lib/ruby2d/cli/colorize'
3
+
4
+ $errors = [] # Holds errors
5
+
6
+ # Set the OS platform
7
+ case RUBY_PLATFORM
8
+ when /darwin/
9
+ $platform = :macos
10
+ when /linux/
11
+ $platform = :linux
12
+ if `cat /etc/os-release` =~ /raspbian/
13
+ $platform = :linux_rpi
14
+ end
15
+ when /bsd/
16
+ $platform = :bsd
17
+ when /mingw/
18
+ $platform = :windows
19
+ else
20
+ $platform = nil
21
+ end
22
+
23
+
24
+ # Helper functions #############################################################
25
+
26
+ # Print installation errors
27
+ def print_errors
28
+ puts "
29
+ #{"== #{"Ruby 2D Installation Errors".error} =======================================\n"}
30
+ #{$errors.join("\n ")}\n
31
+ #{"======================================================================"}"
32
+ end
33
+
34
+
35
+ # Add compiler and linker flags
36
+ def add_flags(type, flags)
37
+ case type
38
+ when :c
39
+ $CFLAGS << " #{flags} "
40
+ when :ld
41
+ $LDFLAGS << " #{flags} "
42
+ end
43
+ end
44
+
45
+
46
+ # Check for SDL libraries
47
+ def check_sdl
48
+ unless have_library('SDL2') && have_library('SDL2_image') && have_library('SDL2_mixer') && have_library('SDL2_ttf')
49
+
50
+ $errors << "Couldn't find packages needed by Ruby 2D."
51
+
52
+ case $platform
53
+ when :linux, :linux_rpi
54
+ # Fedora and CentOS
55
+ if system('which yum')
56
+ $errors << "Install the following packages using `yum` (or `dnf`) and try again:\n" <<
57
+ " SDL2-devel SDL2_image-devel SDL2_mixer-devel SDL2_ttf-devel".bold
58
+
59
+ # Arch
60
+ elsif system('which pacman')
61
+ $errors << "Install the following packages using `pacman` and try again:\n" <<
62
+ " sdl2 sdl2_image sdl2_mixer sdl2_ttf".bold
63
+
64
+ # openSUSE
65
+ elsif system('which zypper')
66
+ $errors << "Install the following packages using `zypper` and try again:\n" <<
67
+ " libSDL2-devel libSDL2_image-devel libSDL2_mixer-devel libSDL2_ttf-devel".bold
68
+
69
+ # Ubuntu, Debian, and Mint
70
+ # `apt` must be last because openSUSE has it aliased to `zypper`
71
+ elsif system('which apt')
72
+ $errors << "Install the following packages using `apt` and try again:\n" <<
73
+ " libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev".bold
74
+ end
75
+ when :bsd
76
+ $errors << "Install the following packages using `pkg` and try again:\n" <<
77
+ " sdl2 sdl2_image sdl2_mixer sdl2_ttf".bold
78
+ end
79
+
80
+ $errors << "" << "See #{"ruby2d.com".bold} for additional help."
81
+ print_errors; exit
82
+ end
83
+ end
84
+
85
+
86
+ # Set Raspberry Pi flags
87
+ def set_rpi_flags
88
+ if $platform == :linux_rpi
89
+ add_flags(:c, '-I/opt/vc/include')
90
+ add_flags(:ld, '-L/opt/vc/lib -lbrcmGLESv2')
91
+ end
92
+ end
93
+
94
+
95
+ # Use SDL and other libraries installed by the user (not those bundled with the gem)
96
+ def use_usr_libs
97
+ # Add flags
98
+ set_rpi_flags
99
+ add_flags(:c, '-I/usr/local/include')
100
+ end
101
+
102
+
103
+ # Configure native extension ###################################################
104
+
105
+ # Build Ruby 2D native extention using libraries installed by user
106
+ # To use install flag: `gem install ruby2d -- libs`
107
+ if ARGV.include? 'libs'
108
+ use_usr_libs
109
+
110
+ # Use libraries provided by the gem (default)
111
+ else
112
+ add_flags(:c, '-std=c11')
113
+
114
+ case $platform
115
+
116
+ when :macos
117
+ add_flags(:c, '-I../../assets/include')
118
+ ldir = "#{Dir.pwd}/../../assets/macos/lib"
119
+
120
+ add_flags(:ld, "#{ldir}/libSDL2.a #{ldir}/libSDL2_image.a #{ldir}/libSDL2_mixer.a #{ldir}/libSDL2_ttf.a")
121
+ add_flags(:ld, "#{ldir}/libjpeg.a #{ldir}/libpng16.a #{ldir}/libtiff.a #{ldir}/libwebp.a")
122
+ add_flags(:ld, "#{ldir}/libmpg123.a #{ldir}/libogg.a #{ldir}/libFLAC.a #{ldir}/libvorbis.a #{ldir}/libvorbisfile.a")
123
+ add_flags(:ld, "#{ldir}/libfreetype.a #{ldir}/libmodplug.a")
124
+ add_flags(:ld, "-Wl,-framework,Cocoa -Wl,-framework,GameController -Wl,-framework,ForceFeedback")
125
+
126
+ when :linux, :linux_rpi, :bsd
127
+ check_sdl
128
+
129
+ set_rpi_flags
130
+ add_flags(:ld, "-lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -lm")
131
+ if $platform == :linux then add_flags(:ld, '-lGL') end
132
+
133
+ when :windows
134
+ add_flags(:c, '-I../../assets/include')
135
+ add_flags(:ld, '-L../../assets/mingw/lib -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf')
136
+ add_flags(:ld, '-lmingw32 -lopengl32 -lglew32')
137
+
138
+ # If can't detect the platform, use libraries installed by the user
139
+ else
140
+ use_usr_libs
141
+ end
142
+ end
143
+
144
+ $LDFLAGS.gsub!(/\n/, ' ') # remove newlines in flags, they can cause problems
145
+
146
+ # Create Makefile
147
+ create_makefile('ruby2d/ruby2d')
data/ext/ruby2d/font.c ADDED
@@ -0,0 +1,35 @@
1
+ // font.c
2
+
3
+ #include "ruby2d.h"
4
+
5
+
6
+ /*
7
+ * Create a TTF_Font object given a path to a font and a size
8
+ */
9
+ TTF_Font *R2D_FontCreateTTFFont(const char *path, int size, const char *style) {
10
+
11
+ // Check if font file exists
12
+ if (!R2D_FileExists(path)) {
13
+ R2D_Error("R2D_FontCreateTTFFont", "Font file `%s` not found", path);
14
+ return NULL;
15
+ }
16
+
17
+ TTF_Font *font = TTF_OpenFont(path, size);
18
+
19
+ if (!font) {
20
+ R2D_Error("TTF_OpenFont", TTF_GetError());
21
+ return NULL;
22
+ }
23
+
24
+ if(strncmp(style, "bold", 4) == 0) {
25
+ TTF_SetFontStyle(font, TTF_STYLE_BOLD);
26
+ } else if(strncmp(style, "italic", 6) == 0) {
27
+ TTF_SetFontStyle(font, TTF_STYLE_ITALIC);
28
+ } else if(strncmp(style, "underline", 9) == 0) {
29
+ TTF_SetFontStyle(font, TTF_STYLE_UNDERLINE);
30
+ } else if(strncmp(style, "strikethrough", 13) == 0) {
31
+ TTF_SetFontStyle(font, TTF_STYLE_STRIKETHROUGH);
32
+ }
33
+
34
+ return font;
35
+ }