webtalekit-alpha 0.2.10 → 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 (391) 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 -224
  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 +149 -48
  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 +2 -11
  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/ImageObject.js +2 -2
  276. package/{src → dist/src}/resource/soundObject.js +6 -4
  277. package/dist/src/resource/soundObject.js.map +1 -0
  278. package/dist/src/utils/fallbackTemplate.js +13 -0
  279. package/dist/src/utils/fallbackTemplate.js.map +1 -0
  280. package/{src → dist/src}/utils/logger.js +4 -3
  281. package/dist/src/utils/logger.js.map +1 -0
  282. package/{src → dist/src}/utils/waitUtil.js +4 -3
  283. package/dist/src/utils/waitUtil.js.map +1 -0
  284. package/dist/webtalekit-alpha-0.2.13.tgz +0 -0
  285. package/docs/event-system-specification.md +493 -0
  286. package/docs/glossary.html +833 -0
  287. package/docs/index.html +296 -0
  288. package/docs/tag-reference.html +1317 -0
  289. package/docs/ui-template-guide.html +1068 -0
  290. package/example/README.md +29 -0
  291. package/example/engineConfig.json +10 -0
  292. package/example/package-lock.json +5145 -0
  293. package/example/package.json +26 -0
  294. package/example/src/index.js +13 -0
  295. package/example/src/resource/background/beach.jpg +0 -0
  296. package/example/src/resource/background/city.jpg +0 -0
  297. package/example/src/resource/background/crossroad.jpg +0 -0
  298. package/example/src/resource/background/forest.jpg +0 -0
  299. package/example/src/resource/background/laboratory.jpg +0 -0
  300. package/example/src/resource/background/library.jpg +0 -0
  301. package/example/src/resource/background/living_room.jpg +0 -0
  302. package/example/src/resource/background/music_room.jpg +0 -0
  303. package/example/src/resource/background/stage.jpg +0 -0
  304. package/example/src/resource/background/sunset.jpg +0 -0
  305. package/example/src/resource/background/title_bg.png +0 -0
  306. package/example/src/resource/bgm/calm_music.wav +0 -0
  307. package/example/src/resource/bgm/doorbell.mp3 +0 -0
  308. package/example/src/resource/bgm/nc366476_Virtual_Voyage.mp3 +0 -0
  309. package/example/src/resource/bgm/title_theme.mp3 +0 -0
  310. package/example/src/resource/chara/dancer.png +0 -0
  311. package/example/src/resource/chara/guest.png +0 -0
  312. package/example/src/resource/chara/guide.png +0 -0
  313. package/example/src/resource/chara/scientist.png +0 -0
  314. package/example/src/resource/config.js +0 -0
  315. package/example/src/resource/se/doorbell.mp3 +0 -0
  316. package/example/src/resource/system/systemPicture/01_message/message.png +0 -0
  317. package/example/src/resource/system/systemPicture/02_button/button.png +0 -0
  318. package/example/src/resource/system/systemPicture/02_button/button2.png +0 -0
  319. package/example/src/resource/system/systemPicture/02_button/button3.png +0 -0
  320. package/example/src/resource/system/systemPicture/03_system_button/auto.png +0 -0
  321. package/example/src/resource/system/systemPicture/03_system_button/auto2.png +0 -0
  322. package/example/src/resource/system/systemPicture/03_system_button/close.png +0 -0
  323. package/example/src/resource/system/systemPicture/03_system_button/close2.png +0 -0
  324. package/example/src/resource/system/systemPicture/03_system_button/config.png +0 -0
  325. package/example/src/resource/system/systemPicture/03_system_button/config2.png +0 -0
  326. package/example/src/resource/system/systemPicture/03_system_button/load.png +0 -0
  327. package/example/src/resource/system/systemPicture/03_system_button/load2.png +0 -0
  328. package/example/src/resource/system/systemPicture/03_system_button/log.png +0 -0
  329. package/example/src/resource/system/systemPicture/03_system_button/log2.png +0 -0
  330. package/example/src/resource/system/systemPicture/03_system_button/menu.png +0 -0
  331. package/example/src/resource/system/systemPicture/03_system_button/menu2.png +0 -0
  332. package/example/src/resource/system/systemPicture/03_system_button/qload.png +0 -0
  333. package/example/src/resource/system/systemPicture/03_system_button/qload2.png +0 -0
  334. package/example/src/resource/system/systemPicture/03_system_button/qsave.png +0 -0
  335. package/example/src/resource/system/systemPicture/03_system_button/qsave2.png +0 -0
  336. package/example/src/resource/system/systemPicture/03_system_button/save.png +0 -0
  337. package/example/src/resource/system/systemPicture/03_system_button/save2.png +0 -0
  338. package/example/src/resource/system/systemPicture/03_system_button/screen.png +0 -0
  339. package/example/src/resource/system/systemPicture/03_system_button/screen2.png +0 -0
  340. package/example/src/resource/system/systemPicture/03_system_button/skip.png +0 -0
  341. package/example/src/resource/system/systemPicture/03_system_button/skip2.png +0 -0
  342. package/example/src/resource/system/systemPicture/03_system_button/title.png +0 -0
  343. package/example/src/resource/system/systemPicture/03_system_button/title2.png +0 -0
  344. package/example/src/resource/system/systemPicture//345/210/251/347/224/250/350/246/217/347/264/204.txt +0 -0
  345. package/example/src/resource/system/wait.gif +0 -0
  346. package/example/src/scene/animation.scene +28 -0
  347. package/example/src/scene/background.scene +29 -0
  348. package/example/src/scene/character.scene +26 -0
  349. package/example/src/scene/choice.scene +97 -0
  350. package/example/src/scene/dialog.scene +105 -0
  351. package/example/src/scene/effects.scene +38 -0
  352. package/example/src/scene/en/animation.scene +28 -0
  353. package/example/src/scene/en/background.scene +26 -0
  354. package/example/src/scene/en/character.scene +26 -0
  355. package/example/src/scene/en/choice.scene +32 -0
  356. package/example/src/scene/en/effects.scene +37 -0
  357. package/example/src/scene/en/sound.scene +26 -0
  358. package/example/src/scene/en/text.scene +26 -0
  359. package/example/src/scene/en/title.scene +39 -0
  360. package/example/src/scene/if_test.scene +37 -0
  361. package/example/src/scene/resource-error-test.scene +15 -0
  362. package/example/src/scene/save-load-test.scene +48 -0
  363. package/example/src/scene/sound.scene +26 -0
  364. package/example/src/scene/test_error.scene +21 -0
  365. package/example/src/scene/text.scene +34 -0
  366. package/example/src/scene/title.scene +51 -0
  367. package/example/src/screen/incoming.html +474 -0
  368. package/example/src/screen/title.html +135 -0
  369. package/example/src/template.html +16 -0
  370. package/example/test-results/.last-run.json +4 -0
  371. package/example/webpack.config.js +69 -0
  372. package/image.png +0 -0
  373. package/package.json +3 -1
  374. package/playwright-report/index.html +71 -0
  375. package/s-plan1-5Light-s-1.jpg +0 -0
  376. package/test-results/.last-run.json +6 -0
  377. package/tests/e2e/if-global-attribute.spec.js +90 -0
  378. package/tests/e2e/resource-error-handling.spec.js +58 -0
  379. package/tests/e2e/screenshots/before-error-check.png +0 -0
  380. package/tests/e2e/screenshots/choices.png +0 -0
  381. package/tests/e2e/screenshots/message-window-click-wait.png +0 -0
  382. package/src/core/drawer.js.map +0 -1
  383. package/src/core/scenarioManager.js.map +0 -1
  384. package/src/resource/soundObject.js.map +0 -1
  385. package/src/utils/logger.js.map +0 -1
  386. package/src/utils/waitUtil.js.map +0 -1
  387. /package/{src → dist/src}/core/resourceManager.js +0 -0
  388. /package/{src → dist/src}/core/resourceManager.js.map +0 -0
  389. /package/{src → dist/src}/resource/ImageObject.js.map +0 -0
  390. /package/{src → dist/src}/utils/store.js +0 -0
  391. /package/{src → dist/src}/utils/store.js.map +0 -0
