stylet 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +2 -0
  5. data/Gemfile +16 -0
  6. data/README.org +19 -0
  7. data/Rakefile +17 -0
  8. data/bin/setup +63 -0
  9. data/bin/stylet +8 -0
  10. data/examples/.ruby-version +1 -0
  11. data/examples/00100_lib_hello_world.rb +8 -0
  12. data/examples/00110_lib_sge_check.rb +6 -0
  13. data/examples/00120_lib_/343/202/254/343/203/263/343/203/236/345/200/244/343/201/256/345/244/211/346/233/264.rb +22 -0
  14. data/examples/00130_lib_window_title.rb +8 -0
  15. data/examples/00140_lib_callbacks.rb +8 -0
  16. data/examples/00150_lib_vector.rb +5 -0
  17. data/examples/00160_lib_run.rb +4 -0
  18. data/examples/00170_lib_frame.rb +4 -0
  19. data/examples/00180_lib_config/347/242/272/350/252/215.rb +7 -0
  20. data/examples/00190_lib_/343/201/231/343/201/271/343/201/246/345/220/214/343/201/230/343/202/252/343/203/226/343/202/270/343/202/247/343/202/257/343/203/210.rb +10 -0
  21. data/examples/00200_lib_/343/203/254/343/202/267/343/203/274/343/203/220/343/203/274/343/202/222/347/234/201/347/225/245/343/201/231/343/202/213/346/226/271/346/263/225/343/201/256/343/203/206/343/202/271/343/203/210.rb +28 -0
  22. data/examples/00210_lib_delegators.rb +7 -0
  23. data/examples/00220_lib_template_method.rb +13 -0
  24. data/examples/00230_lib_/350/203/214/346/231/257/347/224/273/345/203/217/350/241/250/347/244/272.rb +9 -0
  25. data/examples/00240_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2171_/351/273/222/343/201/256/344/270/212/343/201/253/350/203/214/346/231/257.rb +18 -0
  26. data/examples/00250_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2172_/350/203/214/346/231/257/343/201/256/344/270/212/343/201/253/351/273/222.rb +17 -0
  27. data/examples/00260_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2173_/350/203/214/346/231/257/343/201/256/344/270/212/343/201/253/351/273/222_/347/224/273/351/235/242/343/202/265/343/202/244/343/202/272/343/203/225/343/202/243/343/203/203/343/203/210_/351/207/215/343/201/204.rb +27 -0
  28. data/examples/00270_lib_/350/203/214/346/231/257/347/224/273/345/203/217/343/202/222/346/232/227/343/201/2173_/350/203/214/346/231/257/343/201/256/344/270/212/343/201/253/351/273/222_/347/224/273/351/235/242/343/202/265/343/202/244/343/202/272/343/203/225/343/202/243/343/203/203/343/203/210_/351/253/230/351/200/237/345/214/226.rb +44 -0
  29. data/examples/00280_lib_/347/211/271/345/256/232/343/201/256/343/202/250/343/203/252/343/202/242/343/201/240/343/201/221/345/276/220/343/200/205/343/201/253/346/266/210/343/201/231.rb +26 -0
  30. data/examples/00290_lib_/350/203/214/346/231/257/350/211/262/345/244/211/346/233/264.rb +5 -0
  31. data/examples/00300_lib_/343/202/255/343/203/243/343/203/251/343/202/257/343/202/277/347/224/273/345/203/217/343/202/222/350/241/250/347/244/272/343/201/231/343/202/213/344/276/213.rb +17 -0
  32. data/examples/00310_lib_/343/202/255/343/203/243/343/203/251/343/202/257/343/202/277/347/224/273/345/203/217/343/201/256/343/202/242/343/203/213/343/203/241/343/203/274/343/202/267/343/203/247/343/203/263.rb +18 -0
  33. data/examples/00320_lib_/343/202/255/343/203/243/343/203/251/343/202/257/343/202/277/346/213/241/345/244/247/347/270/256/345/260/217/345/233/236/350/273/242.rb +21 -0
  34. data/examples/00330_joystick.rb +5 -0
  35. data/examples/00340_joystick_PS3/343/202/242/343/203/212/343/203/255/343/202/260/343/203/254/343/203/220/343/203/274/343/201/256/345/213/225/343/201/215/343/201/214/345/206/205/351/203/250/343/201/247/343/201/257/345/233/233/350/247/222.rb +30 -0
  36. data/examples/00350_joystick_PS3/343/202/242/343/203/212/343/203/255/343/202/260/343/203/254/343/203/220/343/203/274/343/201/256/350/252/277/346/225/264/346/270/210/343/201/277/343/203/231/343/202/257/343/203/210/343/203/253.rb +12 -0
  37. data/examples/00360_lib_mouse.rb +5 -0
  38. data/examples/00370_lib_input.rb +29 -0
  39. data/examples/00380_lib_vputs_align.rb +8 -0
  40. data/examples/00390_/343/203/225/343/202/251/343/203/263/343/203/210/344/270/200/350/246/247.rb +15 -0
  41. data/examples/00400_lib_draw_circle.rb +8 -0
  42. data/examples/00410_SDL/343/201/256draw_rect/343/201/2571/343/203/224/343/202/257/343/202/273/343/203/253/344/275/231/345/210/206/343/201/253/346/217/217/347/224/273/343/201/225/343/202/214/343/202/213/343/201/256/343/201/247/346/263/250/346/204/217.rb +7 -0
  43. data/examples/00420_circle_on_circle.rb +10 -0
  44. data/examples/00430_rotate.rb +16 -0
  45. data/examples/00440_draw_triangle.rb +7 -0
  46. data/examples/00450_parabora_triangle.rb +37 -0
  47. data/examples/00460_ice_hockey.rb +88 -0
  48. data/examples/00470_collision_block_vs_block.rb +120 -0
  49. data/examples/00480_simple_circle_controll.rb +37 -0
  50. data/examples/00490_/347/255/211/351/200/237/347/247/273/345/213/225_uniform_velocity_rain.rb +51 -0
  51. data/examples/00500_/345/212/240/351/200/237/346/224/276/347/211/251/347/267/232_parabora_volcano.rb +94 -0
  52. data/examples/00510_3d.rb +53 -0
  53. data/examples/00520_/343/203/210/343/203/253/343/203/215/343/201/256/343/203/241/343/203/213/343/203/245/343/203/274/351/242/250/343/201/256/345/213/225/343/201/215.rb +77 -0
  54. data/examples/00530_curve_2/346/254/241/343/203/231/343/202/270/343/202/247/346/233/262/347/267/232/343/201/250/347/233/264/347/267/232/343/201/250/343/201/256/344/272/244/347/202/271.rb +43 -0
  55. data/examples/00540_curve_3/346/254/241/343/203/231/343/202/270/343/202/247/346/233/262/347/267/232.rb +40 -0
  56. data/examples/00550_curve_N/346/254/241/343/203/231/343/202/270/343/202/247/346/233/262/347/267/232.rb +92 -0
  57. data/examples/00560_curve_/343/202/271/343/203/227/343/203/251/343/202/244/343/203/263/346/233/262/347/267/232.rb +113 -0
  58. data/examples/00570_/345/206/206/351/201/213/345/213/225_circle_jet_coaster.rb +52 -0
  59. data/examples/00580_/345/206/206/343/202/222/346/212/274/343/201/231/343/201/262/343/201/243/343/201/261/343/202/213_collision_circle_vs_circle_push_or_pull.rb +56 -0
  60. data/examples/00590_/350/212/213/350/231/253/343/202/264/343/203/240/347/264/220/343/203/207/343/203/242_collision_demo_circle_worm.rb +104 -0
  61. data/examples/00600_/346/214/257/343/202/212/345/255/220_swing.rb +145 -0
  62. data/examples/00610_/345/206/205/347/251/215/343/201/250/345/244/226/347/251/215_inner_product.rb +36 -0
  63. data/examples/00620_/346/263/225/347/267/232/343/203/231/343/202/257/343/203/210/343/203/253.rb +23 -0
  64. data/examples/00630_/345/206/206/343/201/250/345/206/206/343/201/256/345/217/215/345/260/204_collision_reflect_circle_vs_circle.rb +222 -0
  65. data/examples/00640_/347/202/271/343/201/250/347/267/232/345/210/206/343/201/256/344/272/244/345/267/256/345/210/244/345/256/232_collision_ray_circle_vs_line.rb +261 -0
  66. data/examples/00650_/345/206/206/343/201/250/347/202/271/343/201/256/345/217/215/345/260/204_collision_circle_vs_dot.rb +36 -0
  67. data/examples/00660_/345/206/206/343/201/250/345/206/206/343/201/250/347/267/232/345/210/206/343/201/256/345/217/215/345/260/204/343/203/207/343/203/242_collision_demo.rb +305 -0
  68. data/examples/00670_/343/203/251/343/202/244/343/203/225/343/202/262/343/203/274/343/203/240.rb +86 -0
  69. data/examples/00680_2/347/202/271/343/202/222/351/200/232/343/202/213/347/233/264/347/267/232/343/201/256/346/226/271/347/250/213/345/274/217.rb +81 -0
  70. data/examples/00690_/343/203/222/343/203/253/343/203/231/343/203/253/343/203/210/346/233/262/347/267/232.rb +77 -0
  71. data/examples/00700_/343/202/263/343/203/203/343/203/233/346/233/262/347/267/232.rb +79 -0
  72. data/examples/00710_/343/202/267/343/202/260/343/203/242/343/202/244/343/203/211/346/233/262/347/267/232.rb +40 -0
  73. data/examples/00720_/343/202/267/343/203/200/346/244/215/347/211/251.rb +44 -0
  74. data/examples/00730_/343/202/257/343/203/252/343/203/225/343/202/251/343/203/274/343/203/211/343/202/242/343/203/210/343/203/251/343/202/257/343/202/277_/345/237/272/346/234/254.rb +29 -0
  75. data/examples/00740_/343/202/257/343/203/252/343/203/225/343/202/251/343/203/274/343/203/211/343/202/242/343/203/210/343/203/251/343/202/257/343/202/277_/346/224/271/350/211/257_/350/211/262/344/273/230/343/201/215.rb +68 -0
  76. data/examples/00750_/343/202/257/343/203/252/343/203/225/343/202/251/343/203/274/343/203/211/343/202/242/343/203/210/343/203/251/343/202/257/343/202/277_/343/203/211/343/203/274/343/203/212/343/203/204/345/236/213.rb +44 -0
  77. data/examples/00760_/347/201/253/350/212/261.rb +42 -0
  78. data/examples/00770_atan/343/201/247atan2/343/202/222/346/233/270/343/201/217.rb +26 -0
  79. data/examples/00780_/346/250/231/346/272/226/343/203/251/343/202/244/343/203/226/343/203/251/343/203/252/343/201/256atan2_sin_cos/343/202/222/344/275/277/343/201/206.rb +15 -0
  80. data/examples/00790_/350/247/222/345/272/246/343/201/250/343/203/251/343/202/270/343/202/242/343/203/263/343/201/256/347/233/270/344/272/222/345/244/211/346/217/233.rb +22 -0
  81. data/examples/00800_/347/220/203/343/201/214/347/233/264/347/267/232/347/232/204/343/201/253/345/213/225/343/201/204/343/201/246/343/201/204/343/202/213/343/201/240/343/201/221/343/201/247/345/233/236/350/273/242/343/201/227/343/201/246/343/201/204/343/202/213/343/202/210/343/201/206/343/201/253/350/246/213/343/201/210/343/202/213.rb +27 -0
  82. data/examples/00810_/343/202/267/343/203/237/343/203/245/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263_/350/273/212.rb +75 -0
  83. data/examples/00820_/343/202/267/343/203/237/343/203/245/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263_/346/210/246/350/273/212.rb +90 -0
  84. data/examples/00830_/350/247/222/345/272/246/345/267/256.rb +36 -0
  85. data/examples/00840_/346/224/276/347/211/251/347/267/232/343/201/247/347/213/231/346/222/203_/346/231/202/351/226/223/345/233/272/345/256/232.rb +61 -0
  86. data/examples/00850_/346/224/276/347/211/251/347/267/232/343/201/247/347/213/231/346/222/203_/350/247/222/345/272/246/345/233/272/345/256/232.rb +84 -0
  87. data/examples/00860_/346/224/276/347/211/251/347/267/232/343/201/247/347/213/231/346/222/203_/351/200/237/345/272/246/345/233/272/345/256/232.rb +66 -0
  88. data/examples/00870_/350/247/222/345/272/246/350/243/234/346/255/243_/345/212/240/351/200/237/343/203/237/343/202/265/343/202/244/343/203/253.rb +60 -0
  89. data/examples/00880_/345/210/235/351/200/237/343/201/214/351/200/237/343/201/204/343/203/237/343/202/265/343/202/244/343/203/253.rb +51 -0
  90. data/examples/00890_/346/255/243/350/246/217/344/271/261/346/225/260/343/201/250/346/250/231/346/272/226/345/201/217/345/267/256/343/201/256/345/217/257/350/246/226/345/214/226.rb +72 -0
  91. data/examples/00900_/345/220/221/345/277/203/345/212/233/343/201/247/345/233/236/350/273/242/343/200/220/350/247/222/345/272/2460/345/272/246/343/201/213/343/202/211/343/200/221.rb +23 -0
  92. data/examples/00910_/345/220/221/345/277/203/345/212/233/343/201/247/345/233/236/350/273/242/343/200/220/344/273/273/346/204/217/343/201/256/350/247/222/345/272/246/343/201/213/343/202/211/343/200/221.rb +33 -0
  93. data/examples/00920_/343/203/236/343/203/252/343/202/252/343/203/226/343/203/251/343/202/266/343/203/274/343/202/272/351/242/250/343/201/253/347/224/273/351/235/242/344/270/241/347/253/257/343/201/214/347/271/213/343/201/243/343/201/246/343/201/204/343/202/213/344/276/213.rb +29 -0
  94. data/examples/00930_/345/212/271/346/236/234/351/237/263.rb +17 -0
  95. data/examples/00940_/343/203/236/343/203/203/343/203/227/343/203/201/343/203/203/343/203/227/343/201/256/343/203/236/343/203/203/343/203/227/351/205/215/347/275/256.rb +71 -0
  96. data/examples/00950_/343/203/236/343/203/203/343/203/227/343/203/201/343/203/203/343/203/227/343/201/256/350/241/250/347/244/272/344/276/213.rb +28 -0
  97. data/examples/00960_/343/203/236/343/203/203/343/203/227/343/203/201/343/203/203/343/203/227/343/201/250/345/215/230/344/270/200/347/224/273/345/203/217/343/201/256/351/201/225/343/201/204/343/202/222/345/220/270/345/217/216/343/201/231/343/202/213/344/276/213.rb +47 -0
  98. data/examples/00970_observer_/343/201/235/343/201/2561_/347/233/264/346/216/245.rb +28 -0
  99. data/examples/00980_observer_/343/201/235/343/201/2562_/346/231/256/351/200/232/343/201/253Singleton/347/211/210.rb +30 -0
  100. data/examples/00990_observer_/343/201/235/343/201/2563_SimpleDelegator/347/211/210.rb +28 -0
  101. data/examples/01000_observer_/343/201/235/343/201/2564_/351/200/206/343/201/253/343/203/253/343/203/274/343/203/227/344/270/273/345/260/216.rb +28 -0
  102. data/examples/01010_observer_/343/201/235/343/201/2565_/343/201/204/343/202/215/343/202/223/343/201/252/346/211/200/343/201/213/343/202/211/345/221/274/343/202/223/343/201/247/343/201/204/343/202/213/343/201/221/343/201/251Singleton/343/201/252/343/201/256/343/201/247/345/256/211/345/205/250.rb +37 -0
  103. data/examples/01020_observer_/343/201/235/343/201/2566_/343/201/204/343/202/215/343/202/223/343/201/252/346/211/200/343/201/213/343/202/211/345/221/274/343/201/266/345/240/264/345/220/210callbacks/343/202/222/344/275/277/343/202/217/343/201/252/343/201/204/343/202/210/343/201/206/343/201/253.rb +30 -0
  104. data/examples/01030_observer_/343/201/235/343/201/2567_/343/202/250/343/203/225/343/202/247/343/202/257/343/203/210/343/202/277/343/202/271/343/202/257/343/202/222/345/233/236/343/201/231/344/276/213.rb +57 -0
  105. data/examples/01040_/343/203/236/343/202/246/343/202/271/343/201/256/344/275/215/347/275/256/343/201/253/343/203/224/343/202/257/343/202/273/343/203/253/343/202/222/346/211/223/343/201/244.rb +18 -0
  106. data/examples/01050_/343/203/224/343/202/257/343/202/273/343/203/253/345/205/250/344/275/223/343/202/222/346/233/270/343/201/215/350/276/274/343/202/200.rb +27 -0
  107. data/examples/01060_effect_/347/224/273/345/203/217/343/201/256/343/202/263/343/203/263/343/203/234/343/203/252/343/203/245/343/203/274/343/203/210/346/263/225/343/201/253/343/202/210/343/202/213/343/202/250/343/203/225/343/202/247/343/202/257/343/203/210/345/207/246/347/220/206.rb +116 -0
  108. data/examples/01070_effect_FF7/343/201/256/346/210/246/351/227/230/343/201/253/345/205/245/343/202/213/343/201/250/343/201/215/343/201/256/343/202/250/343/203/225/343/202/247/343/202/257/343/203/210.rb +33 -0
  109. data/examples/01080_effect_/350/203/214/346/231/257/343/202/222/347/267/251/343/201/217/346/266/210/343/201/227/343/201/246/343/201/204/343/201/217/343/201/250/343/202/271/343/203/240/343/203/274/343/202/272/343/201/253/343/201/252/343/202/213.rb +16 -0
  110. data/examples/01090_/347/224/273/345/203/217/343/201/256/343/202/257/343/203/255/343/202/271/343/203/225/343/202/247/343/203/274/343/203/211.rb +37 -0
  111. data/examples/01100_/343/202/271/343/202/257/343/203/252/343/203/274/343/203/263/346/203/205/345/240/261.rb +8 -0
  112. data/examples/01110_lib_contrib_menu.rb +19 -0
  113. data/examples/01120_/351/233/233/345/236/213_2P/345/257/276/346/210/246/351/242/250STG.rb +109 -0
  114. data/examples/01130_/351/233/233/345/236/213_/346/210/246/350/273/212/345/257/276/346/210/246.rb +396 -0
  115. data/examples/01140_/351/233/233/345/236/213_2P/345/257/276/346/210/246.rb +60 -0
  116. data/examples/01150_/351/233/233/345/236/213_/343/202/271/343/203/274/343/203/221/343/203/274/343/203/236/343/203/252/343/202/252/351/242/250/343/202/242/343/202/257/343/202/267/343/203/247/343/203/263.rb +1251 -0
  117. data/examples/01160_2D/343/202/242/343/203/225/343/202/243/343/203/263/345/244/211/346/217/233.rb +40 -0
  118. data/examples/01170_stackprof.rb +10 -0
  119. data/examples/01180_sdl_/343/202/242/343/203/253/343/203/225/343/202/241/343/203/226/343/203/254/343/203/263/343/203/207/343/202/243/343/203/263/343/202/260/343/201/247/351/207/215/343/201/255/345/220/210/343/201/233/345/241/227/343/202/212/346/275/260/343/201/227.rb +11 -0
  120. data/examples/01190_/343/203/221/343/203/274/343/203/206/343/202/243/343/202/257/343/203/253/345/220/214/345/243/253/343/201/247/344/270/255/345/244/256/343/201/253/345/220/221/343/201/213/343/201/206.rb +79 -0
  121. data/examples/01200_lib_OpenGL.rb +55 -0
  122. data/examples/bezier.rb +202 -0
  123. data/examples/cursor.rb +50 -0
  124. data/examples/helper.rb +38 -0
  125. data/examples/lifegame_patterns.rb +102 -0
  126. data/examples/movable_point.rb +64 -0
  127. data/examples/mtx33.rb +294 -0
  128. data/examples/setup.rb +5 -0
  129. data/examples/stage_infos.rb +1 -0
  130. data/examples/start.sh +2 -0
  131. data/examples/test_all.rb +5 -0
  132. data/examples/testgl.rb +228 -0
  133. data/examples/trash/__0060_shooting2.rb +37 -0
  134. data/examples/trash/__0090_collision_circle1.rb +50 -0
  135. data/examples/trash/__0125_circle_collision.rb +103 -0
  136. data/examples/trash/__0130_circle_collision2.rb +60 -0
  137. data/examples/trash/__0270_circle_cycle_shift.rb +29 -0
  138. data/examples/trash/__bullet_algos.rb +224 -0
  139. data/examples/trash/gunship.rb +39 -0
  140. data/examples//343/203/227/343/203/255/343/202/270/343/202/247/343/202/257/343/202/277/343/203/274/343/201/253/350/241/250/347/244/272/343/201/231/343/202/213/343/201/250/343/201/215.sh +2 -0
  141. data/lib/stylet.rb +1 -0
  142. data/lib/stylet/application_memory_record.rb +33 -0
  143. data/lib/stylet/audio.rb +455 -0
  144. data/lib/stylet/axis_support.rb +62 -0
  145. data/lib/stylet/base.rb +76 -0
  146. data/lib/stylet/callbacks.rb +62 -0
  147. data/lib/stylet/cli.rb +54 -0
  148. data/lib/stylet/collision_support.rb +56 -0
  149. data/lib/stylet/config.rb +39 -0
  150. data/lib/stylet/contrib/menu.rb +508 -0
  151. data/lib/stylet/contrib/shared_pad.rb +32 -0
  152. data/lib/stylet/contrib/sprity.rb +149 -0
  153. data/lib/stylet/core.rb +118 -0
  154. data/lib/stylet/cpu_stat.rb +58 -0
  155. data/lib/stylet/delegators.rb +54 -0
  156. data/lib/stylet/draw.rb +256 -0
  157. data/lib/stylet/draw_support/arrow.rb +56 -0
  158. data/lib/stylet/draw_support/circle.rb +63 -0
  159. data/lib/stylet/draw_support/polygon.rb +22 -0
  160. data/lib/stylet/font.rb +172 -0
  161. data/lib/stylet/fps_adjust.rb +23 -0
  162. data/lib/stylet/fps_stat.rb +41 -0
  163. data/lib/stylet/input.rb +8 -0
  164. data/lib/stylet/input/base.rb +105 -0
  165. data/lib/stylet/input/hardware_bindings.rb +65 -0
  166. data/lib/stylet/input/key_one.rb +162 -0
  167. data/lib/stylet/input/support.rb +72 -0
  168. data/lib/stylet/joystick.rb +31 -0
  169. data/lib/stylet/joystick_adapter.rb +130 -0
  170. data/lib/stylet/joystick_adapters/buffalo_snes_adapter.rb +47 -0
  171. data/lib/stylet/joystick_adapters/elecom_usb_pad_adapter.rb +30 -0
  172. data/lib/stylet/joystick_adapters/hori_rap_v3_sa_adapter.rb +46 -0
  173. data/lib/stylet/joystick_adapters/ps3_standard_adapter.rb +40 -0
  174. data/lib/stylet/joystick_adapters/unknown_adapter.rb +13 -0
  175. data/lib/stylet/keyboard.rb +15 -0
  176. data/lib/stylet/logger.rb +12 -0
  177. data/lib/stylet/mouse.rb +58 -0
  178. data/lib/stylet/palette.rb +17 -0
  179. data/lib/stylet/rect.rb +113 -0
  180. data/lib/stylet/shortcut.rb +8 -0
  181. data/lib/stylet/state.rb +87 -0
  182. data/lib/stylet/stylet.rb +44 -0
  183. data/lib/stylet/system_pause.rb +24 -0
  184. data/lib/stylet/version.rb +3 -0
  185. data/log/.gitkeep +0 -0
  186. data/stylet.gemspec +31 -0
  187. data/test/test_helper.rb +6 -0
  188. data/test/test_input_base.rb +12 -0
  189. data/test/test_input_key_one.rb +43 -0
  190. data/test/test_input_support.rb +47 -0
  191. data/test/test_sample.rb +13 -0
  192. data/test/test_state.rb +26 -0
  193. data/tips.org +16 -0
  194. metadata +391 -0
