stylet 0.0.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 (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