webtalekit-alpha 0.2.11 → 0.2.13

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 (389) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.clinerules +65 -0
  3. package/.history/README_20240812174230.md +193 -0
  4. package/.history/README_20240812175424.md +185 -0
  5. package/.history/README_20240812191012.md +185 -0
  6. package/.history/README_20240812191155.md +185 -0
  7. package/.history/README_20240812191211.md +185 -0
  8. package/.history/README_20240812192035.md +185 -0
  9. package/.history/dist/src/core/index_20240815021552.js +474 -0
  10. package/.history/dist/src/core/index_20240815022042.js +476 -0
  11. package/.history/dist/src/core/index_20240815022206.js +476 -0
  12. package/.history/dist/src/core/index_20240815023104.js +478 -0
  13. package/.history/dist/src/core/index_20240817022019.js +494 -0
  14. package/.history/dist/src/core/index_20240818013827.js +493 -0
  15. package/.history/dist/src/core/index_20240820001418.js +502 -0
  16. package/.history/package_20240812174230.json +45 -0
  17. package/.history/package_20240825011731.json +45 -0
  18. package/.history/package_20240825011739.json +44 -0
  19. package/.history/parser/parser_20240812174230.js +50 -0
  20. package/.history/parser/parser_20240825012739.js +47 -0
  21. package/.history/parser/parser_20240825012835.js +52 -0
  22. package/.history/src/core/drawer_20240813091343.ts +262 -0
  23. package/.history/src/core/drawer_20240815232345.ts +262 -0
  24. package/.history/src/core/drawer_20240815232350.ts +262 -0
  25. package/.history/src/core/drawer_20240816025257.ts +357 -0
  26. package/.history/src/core/drawer_20240816025358.ts +357 -0
  27. package/.history/src/core/drawer_20240816030148.ts +365 -0
  28. package/.history/src/core/drawer_20240816231033.ts +294 -0
  29. package/.history/src/core/drawer_20240816231107.ts +262 -0
  30. package/.history/src/core/drawer_20240816231234.ts +268 -0
  31. package/.history/src/core/drawer_20240817013836.ts +290 -0
  32. package/.history/src/core/drawer_20240817015150.ts +289 -0
  33. package/.history/src/core/drawer_20240817015353.ts +290 -0
  34. package/.history/src/core/drawer_20240817021254.ts +291 -0
  35. package/.history/src/core/drawer_20240817023440.ts +295 -0
  36. package/.history/src/core/drawer_20240817023445.ts +295 -0
  37. package/.history/src/core/drawer_20240818015327.ts +295 -0
  38. package/.history/src/core/drawer_20240819231006.ts +318 -0
  39. package/.history/src/core/drawer_20240820002829.ts +317 -0
  40. package/.history/src/core/drawer_20240820003141.ts +295 -0
  41. package/.history/src/core/drawer_20240824010043.ts +295 -0
  42. package/.history/src/core/drawer_20240825013311.ts +293 -0
  43. package/.history/src/core/drawer_20240902235257.ts +295 -0
  44. package/.history/src/core/drawer_20240904002038.ts +262 -0
  45. package/.history/src/core/drawer_20240904004020.ts +262 -0
  46. package/.history/src/core/drawer_20240904004238.ts +262 -0
  47. package/.history/src/core/drawer_20240904005648.ts +262 -0
  48. package/.history/src/core/drawer_20240904005808.ts +262 -0
  49. package/.history/src/core/drawer_20240904010523.ts +262 -0
  50. package/.history/src/core/drawer_20240904011611.ts +262 -0
  51. package/.history/src/core/drawer_20240904011740.ts +262 -0
  52. package/.history/src/core/index_20240812190102.js +443 -0
  53. package/.history/src/core/index_20240812190105.js +443 -0
  54. package/.history/src/core/index_20240812205421.js +452 -0
  55. package/.history/src/core/index_20240812213441.js +452 -0
  56. package/.history/src/core/index_20240812214203.js +453 -0
  57. package/.history/src/core/index_20240813090823.js +453 -0
  58. package/.history/src/core/index_20240813230449.js +452 -0
  59. package/.history/src/core/index_20240813230539.js +452 -0
  60. package/.history/src/core/index_20240813231447.js +453 -0
  61. package/.history/src/core/index_20240813231449.js +453 -0
  62. package/.history/src/core/index_20240813231511.js +453 -0
  63. package/.history/src/core/index_20240813231531.js +453 -0
  64. package/.history/src/core/index_20240813231913.js +453 -0
  65. package/.history/src/core/index_20240813232356.js +453 -0
  66. package/.history/src/core/index_20240813232640.js +453 -0
  67. package/.history/src/core/index_20240813232900.js +453 -0
  68. package/.history/src/core/index_20240814221127.js +454 -0
  69. package/.history/src/core/index_20240814221322.js +454 -0
  70. package/.history/src/core/index_20240814221526.js +454 -0
  71. package/.history/src/core/index_20240814222048.js +454 -0
  72. package/.history/src/core/index_20240814222918.js +459 -0
  73. package/.history/src/core/index_20240814223136.js +459 -0
  74. package/.history/src/core/index_20240814223501.js +464 -0
  75. package/.history/src/core/index_20240814224347.js +468 -0
  76. package/.history/src/core/index_20240815013712.js +474 -0
  77. package/.history/src/core/index_20240815021534.js +474 -0
  78. package/.history/src/core/index_20240815023143.js +477 -0
  79. package/.history/src/core/index_20240815023207.js +479 -0
  80. package/.history/src/core/index_20240815023344.js +481 -0
  81. package/.history/src/core/index_20240815035600.js +479 -0
  82. package/.history/src/core/index_20240815041549.js +480 -0
  83. package/.history/src/core/index_20240815185515.js +481 -0
  84. package/.history/src/core/index_20240815192158.js +481 -0
  85. package/.history/src/core/index_20240815222912.js +482 -0
  86. package/.history/src/core/index_20240815224052.js +483 -0
  87. package/.history/src/core/index_20240815224843.js +484 -0
  88. package/.history/src/core/index_20240815224850.js +483 -0
  89. package/.history/src/core/index_20240815231706.js +479 -0
  90. package/.history/src/core/index_20240816025748.js +483 -0
  91. package/.history/src/core/index_20240816030102.js +484 -0
  92. package/.history/src/core/index_20240817013329.js +485 -0
  93. package/.history/src/core/index_20240817013526.js +485 -0
  94. package/.history/src/core/index_20240817013819.js +488 -0
  95. package/.history/src/core/index_20240817013829.js +488 -0
  96. package/.history/src/core/index_20240817014921.js +494 -0
  97. package/.history/src/core/index_20240817022057.js +494 -0
  98. package/.history/src/core/index_20240817023316.js +493 -0
  99. package/.history/src/core/index_20240818005637.js +493 -0
  100. package/.history/src/core/index_20240818005721.js +493 -0
  101. package/.history/src/core/index_20240818011804.js +493 -0
  102. package/.history/src/core/index_20240818013835.js +493 -0
  103. package/.history/src/core/index_20240818014310.js +493 -0
  104. package/.history/src/core/index_20240818014323.js +493 -0
  105. package/.history/src/core/index_20240818014333.js +493 -0
  106. package/.history/src/core/index_20240818020725.js +496 -0
  107. package/.history/src/core/index_20240819195504.js +497 -0
  108. package/.history/src/core/index_20240819202012.js +495 -0
  109. package/.history/src/core/index_20240819231228.js +501 -0
  110. package/.history/src/core/index_20240819232555.js +502 -0
  111. package/.history/src/core/index_20240819233404.js +502 -0
  112. package/.history/src/core/index_20240820003114.js +495 -0
  113. package/.history/src/core/index_20240820003120.js +495 -0
  114. package/.history/src/core/index_20240820003331.js +495 -0
  115. package/.history/src/core/index_20240820004126.js +498 -0
  116. package/.history/src/core/index_20240820004357.js +497 -0
  117. package/.history/src/core/index_20240820005103.js +498 -0
  118. package/.history/src/core/index_20240820005110.js +499 -0
  119. package/.history/src/core/index_20240820005206.js +497 -0
  120. package/.history/src/core/index_20240820005352.js +497 -0
  121. package/{src/core/index.js → .history/src/core/index_20240823224904.ts} +75 -231
  122. package/.history/src/core/index_20240823224905.js +505 -0
  123. package/.history/src/core/index_20240823231631.ts +530 -0
  124. package/.history/src/core/index_20240823231735.ts +530 -0
  125. package/.history/src/core/index_20240823232123.ts +539 -0
  126. package/.history/src/core/index_20240823232329.ts +539 -0
  127. package/.history/src/core/index_20240823233058.ts +539 -0
  128. package/.history/src/core/index_20240823234946.ts +539 -0
  129. package/.history/src/core/index_20240824005956.ts +534 -0
  130. package/.history/src/core/index_20240824010113.ts +534 -0
  131. package/.history/src/core/index_20240824010124.ts +534 -0
  132. package/.history/src/core/index_20240824010212.ts +534 -0
  133. package/.history/src/core/index_20240824010218.ts +534 -0
  134. package/.history/src/core/index_20240824010407.ts +534 -0
  135. package/.history/src/core/index_20240824010611.ts +534 -0
  136. package/.history/src/core/index_20240824010623.ts +534 -0
  137. package/.history/src/core/index_20240824010652.ts +534 -0
  138. package/.history/src/core/index_20240824011007.ts +534 -0
  139. package/.history/src/core/index_20240824210450.ts +534 -0
  140. package/.history/src/core/index_20240824210703.ts +534 -0
  141. package/.history/src/core/index_20240824210708.ts +534 -0
  142. package/.history/src/core/index_20240824211001.ts +537 -0
  143. package/.history/src/core/index_20240824211258.ts +537 -0
  144. package/.history/src/core/index_20240824211654.ts +537 -0
  145. package/.history/src/core/index_20240824211723.ts +537 -0
  146. package/.history/src/core/index_20240824211808.ts +538 -0
  147. package/.history/src/core/index_20240824214041.js +538 -0
  148. package/.history/src/core/index_20240824215312.ts +538 -0
  149. package/.history/src/core/index_20240824215341.ts +538 -0
  150. package/.history/src/core/index_20240824220703.ts +538 -0
  151. package/.history/src/core/index_20240824220709.ts +538 -0
  152. package/.history/src/core/index_20240825012244.ts +536 -0
  153. package/.history/src/core/index_20240825012435.ts +539 -0
  154. package/.history/src/core/index_20240825012440.ts +539 -0
  155. package/.history/src/core/index_20240826005054.ts +539 -0
  156. package/.history/src/core/index_20240826005321.ts +540 -0
  157. package/.history/src/core/index_20240826005410.ts +539 -0
  158. package/.history/src/core/index_20240826005418.ts +539 -0
  159. package/.history/src/core/index_20240830231825.ts +539 -0
  160. package/.history/src/core/index_20240831022416.ts +539 -0
  161. package/.history/src/core/index_20240901222314.js +459 -0
  162. package/.history/src/core/index_20240901222951.js +459 -0
  163. package/.history/src/core/index_20240901223824.js +471 -0
  164. package/.history/src/core/index_20240901223833.js +468 -0
  165. package/.history/src/core/index_20240902223954.js +447 -0
  166. package/.history/src/core/index_20240902224000.js +446 -0
  167. package/.history/src/core/index_20240902230345.js +448 -0
  168. package/.history/src/core/index_20240902231130.js +449 -0
  169. package/.history/src/core/index_20240902231559.js +449 -0
  170. package/.history/src/core/index_20240902232135.js +449 -0
  171. package/.history/src/core/index_20240902232809.js +452 -0
  172. package/.history/src/core/index_20240902232815.js +452 -0
  173. package/.history/src/core/index_20240903000104.js +467 -0
  174. package/.history/src/core/index_20240904001731.js +444 -0
  175. package/.history/src/core/index_20240904002038.ts +539 -0
  176. package/.history/src/core/index_20240904011848.js +444 -0
  177. package/.history/src/core/index_20240904012138.js +444 -0
  178. package/.history/src/core/index_20240904012743.js +444 -0
  179. package/.history/src/core/index_20240904013051.js +444 -0
  180. package/.history/src/core/resourceManager_20240403231531.ts +16 -0
  181. package/.history/src/core/resourceManager_20240823232627.ts +17 -0
  182. package/.history/src/core/resourceManager_20240824214014.js +16 -0
  183. package/.history/src/core/resourceManager_20240824214620.js +17 -0
  184. package/.history/src/core/scenarioManager_20240812203410.ts +86 -0
  185. package/.history/src/core/scenarioManager_20240812203839.ts +94 -0
  186. package/.history/src/core/scenarioManager_20240812213437.ts +85 -0
  187. package/.history/src/core/scenarioManager_20240813225852.ts +85 -0
  188. package/.history/src/core/scenarioManager_20240823235010.ts +85 -0
  189. package/.history/src/core/scenarioManager_20240904002038.ts +94 -0
  190. package/.history/src/core/scenarioManager_20240904012411.ts +94 -0
  191. package/.history/src/core/scenarioManager_20240904012519.ts +94 -0
  192. package/.history/src/index_20240403231531.js +6 -0
  193. package/.history/src/index_20240429233436.js +8 -0
  194. package/.history/src/index_20240429233926.js +8 -0
  195. package/.history/src/index_20240429234401.js +7 -0
  196. package/.history/src/index_20240429234404.js +6 -0
  197. package/.history/src/resource/soundObject_20240419004314.ts +71 -0
  198. package/.history/src/resource/soundObject_20240815034420.ts +66 -0
  199. package/.history/src/resource/soundObject_20240815034836.ts +79 -0
  200. package/.history/src/resource/soundObject_20240815034919.ts +87 -0
  201. package/.history/src/resource/soundObject_20240815040724.ts +81 -0
  202. package/.history/src/resource/soundObject_20240815041022.ts +87 -0
  203. package/.history/src/resource/soundObject_20240815042103.ts +87 -0
  204. package/.history/src/resource/soundObject_20240823235929.ts +91 -0
  205. package/.history/src/resource/soundObject_20240824213129.ts +99 -0
  206. package/.history/src/resource/soundObject_20240824213611.ts +101 -0
  207. package/.history/src/resource/soundObject_20240824215734.ts +101 -0
  208. package/.history/src/resource/soundObject_20240825004926.ts +101 -0
  209. package/.history/src/resource/soundObject_20240825004947.ts +101 -0
  210. package/.history/src/utils/logger_20240812174230.ts +13 -0
  211. package/.history/src/utils/logger_20240823232736.ts +14 -0
  212. package/.history/src/utils/logger_20240824214930.js +14 -0
  213. package/.history/src/utils/store_20240812174230.ts +17 -0
  214. package/.history/src/utils/store_20240823232948.ts +29 -0
  215. package/.history/src/utils/store_20240824214020.js +17 -0
  216. package/.history/src/utils/store_20240824214955.js +29 -0
  217. package/.history/src/utils/waitUtil_20240812174230.ts +4 -0
  218. package/.history/src/utils/waitUtil_20240823232739.ts +4 -0
  219. package/.history/src/utils/waitUtil_20240824214024.js +4 -0
  220. package/.history/src/utils/waitUtil_20240824215009.js +4 -0
  221. package/.history/test/js/title_20240428215305.js +254 -0
  222. package/.history/test/js/title_20240429221911.js +227 -0
  223. package/.history/test/js/title_20240429222806.js +243 -0
  224. package/.history/test/js/title_20240429222854.js +263 -0
  225. package/.history/test/js/title_20240429222906.js +263 -0
  226. package/.history/test/js/title_20240429235639.js +263 -0
  227. package/.history/test/js/title_20240429235840.js +263 -0
  228. package/.history/test/js/title_20240430014721.js +262 -0
  229. package/.history/test/js/title_20240430014759.js +254 -0
  230. package/.history/test/js/title_20240430134612.js +285 -0
  231. package/.history/test/js/title_20240430141051.js +285 -0
  232. package/.history/test/js/title_20240430173745.js +245 -0
  233. package/.history/tsconfig_20240812174230.json +22 -0
  234. package/.history/tsconfig_20240824010157.json +19 -0
  235. package/.history/tsconfig_20240824220700.json +20 -0
  236. package/.history/tsconfig_20240825011301.json +20 -0
  237. package/.history/webpack.config_20240423002825.js +37 -0
  238. package/.history/webpack.config_20240430001157.js +38 -0
  239. package/.history/webpack.config_20240430001309.js +37 -0
  240. package/.history/webpack.config_20240430002112.js +37 -0
  241. package/CLAUDE.md +96 -0
  242. package/LICENSE +21 -0
  243. package/README.md +108 -39
  244. package/coverage/lcov-report/base.css +224 -0
  245. package/coverage/lcov-report/block-navigation.js +87 -0
  246. package/coverage/lcov-report/core/drawer.ts.html +1264 -0
  247. package/coverage/lcov-report/core/index.html +146 -0
  248. package/coverage/lcov-report/core/resourceManager.ts.html +136 -0
  249. package/coverage/lcov-report/core/scenarioManager.ts.html +373 -0
  250. package/coverage/lcov-report/favicon.png +0 -0
  251. package/coverage/lcov-report/index.html +146 -0
  252. package/coverage/lcov-report/prettify.css +1 -0
  253. package/coverage/lcov-report/prettify.js +2 -0
  254. package/coverage/lcov-report/resource/ImageObject.ts.html +433 -0
  255. package/coverage/lcov-report/resource/index.html +131 -0
  256. package/coverage/lcov-report/resource/soundObject.ts.html +346 -0
  257. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  258. package/coverage/lcov-report/sorter.js +196 -0
  259. package/coverage/lcov-report/utils/TextMeasurer.ts.html +520 -0
  260. package/coverage/lcov-report/utils/index.html +161 -0
  261. package/coverage/lcov-report/utils/logger.ts.html +142 -0
  262. package/coverage/lcov-report/utils/store.ts.html +151 -0
  263. package/coverage/lcov-report/utils/waitUtil.ts.html +97 -0
  264. package/coverage/lcov.info +882 -0
  265. package/dist/README.md +294 -0
  266. package/dist/engineConfig.json +10 -0
  267. package/dist/package.json +51 -0
  268. package/dist/parser/cli.js +61 -0
  269. package/dist/parser/parser.js +53 -0
  270. package/{src → dist/src}/core/drawer.js +0 -9
  271. package/dist/src/core/drawer.js.map +1 -0
  272. package/dist/src/core/index.js +969 -0
  273. package/{src → dist/src}/core/scenarioManager.js +5 -6
  274. package/dist/src/core/scenarioManager.js.map +1 -0
  275. package/{src → dist/src}/resource/soundObject.js +4 -2
  276. package/dist/src/resource/soundObject.js.map +1 -0
  277. package/dist/src/utils/fallbackTemplate.js +13 -0
  278. package/dist/src/utils/fallbackTemplate.js.map +1 -0
  279. package/dist/webtalekit-alpha-0.2.13.tgz +0 -0
  280. package/docs/event-system-specification.md +493 -0
  281. package/docs/glossary.html +833 -0
  282. package/docs/index.html +296 -0
  283. package/docs/tag-reference.html +1317 -0
  284. package/docs/ui-template-guide.html +1068 -0
  285. package/example/README.md +29 -0
  286. package/example/engineConfig.json +10 -0
  287. package/example/package-lock.json +5145 -0
  288. package/example/package.json +26 -0
  289. package/example/src/index.js +13 -0
  290. package/example/src/resource/background/beach.jpg +0 -0
  291. package/example/src/resource/background/city.jpg +0 -0
  292. package/example/src/resource/background/crossroad.jpg +0 -0
  293. package/example/src/resource/background/forest.jpg +0 -0
  294. package/example/src/resource/background/laboratory.jpg +0 -0
  295. package/example/src/resource/background/library.jpg +0 -0
  296. package/example/src/resource/background/living_room.jpg +0 -0
  297. package/example/src/resource/background/music_room.jpg +0 -0
  298. package/example/src/resource/background/stage.jpg +0 -0
  299. package/example/src/resource/background/sunset.jpg +0 -0
  300. package/example/src/resource/background/title_bg.png +0 -0
  301. package/example/src/resource/bgm/calm_music.wav +0 -0
  302. package/example/src/resource/bgm/doorbell.mp3 +0 -0
  303. package/example/src/resource/bgm/nc366476_Virtual_Voyage.mp3 +0 -0
  304. package/example/src/resource/bgm/title_theme.mp3 +0 -0
  305. package/example/src/resource/chara/dancer.png +0 -0
  306. package/example/src/resource/chara/guest.png +0 -0
  307. package/example/src/resource/chara/guide.png +0 -0
  308. package/example/src/resource/chara/scientist.png +0 -0
  309. package/example/src/resource/config.js +0 -0
  310. package/example/src/resource/se/doorbell.mp3 +0 -0
  311. package/example/src/resource/system/systemPicture/01_message/message.png +0 -0
  312. package/example/src/resource/system/systemPicture/02_button/button.png +0 -0
  313. package/example/src/resource/system/systemPicture/02_button/button2.png +0 -0
  314. package/example/src/resource/system/systemPicture/02_button/button3.png +0 -0
  315. package/example/src/resource/system/systemPicture/03_system_button/auto.png +0 -0
  316. package/example/src/resource/system/systemPicture/03_system_button/auto2.png +0 -0
  317. package/example/src/resource/system/systemPicture/03_system_button/close.png +0 -0
  318. package/example/src/resource/system/systemPicture/03_system_button/close2.png +0 -0
  319. package/example/src/resource/system/systemPicture/03_system_button/config.png +0 -0
  320. package/example/src/resource/system/systemPicture/03_system_button/config2.png +0 -0
  321. package/example/src/resource/system/systemPicture/03_system_button/load.png +0 -0
  322. package/example/src/resource/system/systemPicture/03_system_button/load2.png +0 -0
  323. package/example/src/resource/system/systemPicture/03_system_button/log.png +0 -0
  324. package/example/src/resource/system/systemPicture/03_system_button/log2.png +0 -0
  325. package/example/src/resource/system/systemPicture/03_system_button/menu.png +0 -0
  326. package/example/src/resource/system/systemPicture/03_system_button/menu2.png +0 -0
  327. package/example/src/resource/system/systemPicture/03_system_button/qload.png +0 -0
  328. package/example/src/resource/system/systemPicture/03_system_button/qload2.png +0 -0
  329. package/example/src/resource/system/systemPicture/03_system_button/qsave.png +0 -0
  330. package/example/src/resource/system/systemPicture/03_system_button/qsave2.png +0 -0
  331. package/example/src/resource/system/systemPicture/03_system_button/save.png +0 -0
  332. package/example/src/resource/system/systemPicture/03_system_button/save2.png +0 -0
  333. package/example/src/resource/system/systemPicture/03_system_button/screen.png +0 -0
  334. package/example/src/resource/system/systemPicture/03_system_button/screen2.png +0 -0
  335. package/example/src/resource/system/systemPicture/03_system_button/skip.png +0 -0
  336. package/example/src/resource/system/systemPicture/03_system_button/skip2.png +0 -0
  337. package/example/src/resource/system/systemPicture/03_system_button/title.png +0 -0
  338. package/example/src/resource/system/systemPicture/03_system_button/title2.png +0 -0
  339. package/example/src/resource/system/systemPicture//345/210/251/347/224/250/350/246/217/347/264/204.txt +0 -0
  340. package/example/src/resource/system/wait.gif +0 -0
  341. package/example/src/scene/animation.scene +28 -0
  342. package/example/src/scene/background.scene +29 -0
  343. package/example/src/scene/character.scene +26 -0
  344. package/example/src/scene/choice.scene +97 -0
  345. package/example/src/scene/dialog.scene +105 -0
  346. package/example/src/scene/effects.scene +38 -0
  347. package/example/src/scene/en/animation.scene +28 -0
  348. package/example/src/scene/en/background.scene +26 -0
  349. package/example/src/scene/en/character.scene +26 -0
  350. package/example/src/scene/en/choice.scene +32 -0
  351. package/example/src/scene/en/effects.scene +37 -0
  352. package/example/src/scene/en/sound.scene +26 -0
  353. package/example/src/scene/en/text.scene +26 -0
  354. package/example/src/scene/en/title.scene +39 -0
  355. package/example/src/scene/if_test.scene +37 -0
  356. package/example/src/scene/resource-error-test.scene +15 -0
  357. package/example/src/scene/save-load-test.scene +48 -0
  358. package/example/src/scene/sound.scene +26 -0
  359. package/example/src/scene/test_error.scene +21 -0
  360. package/example/src/scene/text.scene +34 -0
  361. package/example/src/scene/title.scene +51 -0
  362. package/example/src/screen/incoming.html +474 -0
  363. package/example/src/screen/title.html +135 -0
  364. package/example/src/template.html +16 -0
  365. package/example/test-results/.last-run.json +4 -0
  366. package/example/webpack.config.js +69 -0
  367. package/image.png +0 -0
  368. package/package.json +3 -1
  369. package/playwright-report/index.html +71 -0
  370. package/s-plan1-5Light-s-1.jpg +0 -0
  371. package/test-results/.last-run.json +6 -0
  372. package/tests/e2e/if-global-attribute.spec.js +90 -0
  373. package/tests/e2e/resource-error-handling.spec.js +58 -0
  374. package/tests/e2e/screenshots/before-error-check.png +0 -0
  375. package/tests/e2e/screenshots/choices.png +0 -0
  376. package/tests/e2e/screenshots/message-window-click-wait.png +0 -0
  377. package/src/core/drawer.js.map +0 -1
  378. package/src/core/scenarioManager.js.map +0 -1
  379. package/src/resource/soundObject.js.map +0 -1
  380. /package/{src → dist/src}/core/resourceManager.js +0 -0
  381. /package/{src → dist/src}/core/resourceManager.js.map +0 -0
  382. /package/{src → dist/src}/resource/ImageObject.js +0 -0
  383. /package/{src → dist/src}/resource/ImageObject.js.map +0 -0
  384. /package/{src → dist/src}/utils/logger.js +0 -0
  385. /package/{src → dist/src}/utils/logger.js.map +0 -0
  386. /package/{src → dist/src}/utils/store.js +0 -0
  387. /package/{src → dist/src}/utils/store.js.map +0 -0
  388. /package/{src → dist/src}/utils/waitUtil.js +0 -0
  389. /package/{src → dist/src}/utils/waitUtil.js.map +0 -0