@@ -0,0 +1,32 @@
1
+ # すべてのジョイスティックに反応
2
+
3
+ require "stylet"
4
+
5
+ module Stylet
6
+ module Input
7
+ class SharedPad
8
+ include Base
9
+ include ExtensionButton
10
+ include StandardKeybordBind
11
+ include HjklKeyboardBind
12
+ include JoystickBindMethod
13
+
14
+ def key_bit_update_all(*)
15
+ super
16
+ Stylet::Base.active_frame.joys.each do |joy|
17
+ bit_update_by_joy(joy)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ if $0 == __FILE__
25
+ require_relative "../../stylet"
26
+ shared_pad = Stylet::Input::SharedPad.new
27
+ Stylet.run {
28
+ shared_pad.key_bit_update_all
29
+ shared_pad.key_counter_update_all
30
+ vputs shared_pad
31
+ }
32
+ end
@@ -0,0 +1,149 @@
1
+ # マップチップと単一画像の違いを吸収してキャラクタを表示する
2
+ #
3
+ # ▼スプライトの登録と描画
4
+ #
5
+ # Sprity::ImageFile.memory_record_reset [
6
+ # {:key => :foo, :filename => "assets/images/foo.png"},
7
+ # ]
8
+ #
9
+ # screen.put(Sprity::Sprite[:foo].surface, 0, 0)
10
+ #
11
+ # ▼内部で保持している surface をすべて解放
12
+ #
13
+ # Stylet::Sprity.surface_destroy_all
14
+ #
15
+ # ▼ :filename の指定がシンボルなら ImageFile から取得し、文字列ならそのパスから読み出す
16
+ #
17
+ # {:key => :mario, :filename => :maptip} ← 主に一つの画像にキャラがたくさん入っている時用でサーフェイスを共有する
18
+ # {:key => :mario, :filename => "background.png"} ← 一つの画像とする
19
+ #
20
+ # ▼マップチップから指定の部分を刳り貫く 16 x 16 と考えて 2, 3 の部分から 16 x 16 で刳り貫く
21
+ #
22
+ # {:cliping => [16 * 2, 16 * 3, 16, 16]}
23
+ #
24
+ # ▼マップチップから指定の部分を刳り貫いたあと 32 x 32 に拡大して、余白を抜き色にする
25
+ #
26
+ # {:cliping => [...], :transform => {:wh => [32, 32], :mask => true}}
27
+ #
28
+ # ▼回転する
29
+ #
30
+ # {:transform => {:angle => 45}}
31
+ #
32
+ # ▼ ([0, 0, 255] の色を 0.5 だけ掛け合わせる (mixの値を配列にすると実行を繰り返す)
33
+ #
34
+ # {:transform => {:mix => {:rgb => [0, 0, 255], :alpha => 128}}}
35
+ #
36
+
37
+ module Stylet
38
+ module Sprity
39
+ class << self
40
+ def surface_destroy_all
41
+ [ImageFile, Sprite].each(&:surface_destroy_all)
42
+ end
43
+
44
+ def processing(surface, params)
45
+ if params[:cliping]
46
+ surface = surface.copy_rect(*params[:cliping])
47
+ end
48
+ if params[:transform]
49
+ surface = transform(surface, params[:transform])
50
+ end
51
+ surface
52
+ end
53
+
54
+ def load_file(filename, mask: false)
55
+ surface = SDL::Surface.load(filename)
56
+ if mask
57
+ surface.set_color_key(SDL::SRCCOLORKEY, 0)
58
+ end
59
+ surface.display_format
60
+ end
61
+
62
+ private
63
+
64
+ def transform(surface, params)
65
+ w, h = params[:wh] || [surface.w, surface.h]
66
+ s = surface.transform_surface(
67
+ 0, # bg_color
68
+ params[:angle] || 0, # 角度
69
+ w.to_f / surface.w, # x倍率
70
+ h.to_f / surface.h, # y倍率
71
+ 0) # flags
72
+
73
+ Array.wrap(params[:mix]).each do |mix|
74
+ s.draw_rect(0, 0, s.w, s.h, mix[:rgb], true, mix[:alpha])
75
+ end
76
+
77
+ if params[:mask]
78
+ s.set_color_key(SDL::SRCCOLORKEY, 0)
79
+ end
80
+
81
+ s.display_format
82
+ end
83
+ end
84
+
85
+ module SurfaceShare
86
+ extend ActiveSupport::Concern
87
+
88
+ included do
89
+ end
90
+
91
+ class_methods do
92
+ def surface_destroy_all
93
+ each(&:surface_destroy)
94
+ end
95
+ end
96
+
97
+ def surface_destroy
98
+ if @surface
99
+ unless @surface.destroyed?
100
+ @surface.destroy
101
+ end
102
+ @surface = nil
103
+ end
104
+ end
105
+
106
+ def surface
107
+ @surface ||= _surface
108
+ end
109
+ end
110
+
111
+ class ImageFile
112
+ include SurfaceShare
113
+
114
+ include MemoryRecord
115
+ memory_record []
116
+
117
+ private
118
+
119
+ def _surface
120
+ Sprity.load_file(@attributes[:filename], mask: @attributes[:mask])
121
+ end
122
+ end
123
+
124
+ class Sprite
125
+ include SurfaceShare
126
+
127
+ include Stylet::Delegators
128
+
129
+ include MemoryRecord
130
+ memory_record []
131
+
132
+ def swh
133
+ @swh ||= vec2[surface.w, surface.h]
134
+ end
135
+
136
+ private
137
+
138
+ def _surface
139
+ key = @attributes[:filename]
140
+ if key.kind_of? Symbol
141
+ s = ImageFile[key].surface
142
+ else
143
+ s = Sprity.load_file(key, mask: @attributes[:mask])
144
+ end
145
+ Sprity.processing(s, @attributes)
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,118 @@
1
+ module Stylet
2
+ module Core
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include Singleton
7
+
8
+ cattr_accessor :_active_instance
9
+ end
10
+
11
+ class_methods do
12
+ # run{|win| win.vputs 'Hello' }
13
+ # run{ vputs 'Hello' }
14
+ def run(*args, &block)
15
+ active_frame.run(*args, &block)
16
+ end
17
+
18
+ # run_initializers 実行済みの active_frame
19
+ def active_frame
20
+ @active_frame ||= active_instance.tap(&:run_initializers)
21
+ end
22
+
23
+ # すでにどこかで実行済みの場合は instance ではなく
24
+ # 先に実行された _active_instance の方を返す
25
+ # これで何度も初期化したり _active_instance が上書きされることがなくなる
26
+ def active_instance
27
+ @active_instance ||= _active_instance || instance
28
+ end
29
+ end
30
+
31
+ def initialize
32
+ raise "Singletonなのに再び初期化されている。ということは Stylet::Base を継承したクラスを複数作っている可能性があります。" if _active_instance
33
+ self._active_instance = self
34
+ @init_code = 0
35
+ @initialized = []
36
+ end
37
+
38
+ def logger
39
+ Stylet.logger
40
+ end
41
+
42
+ def run_initializers
43
+ init_on(:core) do
44
+ SDL.init(SDL::INIT_VIDEO)
45
+ end
46
+ end
47
+
48
+ def setup
49
+ end
50
+
51
+ def polling
52
+ end
53
+
54
+ def before_update
55
+ end
56
+
57
+ def update
58
+ end
59
+
60
+ def screen_flip
61
+ end
62
+
63
+ def after_run
64
+ end
65
+
66
+ def run(title: nil, &block)
67
+ self.title = title
68
+ run_initializers # SDL.init(@init_code)
69
+ setup # for user
70
+ main_loop(&block)
71
+ ensure
72
+ after_run
73
+ end
74
+
75
+ def main_loop(&block)
76
+ catch :exit do
77
+ loop do
78
+ next_frame(&block)
79
+ end
80
+ end
81
+ end
82
+
83
+ def next_frame(&block)
84
+ raise "SDL is not initialized" if @initialized.empty?
85
+ polling
86
+ if pause? || !screen_active
87
+ return
88
+ end
89
+ screen_flip # @screen.flip
90
+ before_draw # @console_current_line = 0
91
+ background_clear
92
+ before_update # vputs(system_infos)
93
+
94
+ # ここからユーザーの処理
95
+ # ということは next_frame の中のブロックから呼ぶ必要はない?
96
+
97
+ update # for user
98
+
99
+ if block_given?
100
+ if block.arity == 1
101
+ block.call(self)
102
+ else
103
+ instance_eval(&block)
104
+ end
105
+ end
106
+ end
107
+
108
+ private
109
+
110
+ def init_on(key)
111
+ unless @initialized.include?(key)
112
+ yield
113
+ @initialized << key
114
+ logger.debug "init: #{key}"
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,58 @@
1
+ require "benchmark"
2
+ require "active_support/core_ext/benchmark"
3
+
4
+ module Stylet
5
+ # CPU率の測定
6
+ #
7
+ # * 余力とCPUは反比例の関係
8
+ # * なので余力を測定することでCPU率を得られる
9
+ # * 1フレーム毎に計算すると誤差が大きいため1秒毎に計算
10
+ #
11
+ # Example:
12
+ #
13
+ # stat = CpuStat.new
14
+ # loop do
15
+ # stat.benchmark { screen.flip } # 余力測定
16
+ # stat.cpu_ratio # => 80.0
17
+ # end
18
+ #
19
+ # CPU率の求め方
20
+ #
21
+ # flip 余力 CPU
22
+ # -------------------
23
+ # 16 ms 100 % 0%
24
+ # 15 ms 90 % 10%
25
+ # 1 ms 10 % 90%
26
+ # 0 ms 0 % 100%
27
+ #
28
+ # free = ms / 16 * 100
29
+ # cpu = (16 - ms) / 16 * 100
30
+ #
31
+ # 1秒単位で測定すれば / 16 は不要になる
32
+ class CpuStat
33
+ def initialize
34
+ @free_ms = 1000.0
35
+
36
+ @old_time = SDL.get_ticks
37
+ @total_ms = 0
38
+ end
39
+
40
+ def benchmark
41
+ @total_ms += Benchmark.ms { yield }
42
+ now = SDL.get_ticks
43
+ if now >= @old_time + 1000.0
44
+ @old_time = now
45
+ @free_ms = @total_ms
46
+ @total_ms = 0
47
+ end
48
+ end
49
+
50
+ def cpu_ms
51
+ 1000.0 - @free_ms
52
+ end
53
+
54
+ def cpu_ratio
55
+ cpu_ms * 100.0 / 1000.0
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,54 @@
1
+ require "active_support/concern"
2
+ require "active_support/core_ext/module/delegation"
3
+
4
+ module Stylet
5
+ module Delegators
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ unless self <= Base
10
+ delegate *[
11
+ :vputs,
12
+ :vputs_vector,
13
+ :dputs,
14
+ :srect,
15
+ :frame_counter,
16
+ :joys,
17
+
18
+ :draw_dot,
19
+ :draw_line,
20
+ :draw_circle,
21
+ :draw_triangle,
22
+ :draw_square,
23
+ :draw_angle_rect,
24
+ :draw_rect,
25
+ :draw_rect4,
26
+ :draw_vector,
27
+ :draw_arrow,
28
+ :draw_polygon,
29
+
30
+ :screen,
31
+ :system_font,
32
+
33
+ :fps_stat,
34
+ :cpu_stat,
35
+
36
+ :vec2,
37
+ :vec3,
38
+ :rect2,
39
+ :rect4,
40
+ ], :to => "Stylet::Base.active_frame"
41
+ end
42
+
43
+ delegate(*[:rsin, :rcos], :to => "Stylet::Magic")
44
+ end
45
+ end
46
+ end
47
+
48
+ if $0 == __FILE__
49
+ require_relative "../stylet"
50
+ class App < Stylet::Base
51
+ update { Class.new { include Stylet::Delegators }.new.vputs "ok" }
52
+ run
53
+ end
54
+ end
@@ -0,0 +1,256 @@
1
+ # SDL描画関連
2
+
3
+ module Stylet
4
+ module Draw
5
+ attr_reader :frame_counter, :sdl_event, :srect, :screen, :screen_active
6
+ attr_reader :fps_stat, :cpu_stat
7
+ attr_accessor :title
8
+
9
+ def run_initializers
10
+ super
11
+ init_on(:draw) do
12
+ @frame_counter = 0
13
+ @fps_adjust = FpsAdjust.new
14
+ @fps_stat = FpsStat.new
15
+ @cpu_stat = CpuStat.new
16
+ @screen_active = true
17
+
18
+ screen_open
19
+ screen_info_check
20
+
21
+ if Stylet.config.hide_mouse
22
+ SDL::Mouse.hide
23
+ end
24
+
25
+ if @title
26
+ self.title = @title
27
+ end
28
+ end
29
+ end
30
+
31
+ # ハードウェアがダブルバッファ対応の場合flipで自動的にVSYNCを待って切り替えるため
32
+ # ハードウェアのフレーム数(60FPS)以上にはならない
33
+ def screen_flip
34
+ super
35
+ @fps_adjust.delay
36
+ @fps_stat.update
37
+ @cpu_stat.benchmark { @screen.flip }
38
+ @frame_counter += 1
39
+ end
40
+
41
+ def after_run
42
+ super
43
+ screen_destroy
44
+ backgroud_image_destroy
45
+ end
46
+
47
+ def title=(str)
48
+ if str
49
+ if @title != str
50
+ @title = str
51
+ if @screen
52
+ SDL::WM.set_caption(@title.to_s, @title.to_s)
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ def polling
59
+ super
60
+ case @sdl_event = SDL::Event.poll
61
+ when SDL::Event::KeyDown
62
+ if @sdl_event.sym == SDL::Key::ESCAPE || @sdl_event.sym == SDL::Key::Q
63
+ throw :exit, :break
64
+ end
65
+ if @sdl_event.sym == SDL::Key::K1
66
+ full_screen_toggle
67
+ end
68
+ when SDL::Event::Active
69
+ if (@sdl_event.state & SDL::Event::APPINPUTFOCUS).nonzero?
70
+ @screen_active = @sdl_event.gain
71
+ end
72
+ when SDL::Event::VideoResize
73
+ screen_resize(@sdl_event.w, @sdl_event.h)
74
+ when SDL::Event::Quit
75
+ throw :exit, :break
76
+ end
77
+ end
78
+
79
+ def key_down?(sym)
80
+ if @sdl_event.is_a? SDL::Event::KeyDown
81
+ @sdl_event.sym == sym
82
+ end
83
+ end
84
+
85
+ def __draw_line(x0, y0, x1, y1, color)
86
+ @screen.draw_line(x0, y0, x1, y1, Palette.fetch(color))
87
+ end
88
+
89
+ # draw_rect の場合、デフォルトだと幅+1ドット描画されるため -1 してある
90
+ # draw_rect(0, 0, 0, 0) で 1 ドット表示されてしまう
91
+ #
92
+ def draw_rect4(x, y, w, h, color: :foreground, fill: false, alpha: nil, surface: @screen)
93
+ return if w.zero? || h.zero?
94
+ color = Palette.fetch(color)
95
+ # raise "w, h は正を指定するように" if w < 0 || h < 0
96
+ if fill
97
+ if alpha
98
+ surface.draw_rect(x, y, w.abs - 1, h.abs - 1, color, true, alpha)
99
+ else
100
+ surface.fill_rect(x, y, w.abs, h.abs, color)
101
+ end
102
+ else
103
+ surface.draw_rect(x, y, w.abs - 1, h.abs - 1, color, false, alpha)
104
+ end
105
+ end
106
+
107
+ def draw_line(p0, p1, **options)
108
+ options = {
109
+ :color => :foreground,
110
+ }.merge(options)
111
+ @screen.draw_line(p0.x, p0.y, p1.x, p1.y, Palette.fetch(options[:color]))
112
+ rescue RangeError => error
113
+ # warn [p0, p1].inspect
114
+ # raise error
115
+ end
116
+
117
+ def draw_dot(p0, **options)
118
+ draw_line(p0, p0, options)
119
+ end
120
+
121
+ def draw_rect(rect, **options)
122
+ draw_rect4(*rect, options)
123
+ end
124
+
125
+ def save_bmp(fname)
126
+ @screen.save_bmp(fname)
127
+ end
128
+
129
+ def system_infos
130
+ list = [
131
+ @frame_counter,
132
+ "FPS:#{@fps_stat.fps}",
133
+ "CPU:#{format("%4.2f", @cpu_stat.cpu_ratio)}",
134
+ ]
135
+ if Stylet.production
136
+ else
137
+ list += [
138
+ "SE:#{SDL::Mixer.playing_channels}/#{SE.allocated_channels}",
139
+ "M#{SDL::Mixer.play_music? ? 1 : 0}",
140
+ "#{@srect.w}x#{@srect.h}",
141
+ app_state,
142
+ ]
143
+ end
144
+ list
145
+ end
146
+
147
+ def before_update
148
+ super
149
+ # return if Stylet.production
150
+ vputs system_infos.compact.join(" ")
151
+ end
152
+
153
+ def full_screen_toggle
154
+ Stylet.config.full_screen = !Stylet.config.full_screen
155
+ screen_open
156
+ end
157
+
158
+ def screen_resize(w, h)
159
+ Stylet.config.screen_size = [w, h]
160
+ screen_open
161
+ end
162
+
163
+ private
164
+
165
+ def screen_open
166
+ screen_destroy # 既存サーフェスを破棄しないとGCの際に落ちる
167
+ @screen = SDL::Screen.open(*Stylet.config.screen_size, Stylet.config.color_depth, screen_flags)
168
+ @srect = Rect2.new(@screen.w, @screen.h)
169
+ end
170
+
171
+ def screen_destroy
172
+ if @screen
173
+ unless @screen.destroyed?
174
+ @screen.destroy
175
+ end
176
+ @screen = nil
177
+ end
178
+ end
179
+
180
+ def screen_flags
181
+ flags = Stylet.config.screen_flags
182
+ flags |= SDL::FULLSCREEN if Stylet.config.full_screen
183
+ flags
184
+ end
185
+
186
+ def screen_info_check
187
+ logger.debug "SGE: #{SDL.respond_to?(:auto_lock).inspect}"
188
+
189
+ # フルスクリーンで利用可能なサイズ
190
+ logger.debug "SDL::Screen.list_modes # => #{SDL::Screen.list_modes(SDL::FULLSCREEN | SDL::HWSURFACE).inspect}"
191
+
192
+ # 画面情報
193
+ logger.debug "SDL::Screen.info # => #{SDL::Screen.info.inspect}"
194
+ end
195
+
196
+ def app_state
197
+ app_state_list = {
198
+ SDL::Event::APPMOUSEFOCUS => "M",
199
+ SDL::Event::APPINPUTFOCUS => "K",
200
+ SDL::Event::APPACTIVE => "A",
201
+ }
202
+ app_state_list.collect { |k, v|
203
+ if (SDL::Event.app_state & k).nonzero?
204
+ v
205
+ end
206
+ }.join
207
+ end
208
+
209
+ # オーバーライド推奨
210
+ def background_clear
211
+ simple_background_clear
212
+ end
213
+
214
+ def simple_background_clear
215
+ draw_rect(@srect, :color => :background, :fill => true)
216
+ end
217
+ end
218
+
219
+ concern :DeprecateBackground do
220
+ def screen_open
221
+ super
222
+
223
+ @backgroud_image ||= background_image_load
224
+ end
225
+
226
+ def background_clear
227
+ if @backgroud_image
228
+ SDL::Surface.blit(@backgroud_image, @srect.x, @srect.y, @srect.w, @srect.h, @screen, 0, 0)
229
+ else
230
+ super
231
+ end
232
+ end
233
+
234
+ def background_image_load
235
+ if v = Stylet.config.background_image
236
+ file = Pathname(v)
237
+ if file.exist?
238
+ bin = SDL::Surface.load(file.to_s)
239
+ bin.display_format
240
+ end
241
+ end
242
+ end
243
+
244
+ def backgroud_image_destroy
245
+ if @backgroud_image
246
+ @backgroud_image.destroy
247
+ @backgroud_image = nil
248
+ end
249
+ end
250
+ end
251
+ end
252
+
253
+ if $0 == __FILE__
254
+ require_relative "../stylet"
255
+ Stylet.run
256
+ end