@@ -0,0 +1,365 @@
1
+ import { ImageObject } from '../resource/ImageObject'
2
+ import { outputLog } from '../utils/logger'
3
+ import { sleep } from '../utils/waitUtil'
4
+
5
+ /*
6
+ drawerの目的
7
+ UIのHTMLとcanvasを描画する。
8
+ */
9
+ export class Drawer {
10
+ private gameScreen: HTMLElement
11
+ private nameView!: HTMLElement
12
+ private messageText!: HTMLElement
13
+ private interactiveView!: HTMLElement
14
+ private ctx!: CanvasRenderingContext2D
15
+ private screenHtml!: HTMLElement
16
+ private config: any
17
+ isSkip: boolean = false
18
+ readySkip: boolean = false
19
+
20
+ constructor(gameContainer: HTMLElement) {
21
+ this.gameScreen = gameContainer
22
+ // ウィンドウのリサイズ時にスケールを調整
23
+ window.addEventListener('resize', () => this.adjustScale(this.gameScreen))
24
+ // 初期ロード時にもスケールを調整
25
+ this.adjustScale(this.gameScreen)
26
+ }
27
+
28
+ setScreen(screenHtml: HTMLElement, resolution: { width: number; height: number }) {
29
+ this.screenHtml = screenHtml
30
+ this.nameView = screenHtml.querySelector('#nameView') as HTMLElement
31
+ this.messageText = screenHtml.querySelector('#messageView') as HTMLElement
32
+ this.interactiveView = screenHtml.querySelector(
33
+ '#interactiveView',
34
+ ) as HTMLElement
35
+
36
+ // canvasをDOMに追加する
37
+ const canvas = document.createElement('canvas')
38
+ canvas.width = (resolution.width || 1280) * devicePixelRatio;
39
+ canvas.height = (resolution.height || 720) * devicePixelRatio;
40
+ // canvasのコンテキストを取得する
41
+ this.gameScreen.appendChild(canvas)
42
+ this.ctx = canvas.getContext('2d') as CanvasRenderingContext2D
43
+ // 黒で塗りつぶす
44
+ this.ctx.fillStyle = 'black'
45
+ this.ctx.fillRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
46
+ // 初期ロード時にもスケールを調整
47
+ this.adjustScale(this.gameScreen)
48
+ }
49
+
50
+ drawName(name: string) {
51
+ this.nameView.innerHTML = name
52
+ }
53
+
54
+
55
+
56
+ async drawText(text: string, speed: number = 50) {
57
+ const fragments = this.parseText(text);
58
+ await this.renderFragments(fragments, speed);
59
+ }
60
+
61
+ clearText() {
62
+ if (this.messageText) {
63
+ this.messageText.innerHTML = '';
64
+ }
65
+ }
66
+
67
+ private async renderFragments(fragments: (string | HTMLElement)[], speed: number) {
68
+ for (const fragment of fragments) {
69
+ if (typeof fragment === 'string') {
70
+ await this.typeText(fragment, speed);
71
+ } else {
72
+ const element = fragment;
73
+ this.messageText.appendChild(element);
74
+ if (element.childNodes.length > 0) {
75
+ await this.renderFragments(Array.from(element.childNodes) as (string | HTMLElement)[], speed);
76
+ }
77
+ }
78
+ }
79
+ }
80
+
81
+ private async typeText(text: string, speed: number) {
82
+ for (const char of text) {
83
+ this.messageText.appendChild(document.createTextNode(char));
84
+ await sleep(speed);
85
+ }
86
+ }
87
+
88
+ private createElementFromTag(tag: string): HTMLElement | null {
89
+ const colorMatch = tag.match(/<color\s+value="(.*?)">/);
90
+ if (colorMatch) {
91
+ const span = document.createElement('span');
92
+ span.style.color = colorMatch[1];
93
+ return span;
94
+ }
95
+
96
+ const rubyMatch = tag.match(/<ruby\s+text="(.*?)">/);
97
+ if (rubyMatch) {
98
+ const ruby = document.createElement('ruby');
99
+ const rt = document.createElement('rt');
100
+ rt.textContent = rubyMatch[1];
101
+ ruby.appendChild(rt);
102
+ return ruby;
103
+ }
104
+
105
+ switch (tag) {
106
+ case '<b>':
107
+ return document.createElement('strong');
108
+ case '<i>':
109
+ return document.createElement('em');
110
+ default:
111
+ return null;
112
+ }
113
+ }
114
+
115
+ private parseText(text: string): (string | HTMLElement)[] {
116
+ const fragments: (string | HTMLElement)[] = [];
117
+ let currentElement: HTMLElement | null = null;
118
+ let currentText = '';
119
+
120
+ const pushCurrentText = () => {
121
+ if (currentText) {
122
+ if (currentElement) {
123
+ if (currentElement.tagName.toLowerCase() === 'ruby') {
124
+ currentElement.insertBefore(document.createTextNode(currentText), currentElement.firstChild);
125
+ } else {
126
+ currentElement.appendChild(document.createTextNode(currentText));
127
+ }
128
+ } else {
129
+ fragments.push(currentText);
130
+ }
131
+ currentText = '';
132
+ }
133
+ };
134
+
135
+ for (let i = 0; i < text.length; i++) {
136
+ if (text[i] === '<') {
137
+ const tagEnd = text.indexOf('>', i);
138
+ if (tagEnd === -1) {
139
+ currentText += text[i];
140
+ continue;
141
+ }
142
+
143
+ const tag = text.slice(i, tagEnd + 1);
144
+ if (tag.startsWith('</')) {
145
+ // 閉じタグの処理
146
+ pushCurrentText();
147
+ if (currentElement && currentElement.parentElement) {
148
+ currentElement = currentElement.parentElement;
149
+ } else {
150
+ currentElement = null;
151
+ }
152
+ } else {
153
+ // 開始タグの処理
154
+ pushCurrentText();
155
+ const newElement = this.createElementFromTag(tag);
156
+ if (newElement) {
157
+ if (currentElement) {
158
+ currentElement.appendChild(newElement);
159
+ } else {
160
+ fragments.push(newElement);
161
+ }
162
+ currentElement = newElement;
163
+ } else {
164
+ currentText += tag;
165
+ }
166
+ }
167
+ i = tagEnd;
168
+ } else {
169
+ currentText += text[i];
170
+ }
171
+ }
172
+
173
+ pushCurrentText();
174
+ return fragments;
175
+ }
176
+
177
+ async drawChoices(choices: any) {
178
+ let isSelect = false
179
+ let selectId = 0
180
+ let onSelect = 0
181
+
182
+ // 選択肢ボタンの配置を設定する
183
+ const interactiveView = document.querySelector(
184
+ '#interactiveView',
185
+ ) as HTMLElement
186
+ if (choices.position == 'auto' || choices.position === undefined) {
187
+ interactiveView.className = 'auto'
188
+ } else {
189
+ interactiveView.className = 'manual'
190
+ }
191
+ // 選択肢を表示
192
+ for (const choice of choices.content) {
193
+ const defaultImage =
194
+ choice.default !== undefined
195
+ ? choice.default
196
+ : './src/resource/system/systemPicture/02_button/button.png'
197
+ const hoverImage =
198
+ choice.hover !== undefined
199
+ ? choice.hover
200
+ : './src/resource/system/systemPicture/02_button/button2.png'
201
+ const selectImage =
202
+ choice.select !== undefined
203
+ ? choice.select
204
+ : './src/resource/system/systemPicture/02_button/button3.png'
205
+ const button = document.createElement('div')
206
+ button.className = 'choice'
207
+ if (interactiveView.className == 'manual') {
208
+ button.style.position = 'absolute'
209
+ button.style.top = choice.position?.y || 0
210
+ button.style.left = choice.position?.x || 0
211
+ }
212
+ button.style.color =
213
+ choice.color !== undefined ? choice.color.default : 'black'
214
+ button.style.width = '100%'
215
+ button.style.height = '50px'
216
+ button.style.backgroundImage = `url(${defaultImage})`
217
+ button.style.textAlign = 'center'
218
+ button.style.backgroundRepeat = 'no-repeat'
219
+ button.style.backgroundPosition = 'center'
220
+ button.style.paddingTop = '20px'
221
+ button.addEventListener('mouseenter', function () {
222
+ // マウスが要素の上にあるときの背景色
223
+ this.style.backgroundImage = `url(${hoverImage})`
224
+ this.style.color =
225
+ choice.color !== undefined ? choice.color.hover : 'black'
226
+ })
227
+ button.addEventListener('mouseleave', function () {
228
+ // マウスが要素から離れたときの背景色
229
+ this.style.backgroundImage = `url(${defaultImage})`
230
+ this.style.color =
231
+ choice.color !== undefined ? choice.color.default : 'black'
232
+ })
233
+ button.addEventListener('mousedown', function () {
234
+ // マウスが要素を選択したときの背景色
235
+ this.style.backgroundImage = `url(${selectImage})`
236
+ this.style.color =
237
+ choice.color !== undefined ? choice.color.select : 'black'
238
+ })
239
+ button.innerHTML = choice.label
240
+ button.onclick = () => {
241
+ outputLog('click', 'debug', choice)
242
+ this.interactiveView.querySelectorAll('.choice').forEach((element) => {
243
+ element.parentNode?.removeChild(element)
244
+ })
245
+ selectId = choice.id
246
+ onSelect = choice.content
247
+ isSelect = true
248
+ }
249
+ this.interactiveView.appendChild(button)
250
+ }
251
+
252
+ // 選択待ち
253
+ return new Promise((resolve) => {
254
+ const intervalId = setInterval(() => {
255
+ if (isSelect) {
256
+ clearInterval(intervalId)
257
+ resolve({ selectId, onSelect })
258
+ }
259
+ }, 100)
260
+ })
261
+ }
262
+
263
+ clear() {
264
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
265
+ }
266
+
267
+ show(displayedImages: any) {
268
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
269
+ for (let key in displayedImages) {
270
+ const img: ImageObject = displayedImages[key].image
271
+ const pos: { x: number; y: number } = displayedImages[key].pos || {
272
+ x: 0,
273
+ y: 0,
274
+ }
275
+ const size: { width: number; height: number } = displayedImages[key].size
276
+ const reverse: boolean = displayedImages[key].look || false
277
+ const entry: { time: number; wait: boolean } = displayedImages[key]
278
+ .entry || { time: 1, wait: false }
279
+ if (entry.wait) {
280
+ // 表示開始までの遅延処理
281
+ setTimeout(() => {
282
+ this.drawCanvas(img, pos, size, reverse)
283
+ }, entry.time * 1000)
284
+ } else {
285
+ this.drawCanvas(img, pos, size, reverse)
286
+ }
287
+ }
288
+ }
289
+
290
+ moveTo(name: string, displayedImages: any, pos: { x: number; y: number }, durning: number) {
291
+ return new Promise((resolve) => {
292
+ const target = displayedImages[name];
293
+ const startPos = { x: target.pos.x, y: target.pos.y };
294
+ const dest = { x: startPos.x + Number(pos.x), y: startPos.y + Number(pos.y) };
295
+ const startTime = performance.now();
296
+
297
+ const move = (currentTime:any) => {
298
+ const elapsedTime = (currentTime - startTime) / 1000; // 秒単位の経過時間
299
+ const progress = Math.min(elapsedTime / durning, 1); // 0から1の進捗
300
+
301
+ target.pos.x = startPos.x + (dest.x - startPos.x) * progress;
302
+ target.pos.y = startPos.y + (dest.y - startPos.y) * progress;
303
+
304
+ this.show(displayedImages);
305
+
306
+ if (progress < 1) {
307
+ window.requestAnimationFrame(move);
308
+ } else {
309
+ // 最終位置を正確に設定
310
+ target.pos.x = dest.x;
311
+ target.pos.y = dest.y;
312
+ this.show(displayedImages);
313
+ resolve(null);
314
+ }
315
+ };
316
+
317
+ window.requestAnimationFrame(move);
318
+ });
319
+ }
320
+ drawCanvas(img: ImageObject, pos: any, size: any, reverse: any) {
321
+ outputLog('drawCanvas', 'debug', {img, pos, size, reverse})
322
+ const canvas = img.draw(reverse).getCanvas()
323
+ // canvasから画像を取得して、this.ctxに描画
324
+ const imageWidth = size !== undefined ? size.width : canvas.width
325
+ const imageHeight = size !== undefined ? size.height : canvas.height
326
+ this.ctx.drawImage(
327
+ canvas,
328
+ 0,
329
+ 0,
330
+ canvas.width,
331
+ canvas.height,
332
+ pos.x,
333
+ pos.y,
334
+ imageWidth,
335
+ imageHeight,
336
+ ) //CanvasRenderingContext2D.drawImage: Passed-in canvas is empty
337
+ }
338
+
339
+ adjustScale(targetElement: HTMLElement) {
340
+ // ターゲット要素の元の幅と高さ
341
+ const originalWidth = targetElement.scrollWidth // 例: 1280px
342
+ const originalHeight = targetElement.scrollHeight // 例: 720px
343
+
344
+ // ビューポートの幅と高さを取得
345
+ const viewportWidth = window.innerWidth
346
+ const viewportHeight = window.innerHeight
347
+
348
+ // 幅と高さのスケールを計算
349
+ const scaleX = viewportWidth / originalWidth
350
+ const scaleY = viewportHeight / originalHeight
351
+
352
+ // 幅と高さのうち、小さい方のスケールを選択(アスペクト比を維持)
353
+ const scale = Math.min(scaleX, scaleY)
354
+
355
+ // ターゲット要素にスケールを適用
356
+ targetElement.style.transform = `scale(${scale})`
357
+ }
358
+
359
+ setVisibility(name: string, isVisible: boolean) {
360
+ const target = this.screenHtml.querySelector(name) as HTMLElement
361
+ if (target) {
362
+ target.style.visibility = isVisible ? 'visible' : 'hidden'
363
+ }
364
+ }
365
+ }
@@ -0,0 +1,294 @@
1
+ import { ImageObject } from '../resource/ImageObject'
2
+ import { outputLog } from '../utils/logger'
3
+ import { sleep } from '../utils/waitUtil'
4
+
5
+ /*
6
+ drawerの目的
7
+ UIのHTMLとcanvasを描画する。
8
+ */
9
+ export class Drawer {
10
+ private gameScreen: HTMLElement
11
+ private nameView!: HTMLElement
12
+ private messageText!: HTMLElement
13
+ private interactiveView!: HTMLElement
14
+ private ctx!: CanvasRenderingContext2D
15
+ private screenHtml!: HTMLElement
16
+ private config: any
17
+ isSkip: boolean = false
18
+ readySkip: boolean = false
19
+
20
+ constructor(gameContainer: HTMLElement) {
21
+ this.gameScreen = gameContainer
22
+ // ウィンドウのリサイズ時にスケールを調整
23
+ window.addEventListener('resize', () => this.adjustScale(this.gameScreen))
24
+ // 初期ロード時にもスケールを調整
25
+ this.adjustScale(this.gameScreen)
26
+ }
27
+
28
+ setScreen(screenHtml: HTMLElement, resolution: { width: number; height: number }) {
29
+ this.screenHtml = screenHtml
30
+ this.nameView = screenHtml.querySelector('#nameView') as HTMLElement
31
+ this.messageText = screenHtml.querySelector('#messageView') as HTMLElement
32
+ this.interactiveView = screenHtml.querySelector(
33
+ '#interactiveView',
34
+ ) as HTMLElement
35
+
36
+ // canvasをDOMに追加する
37
+ const canvas = document.createElement('canvas')
38
+ canvas.width = (resolution.width || 1280) * devicePixelRatio;
39
+ canvas.height = (resolution.height || 720) * devicePixelRatio;
40
+ // canvasのコンテキストを取得する
41
+ this.gameScreen.appendChild(canvas)
42
+ this.ctx = canvas.getContext('2d') as CanvasRenderingContext2D
43
+ // 黒で塗りつぶす
44
+ this.ctx.fillStyle = 'black'
45
+ this.ctx.fillRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
46
+ // 初期ロード時にもスケールを調整
47
+ this.adjustScale(this.gameScreen)
48
+ }
49
+
50
+ drawName(name: string) {
51
+ this.nameView.innerHTML = name
52
+ }
53
+
54
+ async drawText(text: string, wait: number) {
55
+ this.messageText.innerHTML = ''
56
+ for (const char of text) {
57
+ //prettier-ignore
58
+ setTimeout(() => { this.readySkip = true, wait });
59
+ // 100ミリ秒待ってから、スキップボタンが押されたら即座に表示
60
+ if (!this.isSkip) {
61
+ this.messageText.appendChild(document.createTextNode(char));
62
+ await sleep(wait)
63
+ } else {
64
+ if (this.readySkip) {
65
+ this.messageText.innerHTML = text
66
+ this.readySkip = false
67
+ this.isSkip = false
68
+ break
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ async drawTextContent(content, speed = 50) {
75
+ for (const item of content) {
76
+ if (typeof item === 'string') {
77
+ await this.typeText(item, speed);
78
+ } else {
79
+ await this.drawDecoratedText(item, speed);
80
+ }
81
+ }
82
+ }
83
+
84
+ async drawDecoratedText(element, speed) {
85
+ const container = this.createDecoratedElement(element);
86
+ this.messageText.appendChild(container);
87
+ await this.typeTextInElement(container, speed);
88
+ }
89
+
90
+ createDecoratedElement(element) {
91
+ switch (element.type) {
92
+ case 'color':
93
+ const span = document.createElement('span');
94
+ span.style.color = element.value;
95
+ return span;
96
+ case 'ruby':
97
+ const ruby = document.createElement('ruby');
98
+ const rt = document.createElement('rt');
99
+ rt.textContent = element.text;
100
+ ruby.appendChild(rt);
101
+ return ruby;
102
+ // 他の装飾タイプに対する処理を追加
103
+ }
104
+ }
105
+
106
+ async drawChoices(choices: any) {
107
+ let isSelect = false
108
+ let selectId = 0
109
+ let onSelect = 0
110
+
111
+ // 選択肢ボタンの配置を設定する
112
+ const interactiveView = document.querySelector(
113
+ '#interactiveView',
114
+ ) as HTMLElement
115
+ if (choices.position == 'auto' || choices.position === undefined) {
116
+ interactiveView.className = 'auto'
117
+ } else {
118
+ interactiveView.className = 'manual'
119
+ }
120
+ // 選択肢を表示
121
+ for (const choice of choices.content) {
122
+ const defaultImage =
123
+ choice.default !== undefined
124
+ ? choice.default
125
+ : './src/resource/system/systemPicture/02_button/button.png'
126
+ const hoverImage =
127
+ choice.hover !== undefined
128
+ ? choice.hover
129
+ : './src/resource/system/systemPicture/02_button/button2.png'
130
+ const selectImage =
131
+ choice.select !== undefined
132
+ ? choice.select
133
+ : './src/resource/system/systemPicture/02_button/button3.png'
134
+ const button = document.createElement('div')
135
+ button.className = 'choice'
136
+ if (interactiveView.className == 'manual') {
137
+ button.style.position = 'absolute'
138
+ button.style.top = choice.position?.y || 0
139
+ button.style.left = choice.position?.x || 0
140
+ }
141
+ button.style.color =
142
+ choice.color !== undefined ? choice.color.default : 'black'
143
+ button.style.width = '100%'
144
+ button.style.height = '50px'
145
+ button.style.backgroundImage = `url(${defaultImage})`
146
+ button.style.textAlign = 'center'
147
+ button.style.backgroundRepeat = 'no-repeat'
148
+ button.style.backgroundPosition = 'center'
149
+ button.style.paddingTop = '20px'
150
+ button.addEventListener('mouseenter', function () {
151
+ // マウスが要素の上にあるときの背景色
152
+ this.style.backgroundImage = `url(${hoverImage})`
153
+ this.style.color =
154
+ choice.color !== undefined ? choice.color.hover : 'black'
155
+ })
156
+ button.addEventListener('mouseleave', function () {
157
+ // マウスが要素から離れたときの背景色
158
+ this.style.backgroundImage = `url(${defaultImage})`
159
+ this.style.color =
160
+ choice.color !== undefined ? choice.color.default : 'black'
161
+ })
162
+ button.addEventListener('mousedown', function () {
163
+ // マウスが要素を選択したときの背景色
164
+ this.style.backgroundImage = `url(${selectImage})`
165
+ this.style.color =
166
+ choice.color !== undefined ? choice.color.select : 'black'
167
+ })
168
+ button.innerHTML = choice.label
169
+ button.onclick = () => {
170
+ outputLog('click', 'debug', choice)
171
+ this.interactiveView.querySelectorAll('.choice').forEach((element) => {
172
+ element.parentNode?.removeChild(element)
173
+ })
174
+ selectId = choice.id
175
+ onSelect = choice.content
176
+ isSelect = true
177
+ }
178
+ this.interactiveView.appendChild(button)
179
+ }
180
+
181
+ // 選択待ち
182
+ return new Promise((resolve) => {
183
+ const intervalId = setInterval(() => {
184
+ if (isSelect) {
185
+ clearInterval(intervalId)
186
+ resolve({ selectId, onSelect })
187
+ }
188
+ }, 100)
189
+ })
190
+ }
191
+
192
+ clear() {
193
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
194
+ }
195
+
196
+ show(displayedImages: any) {
197
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height)
198
+ for (let key in displayedImages) {
199
+ const img: ImageObject = displayedImages[key].image
200
+ const pos: { x: number; y: number } = displayedImages[key].pos || {
201
+ x: 0,
202
+ y: 0,
203
+ }
204
+ const size: { width: number; height: number } = displayedImages[key].size
205
+ const reverse: boolean = displayedImages[key].look || false
206
+ const entry: { time: number; wait: boolean } = displayedImages[key]
207
+ .entry || { time: 1, wait: false }
208
+ if (entry.wait) {
209
+ // 表示開始までの遅延処理
210
+ setTimeout(() => {
211
+ this.drawCanvas(img, pos, size, reverse)
212
+ }, entry.time * 1000)
213
+ } else {
214
+ this.drawCanvas(img, pos, size, reverse)
215
+ }
216
+ }
217
+ }
218
+
219
+ moveTo(name: string, displayedImages: any, pos: { x: number; y: number }, durning: number) {
220
+ return new Promise((resolve) => {
221
+ const target = displayedImages[name];
222
+ const startPos = { x: target.pos.x, y: target.pos.y };
223
+ const dest = { x: startPos.x + Number(pos.x), y: startPos.y + Number(pos.y) };
224
+ const startTime = performance.now();
225
+
226
+ const move = (currentTime:any) => {
227
+ const elapsedTime = (currentTime - startTime) / 1000; // 秒単位の経過時間
228
+ const progress = Math.min(elapsedTime / durning, 1); // 0から1の進捗
229
+
230
+ target.pos.x = startPos.x + (dest.x - startPos.x) * progress;
231
+ target.pos.y = startPos.y + (dest.y - startPos.y) * progress;
232
+
233
+ this.show(displayedImages);
234
+
235
+ if (progress < 1) {
236
+ window.requestAnimationFrame(move);
237
+ } else {
238
+ // 最終位置を正確に設定
239
+ target.pos.x = dest.x;
240
+ target.pos.y = dest.y;
241
+ this.show(displayedImages);
242
+ resolve(null);
243
+ }
244
+ };
245
+
246
+ window.requestAnimationFrame(move);
247
+ });
248
+ }
249
+ drawCanvas(img: ImageObject, pos: any, size: any, reverse: any) {
250
+ outputLog('drawCanvas', 'debug', {img, pos, size, reverse})
251
+ const canvas = img.draw(reverse).getCanvas()
252
+ // canvasから画像を取得して、this.ctxに描画
253
+ const imageWidth = size !== undefined ? size.width : canvas.width
254
+ const imageHeight = size !== undefined ? size.height : canvas.height
255
+ this.ctx.drawImage(
256
+ canvas,
257
+ 0,
258
+ 0,
259
+ canvas.width,
260
+ canvas.height,
261
+ pos.x,
262
+ pos.y,
263
+ imageWidth,
264
+ imageHeight,
265
+ ) //CanvasRenderingContext2D.drawImage: Passed-in canvas is empty
266
+ }
267
+
268
+ adjustScale(targetElement: HTMLElement) {
269
+ // ターゲット要素の元の幅と高さ
270
+ const originalWidth = targetElement.scrollWidth // 例: 1280px
271
+ const originalHeight = targetElement.scrollHeight // 例: 720px
272
+
273
+ // ビューポートの幅と高さを取得
274
+ const viewportWidth = window.innerWidth
275
+ const viewportHeight = window.innerHeight
276
+
277
+ // 幅と高さのスケールを計算
278
+ const scaleX = viewportWidth / originalWidth
279
+ const scaleY = viewportHeight / originalHeight
280
+
281
+ // 幅と高さのうち、小さい方のスケールを選択(アスペクト比を維持)
282
+ const scale = Math.min(scaleX, scaleY)
283
+
284
+ // ターゲット要素にスケールを適用
285
+ targetElement.style.transform = `scale(${scale})`
286
+ }
287
+
288
+ setVisibility(name: string, isVisible: boolean) {
289
+ const target = this.screenHtml.querySelector(name) as HTMLElement
290
+ if (target) {
291
+ target.style.visibility = isVisible ? 'visible' : 'hidden'
292
+ }
293
+ }
294
+ }