@@ -0,0 +1,537 @@
1
+ import { Drawer } from './drawer'
2
+ import { ScenarioManager } from './scenarioManager'
3
+ import { ImageObject } from '../resource/ImageObject'
4
+ import { ResourceManager } from './resourceManager'
5
+ import { SoundObject } from '../resource/soundObject'
6
+ import engineConfig from '../../engineConfig.json'
7
+ import { outputLog } from '../utils/logger'
8
+ import { sleep } from '../utils/waitUtil'
9
+
10
+ type CommandList = {
11
+ [key: string]: (line: any) => Promise<void> | void;
12
+ };
13
+
14
+ type DisplayedImage = {
15
+ image: ImageObject;
16
+ size: {
17
+ width: number;
18
+ height: number;
19
+ };
20
+ pos?: {
21
+ x: number;
22
+ y: number;
23
+ };
24
+ look?: string;
25
+ entry?: {
26
+ time: number;
27
+ wait: boolean;
28
+ };
29
+ };
30
+
31
+ type UsedSound = {
32
+ audio: SoundObject;
33
+ };
34
+
35
+ export class Core {
36
+ bgm: SoundObject | null = null
37
+ isAuto = false
38
+ isNext = false
39
+ isSkip = false
40
+ onNextHandler = () => { }
41
+ sceneFile: { [key: string]: any } = {};
42
+ sceneConfig: { [key: string]: any } = {};
43
+ commandList: CommandList = {
44
+ text: this.textHandler,
45
+ choice: this.choiceHandler,
46
+ show: this.showHandler,
47
+ newpage: this.newpageHandler,
48
+ hide: this.hideHandler,
49
+ jump: this.jumpHandler,
50
+ sound: this.soundHandler,
51
+ say: this.sayHandler,
52
+ if: this.ifHandler,
53
+ call: this.callHandler,
54
+ moveto: this.moveToHandler,
55
+ route: this.routeHandler,
56
+ wait: this.waitHandler,
57
+ }
58
+
59
+ gameContainer: HTMLElement;
60
+ drawer: Drawer;
61
+ scenarioManager: ScenarioManager;
62
+ resourceManager: ResourceManager;
63
+ displayedImages: { [key: string]: DisplayedImage } = {};
64
+ usedSounds: { [key: string]: UsedSound } = {};
65
+ tempImages: { [key: string]: DisplayedImage } = {};
66
+
67
+ constructor() {
68
+ // TODO: コンストラクターのエラーハンドリングを追加する
69
+ this.gameContainer = document.getElementById('gameContainer')
70
+ if (!this.gameContainer) {
71
+ throw new Error('gameContainer not found')
72
+ }
73
+ // Drawerの初期化(canvasタグのサイズを設定する)
74
+ this.drawer = new Drawer(this.gameContainer)
75
+ // ScenarioManagerの初期化(変数の初期値設定)
76
+ this.scenarioManager = new ScenarioManager()
77
+ // ResourceManagerの初期化(引数にconfigを渡して、リソース管理配列を作る)
78
+ this.resourceManager = new ResourceManager()
79
+ this.displayedImages = {}
80
+ this.usedSounds = {}
81
+ }
82
+
83
+ async start() {
84
+ outputLog('call', 'debug')
85
+ // TODO: ブラウザ用のビルドの場合は、最初にクリックしてもらう
86
+ // titleタグの内容を書き換える
87
+ document.title = engineConfig.title
88
+ // sceneファイルを読み込む
89
+ await this.loadScene('title')
90
+ // 画面を表示する
91
+ await this.loadScreen(this.sceneConfig)
92
+ // 入力イベントを設定する
93
+ document.addEventListener('keydown', (e) => {
94
+ if (e.key === 'Enter') {
95
+ this.onNextHandler()
96
+ } else if (e.key === 'Control') {
97
+ this.drawer.isSkip = true
98
+ this.isNext = true
99
+ }
100
+ })
101
+ document.addEventListener('keyup', (e) => {
102
+ if (e.key === 'Control') {
103
+ this.drawer.isSkip = true
104
+ this.isNext = false
105
+ }
106
+ })
107
+ document.addEventListener('click', (e) => {
108
+ this.onNextHandler()
109
+ })
110
+
111
+ await this.textHandler('タップでスタート')
112
+ // BGMを再生する
113
+ this.bgm!.play(true)
114
+ // シナリオを実行する
115
+ while (this.scenarioManager.hasNext()) {
116
+ await this.runScenario()
117
+ }
118
+ }
119
+
120
+ async loadScene(sceneFileName: string) {
121
+ outputLog('call', 'debug', sceneFileName)
122
+ // sceneファイルを読み込む
123
+ this.sceneFile = await import(/* webpackChunkName: "[request]" */ `/src/js/${sceneFileName}.js`)
124
+ this.scenarioManager.setScenario(this.sceneFile.scenario, sceneFileName)
125
+ this.sceneConfig = { ...this.sceneConfig, ...this.sceneFile.sceneConfig }
126
+ outputLog('sceneFile', 'debug', this.sceneFile)
127
+ }
128
+
129
+ async loadScreen(sceneConfig: { [key: string]: string }) {
130
+ outputLog('call', 'debug', sceneConfig)
131
+ // sceneConfig.templateを読み込んで、HTMLを表示する
132
+ const htmlString = await (await fetch(sceneConfig.template)).text()
133
+ // 読み込んだhtmlからIDにmainを持つdivタグとStyleタグ以下を取り出して、gameContainerに表示する
134
+ var parser = new DOMParser()
135
+ var doc = parser.parseFromString(htmlString, 'text/html')
136
+ this.gameContainer.innerHTML = doc.getElementById('main')!.innerHTML
137
+ // Styleタグを取り出して、headタグに追加する
138
+ const styleElement = doc.head.getElementsByTagName('style')[0]
139
+ document.head.appendChild(styleElement)
140
+ // ゲーム進行用に必要な情報をセットする
141
+ this.drawer.setScreen(this.gameContainer, engineConfig.resolution)
142
+ // シナリオの進行状況を保存
143
+ this.scenarioManager.setSceneName(sceneConfig.name)
144
+ // 背景画像を表示する
145
+ const background = await new ImageObject().setImageAsync(sceneConfig.background)
146
+ this.displayedImages['background'] = {
147
+ image: background,
148
+ size: {
149
+ width: this.gameContainer.clientWidth,
150
+ height: this.gameContainer.clientHeight,
151
+ },
152
+ }
153
+ this.drawer.show(this.displayedImages)
154
+ this.bgm = await new SoundObject().setAudioAsync(sceneConfig.bgm)
155
+ }
156
+
157
+ async runScenario() {
158
+ outputLog('call index:', 'debug', this.scenarioManager.getIndex())
159
+ let scenarioObject = this.scenarioManager.next()
160
+ if (!scenarioObject) {
161
+ return
162
+ }
163
+ outputLog('scenarioObject', 'debug', scenarioObject)
164
+ // prettier-ignore
165
+ const boundFunction = this.commandList[scenarioObject.type || 'text'].bind(this)
166
+ // prettier-ignore
167
+ outputLog(`boundFunction:${boundFunction.name.split(' ')[1]}`, 'debug', scenarioObject)
168
+ scenarioObject = await this.httpHandler(scenarioObject)
169
+ await boundFunction(scenarioObject)
170
+ }
171
+
172
+ async textHandler(line: any) {
173
+ outputLog('textHandler:line', 'debug', line)
174
+ // 文章だけの場合は、contentプロパティに配列として設定する
175
+ if (typeof line === 'string') line = { content: [line] }
176
+ // httpレスポンスがある場合は、list.contentに追加して、表示対象に加える
177
+ if (line.then || line.error) {
178
+ line.content = line.content.concat(line.then || line.error)
179
+ }
180
+ outputLog('call', 'debug', line)
181
+
182
+ // 名前が設定されている場合は、名前を表示する
183
+ if (line.name) {
184
+ this.drawer.drawName(line.name)
185
+ } else {
186
+ this.drawer.drawName('')
187
+ }
188
+
189
+ //prettier-ignore
190
+ this.onNextHandler = () => { this.drawer.isSkip = true }
191
+ // 表示する文章を1行ずつ表示する
192
+ for (const text of line.content) {
193
+ // scenarioObject.content内にオブジェクトが含まれている場合は、クリア処理をスキップする
194
+ if (text.content.some((item: any) => typeof item === 'object' && item !== null)) {
195
+
196
+ } else {
197
+ this.drawer.clearText(); // テキスト表示領域をクリア
198
+ }
199
+
200
+ if (typeof text === 'string') {
201
+ await this.drawer.drawText(this.expandVariable(text), 50)
202
+ } else {
203
+ const container = this.drawer.createDecoratedElement(text);
204
+ await this.drawer.drawText(this.expandVariable(text.content[0]), text.speed || 50, container)
205
+ }
206
+ //prettier-ignore
207
+ this.onNextHandler = () => { this.isNext = true }
208
+ if (typeof text.wait === 'number') {
209
+ if (text.wait > 0 || this.isAuto) {
210
+ const waitTime = text.wait || 1500
211
+ // 指定された時間だけ待機
212
+ await sleep(waitTime)
213
+ }
214
+ } else {
215
+ // 改行ごとに入力待ち
216
+ await this.clickWait()
217
+ }
218
+ }
219
+ this.drawer.isSkip = false
220
+ this.scenarioManager.setHistory(line.content)
221
+ }
222
+
223
+ expandVariable(text: string) {
224
+ outputLog('call', 'debug', text)
225
+ return text.replace(/{{([^{}]+)}}/g, (match) => {
226
+ const expr = match.slice(2, -2)
227
+ const returnValue = this.executeCode(`return ${expr}`)
228
+ return typeof returnValue == 'object' ? JSON.stringify(returnValue) : returnValue
229
+ })
230
+ }
231
+
232
+ // クリック待ち処理
233
+ async clickWait() {
234
+ outputLog('call', 'debug')
235
+ this.drawer.setVisibility('#waitCircle', true)
236
+ return new Promise((resolve) => {
237
+ const intervalId = setInterval(() => {
238
+ if (this.isNext) {
239
+ this.drawer.setVisibility('#waitCircle', false)
240
+ clearInterval(intervalId)
241
+ this.isNext = false
242
+ resolve(null)
243
+ }
244
+ }, 500)
245
+ })
246
+ }
247
+
248
+ async sayHandler(line: any) {
249
+ outputLog('call', 'debug', line)
250
+ // say(name:string, pattern: string, voice: {playの引数}, ...text)
251
+ if (line.voice) await this.soundHandler({ path: line.voice, play: undefined })
252
+ await this.textHandler({ content: line.content, name: line.name })
253
+ this.scenarioManager.setHistory(line)
254
+ }
255
+
256
+ async choiceHandler(line: any) {
257
+ outputLog('call', 'debug', line)
258
+ if (line.prompt) this.textHandler(line.prompt) // promptがある場合は、表示する
259
+ const { selectId, onSelect: selectHandler } = await this.drawer.drawChoices(line)
260
+ if (selectHandler !== undefined) {
261
+ this.scenarioManager.addScenario(selectHandler)
262
+ }
263
+ this.scenarioManager.setHistory(line)
264
+ }
265
+
266
+ jumpHandler(line: any) {
267
+ outputLog('call:', 'debug', line.index)
268
+ this.newpageHandler()
269
+ this.scenarioManager.setIndex(Number(line.index))
270
+ }
271
+
272
+ async showHandler(line: any) {
273
+ outputLog('line', 'debug', line)
274
+ // 表示する画像の情報を管理オブジェクトに追加
275
+ const modeList: { [key: string]: string } = { 'bg': 'background', 'cutin': '', 'chara': '', 'cg': 'background', 'effect': 'effect' }
276
+ const key = Object.keys(modeList).includes(line.mode) ? modeList[line.mode] : line.name || line.src.split('/').pop()
277
+ const baseLine = engineConfig.resolution.height / 2
278
+ const centerPoint: { [key: string]: { x: number, y: number } } = {
279
+ left: { x: engineConfig.resolution.width * 0.25, y: baseLine },
280
+ center: { x: engineConfig.resolution.width * 0.5, y: baseLine },
281
+ right: { x: engineConfig.resolution.width * 0.75, y: baseLine },
282
+ }
283
+
284
+ const image = await this.getImageObject(line)
285
+ // 画像の表示位置を設定
286
+ let position = { x: line.x || 0, y: line.y || 0 }
287
+ // prettier-ignore
288
+ let size = line.width && line.height ? { width: line.width, height: line.height } : { width: image.getSize().width, height: image.getSize().height }
289
+
290
+ // line.modeが'cutin'の場合、center:middleのエイリアスを強制する
291
+ if (line.mode === 'cutin') {
292
+ line.pos = 'center:middle'
293
+ }
294
+
295
+ if (line.mode === 'cg') {
296
+ this.tempImages = { ...this.displayedImages }
297
+ this.displayedImages = { background: line.src }
298
+ size = { width: engineConfig.resolution.width, height: engineConfig.resolution.height }
299
+ }
300
+
301
+ if (line.pos) {
302
+ const pos = line.pos.split(':')
303
+ const baseLines: { [key: string]: number } = {
304
+ top: 0,
305
+ middle: engineConfig.resolution.height / 2,
306
+ bottom: engineConfig.resolution.height,
307
+ }
308
+ // エイリアスが設定されている場合、画像の中心点を求めて、画像の表示位置を設定する
309
+ position.x = centerPoint[pos[0]].x - size.width / 2
310
+ if (pos[1] === 'middle') {
311
+ position.y = baseLines[pos[1]] - size.width / 2
312
+ } else if (pos[1]) {
313
+ position.y = baseLines[pos[1]]
314
+ } else {
315
+ position.y = baseLine / 2
316
+ }
317
+ }
318
+ this.displayedImages[key] = {
319
+ image,
320
+ pos: position,
321
+ size: size,
322
+ look: line.look,
323
+ entry: line.entry,
324
+ }
325
+ outputLog('displayedImages', 'debug', this.displayedImages[key])
326
+ if (line.sepia) this.displayedImages[key].image.setSepia(line.sepia)
327
+ if (line.mono) this.displayedImages[key].image.setMonochrome(line.mono)
328
+ if (line.blur) this.displayedImages[key].image.setBlur(line.blur)
329
+ if (line.opacity) this.displayedImages[key].image.setOpacity(line.opacity)
330
+ this.drawer.show(this.displayedImages)
331
+ outputLog('this.displayedImages', 'debug', this.displayedImages)
332
+ }
333
+
334
+ hideHandler(line: any) {
335
+ outputLog('call', 'debug', line)
336
+ if (line.mode === 'cg') {
337
+ this.displayedImages = { ...this.tempImages }
338
+ this.tempImages = {}
339
+ } else {
340
+ delete this.displayedImages[line.name]
341
+ }
342
+ this.drawer.show(this.displayedImages)
343
+ }
344
+
345
+ async moveToHandler(line: any) {
346
+ outputLog('moveToHandler:line', 'debug', line)
347
+ const key = line.name
348
+ outputLog('moveToHandler:displayedImages', 'debug', this.displayedImages)
349
+ await this.drawer.moveTo(key, this.displayedImages, { x: line.x, y: line.y }, line.duration | 1)
350
+ }
351
+
352
+ async getImageObject(line: any) {
353
+ outputLog('call', 'debug', line)
354
+ let image
355
+ // 既にインスタンスがある場合は、それを使う
356
+ if (line.name) {
357
+ const targetImage = this.displayedImages[line.name]
358
+ const imageObject = targetImage ? targetImage.image : new ImageObject()
359
+ image = await imageObject.setImageAsync(line.src)
360
+ } else {
361
+ image = await new ImageObject().setImageAsync(line.src)
362
+ }
363
+ return image
364
+ }
365
+
366
+ async soundHandler(line: any) {
367
+ outputLog('call', 'debug', line)
368
+ let soundObject = await this.getSoundObject(line)
369
+ if (line.mode === 'bgm') {
370
+ if (this.bgm!.isPlaying) {
371
+ this.bgm!.stop()
372
+ }
373
+ this.bgm = soundObject
374
+ }
375
+ // playプロパティが存在する場合は、再生する
376
+ if ('play' in line) {
377
+ 'loop' in line ? soundObject.play(true) : soundObject.play()
378
+ } else if ('stop' in line) {
379
+ soundObject.stop()
380
+ } else if ('pause' in line) {
381
+ soundObject.pause()
382
+ }
383
+ // soundObjectを管理オブジェクトに追加
384
+ const key = line.name || line.src.split('/').pop()
385
+ this.usedSounds[key] = {
386
+ audio: soundObject,
387
+ }
388
+ }
389
+
390
+ async getSoundObject(line: any) {
391
+ outputLog('call', 'debug', line)
392
+ let resource
393
+ if (line.name) {
394
+ const targetResource = this.usedSounds[line.name]
395
+ const soundObject = targetResource ? targetResource.audio : new SoundObject()
396
+ resource = await soundObject.setAudioAsync(line.src)
397
+ } else {
398
+ resource = await new SoundObject().setAudioAsync(line.src)
399
+ }
400
+ return resource
401
+ }
402
+
403
+ newpageHandler() {
404
+ outputLog('call', 'debug')
405
+ this.displayedImages = {
406
+ background: {
407
+ image: this.getBackground(),
408
+ size: {
409
+ width: this.gameContainer.clientWidth,
410
+ height: this.gameContainer.clientHeight,
411
+ },
412
+ },
413
+ }
414
+ this.drawer.clear()
415
+ this.drawer.show(this.displayedImages)
416
+ }
417
+
418
+ async ifHandler(line: any) {
419
+ outputLog('call', 'debug', line)
420
+ const isTrue = this.executeCode(`return ${line.condition}`)
421
+ outputLog(`${isTrue}`, 'debug')
422
+ if (isTrue) {
423
+ outputLog('', 'debug', line.content[0].content)
424
+ this.scenarioManager.addScenario(line.content[0].content)
425
+ } else {
426
+ outputLog('', 'debug', line.content[1].content)
427
+ this.scenarioManager.addScenario(line.content[1].content)
428
+ }
429
+ }
430
+
431
+ async routeHandler(line: any) {
432
+ outputLog('call', 'debug', line)
433
+ if (this.bgm!.isPlaying) {
434
+ this.bgm!.stop()
435
+ this.bgm = null
436
+ }
437
+ this.newpageHandler()
438
+ // sceneファイルを読み込む
439
+ await this.loadScene(line.to)
440
+ // 画面を表示する
441
+ await this.loadScreen(this.sceneConfig)
442
+ // BGMを再生する
443
+ this.bgm!.play(true)
444
+ }
445
+
446
+ // Sceneファイルに、ビルド時に実行処理を追加して、そこに処理をお願いしたほうがいいかも?
447
+ callHandler(line: any) {
448
+ outputLog('call', 'debug', line)
449
+ this.executeCode(line.func)
450
+ }
451
+
452
+ async httpHandler(line: any) {
453
+ if (!(line.get || line.post || line.put || line.delete)) {
454
+ return line
455
+ }
456
+ outputLog('call', 'debug', line)
457
+ // progress属性を処理する
458
+ // prettier-ignore
459
+ const progressText = line.content.filter((content: any) => content.type === 'progress')[0]
460
+ if (progressText) {
461
+ await this.textHandler({ content: [progressText.content][0], wait: 0 })
462
+ }
463
+ // get,post,put,delete属性を処理する
464
+ const headers = line.content
465
+ .filter((content: any) => content.type === 'header')[0]
466
+ .content.reduce(
467
+ (acc: any, header: any) => ({
468
+ ...acc,
469
+ [header.type]: header.content,
470
+ }),
471
+ {},
472
+ )
473
+ const body = line.content
474
+ .filter((content: any) => content.type === 'data')[0]
475
+ .content.reduce(
476
+ (acc: any, header: any) => ({
477
+ ...acc,
478
+ [header.type]: header.content,
479
+ }),
480
+ {},
481
+ )
482
+ outputLog('headers', 'debug', headers)
483
+ outputLog('body', 'debug', body)
484
+ const response = await fetch(line.get || line.post || line.put || line.delete, {
485
+ method: line.get ? 'GET' : line.post ? 'POST' : line.put ? 'PUT' : 'DELETE',
486
+ headers: headers,
487
+ body: JSON.stringify(body),
488
+ })
489
+ if (response.ok) {
490
+ const json = await response.json()
491
+ this.sceneFile.res = json
492
+ outputLog('res', 'debug', json)
493
+ line.then = line.content.filter((content: any) => content.type === 'then')[0].content
494
+ } else {
495
+ line.error = line.content.filter((content: any) => content.type === 'error')[0].content
496
+ }
497
+ if (line.content) {
498
+ line.content = line.content.filter(
499
+ (content: any) =>
500
+ !(
501
+ content.type &&
502
+ (content.type === 'header' ||
503
+ content.type === 'data' ||
504
+ content.type === 'then' ||
505
+ content.type === 'error' ||
506
+ content.type === 'progress')
507
+ ),
508
+ )
509
+ }
510
+ return line
511
+ }
512
+
513
+ async waitHandler(line: any) {
514
+ outputLog('call', 'debug', line)
515
+ if (line.time) {
516
+ await sleep(line.time)
517
+ }
518
+ }
519
+
520
+ setBackground(image: DisplayedImage) {
521
+ this.displayedImages["background"] = image
522
+ }
523
+
524
+ getBackground() {
525
+ return this.displayedImages["background"].image
526
+ }
527
+
528
+ executeCode(code: string) {
529
+ try {
530
+ const context = { ...this.sceneFile }
531
+ const func = new Function(...Object.keys(context), code)
532
+ return func.apply(null, Object.values(context))
533
+ } catch (error) {
534
+ console.error('Error executing code:', error)
535
+ }
536
+ }
537
+ }