@drincs/pixi-vn 0.6.2 → 0.6.4

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 (407) hide show
  1. package/dist/classes/CanvasEvent.js +1 -1
  2. package/dist/classes/CanvasEvent.js.map +1 -1
  3. package/dist/classes/CanvasEvent.mjs +1 -1
  4. package/dist/classes/CanvasEvent.mjs.map +1 -1
  5. package/dist/classes/CharacterBaseModel.js +15 -15
  6. package/dist/classes/CharacterBaseModel.js.map +1 -1
  7. package/dist/classes/CharacterBaseModel.mjs +15 -15
  8. package/dist/classes/CharacterBaseModel.mjs.map +1 -1
  9. package/dist/classes/ChoiceMenuOption.js +15 -15
  10. package/dist/classes/ChoiceMenuOption.js.map +1 -1
  11. package/dist/classes/ChoiceMenuOption.mjs +15 -15
  12. package/dist/classes/ChoiceMenuOption.mjs.map +1 -1
  13. package/dist/classes/CloseLabel.js +1 -1
  14. package/dist/classes/CloseLabel.js.map +1 -1
  15. package/dist/classes/CloseLabel.mjs +1 -1
  16. package/dist/classes/CloseLabel.mjs.map +1 -1
  17. package/dist/classes/DialogueBaseModel.js +1 -1
  18. package/dist/classes/DialogueBaseModel.js.map +1 -1
  19. package/dist/classes/DialogueBaseModel.mjs +1 -1
  20. package/dist/classes/DialogueBaseModel.mjs.map +1 -1
  21. package/dist/classes/Label.js +1 -1
  22. package/dist/classes/Label.js.map +1 -1
  23. package/dist/classes/Label.mjs +1 -1
  24. package/dist/classes/Label.mjs.map +1 -1
  25. package/dist/classes/StoredClassModel.js +15 -15
  26. package/dist/classes/StoredClassModel.js.map +1 -1
  27. package/dist/classes/StoredClassModel.mjs +15 -15
  28. package/dist/classes/StoredClassModel.mjs.map +1 -1
  29. package/dist/classes/canvas/CanvasBase.js +1 -1
  30. package/dist/classes/canvas/CanvasBase.js.map +1 -1
  31. package/dist/classes/canvas/CanvasBase.mjs +1 -1
  32. package/dist/classes/canvas/CanvasBase.mjs.map +1 -1
  33. package/dist/classes/canvas/CanvasContainer.js +13 -13
  34. package/dist/classes/canvas/CanvasContainer.js.map +1 -1
  35. package/dist/classes/canvas/CanvasContainer.mjs +13 -13
  36. package/dist/classes/canvas/CanvasContainer.mjs.map +1 -1
  37. package/dist/classes/canvas/CanvasImage.js +2 -4
  38. package/dist/classes/canvas/CanvasImage.js.map +1 -1
  39. package/dist/classes/canvas/CanvasImage.mjs +2 -4
  40. package/dist/classes/canvas/CanvasImage.mjs.map +1 -1
  41. package/dist/classes/canvas/CanvasSprite.js +2 -4
  42. package/dist/classes/canvas/CanvasSprite.js.map +1 -1
  43. package/dist/classes/canvas/CanvasSprite.mjs +2 -4
  44. package/dist/classes/canvas/CanvasSprite.mjs.map +1 -1
  45. package/dist/classes/canvas/CanvasText.js +11 -11
  46. package/dist/classes/canvas/CanvasText.js.map +1 -1
  47. package/dist/classes/canvas/CanvasText.mjs +11 -11
  48. package/dist/classes/canvas/CanvasText.mjs.map +1 -1
  49. package/dist/classes/canvas/index.js +13 -13
  50. package/dist/classes/canvas/index.js.map +1 -1
  51. package/dist/classes/canvas/index.mjs +13 -13
  52. package/dist/classes/canvas/index.mjs.map +1 -1
  53. package/dist/classes/index.js +15 -15
  54. package/dist/classes/index.js.map +1 -1
  55. package/dist/classes/index.mjs +15 -15
  56. package/dist/classes/index.mjs.map +1 -1
  57. package/dist/classes/ticker/FadeAlphaTicker.js +15 -15
  58. package/dist/classes/ticker/FadeAlphaTicker.js.map +1 -1
  59. package/dist/classes/ticker/FadeAlphaTicker.mjs +15 -15
  60. package/dist/classes/ticker/FadeAlphaTicker.mjs.map +1 -1
  61. package/dist/classes/ticker/MoveTicker.js +15 -15
  62. package/dist/classes/ticker/MoveTicker.js.map +1 -1
  63. package/dist/classes/ticker/MoveTicker.mjs +15 -15
  64. package/dist/classes/ticker/MoveTicker.mjs.map +1 -1
  65. package/dist/classes/ticker/RotateTicker.js +15 -15
  66. package/dist/classes/ticker/RotateTicker.js.map +1 -1
  67. package/dist/classes/ticker/RotateTicker.mjs +15 -15
  68. package/dist/classes/ticker/RotateTicker.mjs.map +1 -1
  69. package/dist/classes/ticker/TickerBase.js +1 -1
  70. package/dist/classes/ticker/TickerBase.js.map +1 -1
  71. package/dist/classes/ticker/TickerBase.mjs +1 -1
  72. package/dist/classes/ticker/TickerBase.mjs.map +1 -1
  73. package/dist/classes/ticker/ZoomTicker.js +15 -15
  74. package/dist/classes/ticker/ZoomTicker.js.map +1 -1
  75. package/dist/classes/ticker/ZoomTicker.mjs +15 -15
  76. package/dist/classes/ticker/ZoomTicker.mjs.map +1 -1
  77. package/dist/classes/ticker/index.js +15 -15
  78. package/dist/classes/ticker/index.js.map +1 -1
  79. package/dist/classes/ticker/index.mjs +15 -15
  80. package/dist/classes/ticker/index.mjs.map +1 -1
  81. package/dist/constants.d.mts +1 -1
  82. package/dist/constants.d.ts +1 -1
  83. package/dist/constants.js +2 -2
  84. package/dist/constants.js.map +1 -1
  85. package/dist/constants.mjs +2 -2
  86. package/dist/constants.mjs.map +1 -1
  87. package/dist/decorators/CanvasElementDecorator.js +13 -13
  88. package/dist/decorators/CanvasElementDecorator.js.map +1 -1
  89. package/dist/decorators/CanvasElementDecorator.mjs +13 -13
  90. package/dist/decorators/CanvasElementDecorator.mjs.map +1 -1
  91. package/dist/decorators/CharacterDecorator.js +1 -1
  92. package/dist/decorators/CharacterDecorator.js.map +1 -1
  93. package/dist/decorators/CharacterDecorator.mjs +1 -1
  94. package/dist/decorators/CharacterDecorator.mjs.map +1 -1
  95. package/dist/decorators/EventDecorator.js +1 -1
  96. package/dist/decorators/EventDecorator.js.map +1 -1
  97. package/dist/decorators/EventDecorator.mjs +1 -1
  98. package/dist/decorators/EventDecorator.mjs.map +1 -1
  99. package/dist/decorators/LabelDecorator.js +15 -15
  100. package/dist/decorators/LabelDecorator.js.map +1 -1
  101. package/dist/decorators/LabelDecorator.mjs +15 -15
  102. package/dist/decorators/LabelDecorator.mjs.map +1 -1
  103. package/dist/decorators/TickerDecorator.js +1 -1
  104. package/dist/decorators/TickerDecorator.js.map +1 -1
  105. package/dist/decorators/TickerDecorator.mjs +1 -1
  106. package/dist/decorators/TickerDecorator.mjs.map +1 -1
  107. package/dist/decorators/index.js +15 -15
  108. package/dist/decorators/index.js.map +1 -1
  109. package/dist/decorators/index.mjs +15 -15
  110. package/dist/decorators/index.mjs.map +1 -1
  111. package/dist/functions/CanvasUtility.js +13 -13
  112. package/dist/functions/CanvasUtility.js.map +1 -1
  113. package/dist/functions/CanvasUtility.mjs +13 -13
  114. package/dist/functions/CanvasUtility.mjs.map +1 -1
  115. package/dist/functions/DialogueUtility.js +15 -15
  116. package/dist/functions/DialogueUtility.js.map +1 -1
  117. package/dist/functions/DialogueUtility.mjs +15 -15
  118. package/dist/functions/DialogueUtility.mjs.map +1 -1
  119. package/dist/functions/DiffUtility.js +1 -1
  120. package/dist/functions/DiffUtility.js.map +1 -1
  121. package/dist/functions/DiffUtility.mjs +1 -1
  122. package/dist/functions/DiffUtility.mjs.map +1 -1
  123. package/dist/functions/EasterEgg.js +1 -1
  124. package/dist/functions/EasterEgg.js.map +1 -1
  125. package/dist/functions/EasterEgg.mjs +1 -1
  126. package/dist/functions/EasterEgg.mjs.map +1 -1
  127. package/dist/functions/ExportUtility.js +1 -1
  128. package/dist/functions/ExportUtility.js.map +1 -1
  129. package/dist/functions/ExportUtility.mjs +1 -1
  130. package/dist/functions/ExportUtility.mjs.map +1 -1
  131. package/dist/functions/FlagsUtility.js +15 -15
  132. package/dist/functions/FlagsUtility.js.map +1 -1
  133. package/dist/functions/FlagsUtility.mjs +15 -15
  134. package/dist/functions/FlagsUtility.mjs.map +1 -1
  135. package/dist/functions/GameUtility.js +15 -15
  136. package/dist/functions/GameUtility.js.map +1 -1
  137. package/dist/functions/GameUtility.mjs +15 -15
  138. package/dist/functions/GameUtility.mjs.map +1 -1
  139. package/dist/functions/ImageUtility.js +15 -15
  140. package/dist/functions/ImageUtility.js.map +1 -1
  141. package/dist/functions/ImageUtility.mjs +15 -15
  142. package/dist/functions/ImageUtility.mjs.map +1 -1
  143. package/dist/functions/SavesUtility.js +16 -16
  144. package/dist/functions/SavesUtility.js.map +1 -1
  145. package/dist/functions/SavesUtility.mjs +16 -16
  146. package/dist/functions/SavesUtility.mjs.map +1 -1
  147. package/dist/functions/StepLabelUtility.js +1 -1
  148. package/dist/functions/StepLabelUtility.js.map +1 -1
  149. package/dist/functions/StepLabelUtility.mjs +1 -1
  150. package/dist/functions/StepLabelUtility.mjs.map +1 -1
  151. package/dist/functions/TextureUtility.js +10 -8
  152. package/dist/functions/TextureUtility.js.map +1 -1
  153. package/dist/functions/TextureUtility.mjs +10 -8
  154. package/dist/functions/TextureUtility.mjs.map +1 -1
  155. package/dist/functions/TickerUtility.js +1 -1
  156. package/dist/functions/TickerUtility.js.map +1 -1
  157. package/dist/functions/TickerUtility.mjs +1 -1
  158. package/dist/functions/TickerUtility.mjs.map +1 -1
  159. package/dist/functions/index.js +16 -16
  160. package/dist/functions/index.js.map +1 -1
  161. package/dist/functions/index.mjs +16 -16
  162. package/dist/functions/index.mjs.map +1 -1
  163. package/dist/index.js +123 -25
  164. package/dist/index.js.map +1 -1
  165. package/dist/index.mjs +124 -26
  166. package/dist/index.mjs.map +1 -1
  167. package/dist/interface/CharacterBaseModelProps.js +1 -1
  168. package/dist/interface/CharacterBaseModelProps.js.map +1 -1
  169. package/dist/interface/CharacterBaseModelProps.mjs +1 -1
  170. package/dist/interface/CharacterBaseModelProps.mjs.map +1 -1
  171. package/dist/interface/DialogueHistory.js +1 -1
  172. package/dist/interface/DialogueHistory.js.map +1 -1
  173. package/dist/interface/DialogueHistory.mjs +1 -1
  174. package/dist/interface/DialogueHistory.mjs.map +1 -1
  175. package/dist/interface/IHistoryStep.js +1 -1
  176. package/dist/interface/IHistoryStep.js.map +1 -1
  177. package/dist/interface/IHistoryStep.mjs +1 -1
  178. package/dist/interface/IHistoryStep.mjs.map +1 -1
  179. package/dist/interface/IOpenedLabel.js +1 -1
  180. package/dist/interface/IOpenedLabel.js.map +1 -1
  181. package/dist/interface/IOpenedLabel.mjs +1 -1
  182. package/dist/interface/IOpenedLabel.mjs.map +1 -1
  183. package/dist/interface/ISaveData.js +1 -1
  184. package/dist/interface/ISaveData.js.map +1 -1
  185. package/dist/interface/ISaveData.mjs +1 -1
  186. package/dist/interface/ISaveData.mjs.map +1 -1
  187. package/dist/interface/ITicker.js +1 -1
  188. package/dist/interface/ITicker.js.map +1 -1
  189. package/dist/interface/ITicker.mjs +1 -1
  190. package/dist/interface/ITicker.mjs.map +1 -1
  191. package/dist/interface/ITickersSteps.js +1 -1
  192. package/dist/interface/ITickersSteps.js.map +1 -1
  193. package/dist/interface/ITickersSteps.mjs +1 -1
  194. package/dist/interface/ITickersSteps.mjs.map +1 -1
  195. package/dist/interface/TickerHistory.js +1 -1
  196. package/dist/interface/TickerHistory.js.map +1 -1
  197. package/dist/interface/TickerHistory.mjs +1 -1
  198. package/dist/interface/TickerHistory.mjs.map +1 -1
  199. package/dist/interface/TickerProgrationType.js +1 -1
  200. package/dist/interface/TickerProgrationType.js.map +1 -1
  201. package/dist/interface/TickerProgrationType.mjs +1 -1
  202. package/dist/interface/TickerProgrationType.mjs.map +1 -1
  203. package/dist/interface/TickerTimeoutHistory.js +1 -1
  204. package/dist/interface/TickerTimeoutHistory.js.map +1 -1
  205. package/dist/interface/TickerTimeoutHistory.mjs +1 -1
  206. package/dist/interface/TickerTimeoutHistory.mjs.map +1 -1
  207. package/dist/interface/canvas/ICanvasBaseMemory.js +1 -1
  208. package/dist/interface/canvas/ICanvasBaseMemory.js.map +1 -1
  209. package/dist/interface/canvas/ICanvasBaseMemory.mjs +1 -1
  210. package/dist/interface/canvas/ICanvasBaseMemory.mjs.map +1 -1
  211. package/dist/interface/canvas/ICanvasContainerMemory.js +1 -1
  212. package/dist/interface/canvas/ICanvasContainerMemory.js.map +1 -1
  213. package/dist/interface/canvas/ICanvasContainerMemory.mjs +1 -1
  214. package/dist/interface/canvas/ICanvasContainerMemory.mjs.map +1 -1
  215. package/dist/interface/canvas/ICanvasImageMemory.js +1 -1
  216. package/dist/interface/canvas/ICanvasImageMemory.js.map +1 -1
  217. package/dist/interface/canvas/ICanvasImageMemory.mjs +1 -1
  218. package/dist/interface/canvas/ICanvasImageMemory.mjs.map +1 -1
  219. package/dist/interface/canvas/ICanvasSpriteMemory.js +1 -1
  220. package/dist/interface/canvas/ICanvasSpriteMemory.js.map +1 -1
  221. package/dist/interface/canvas/ICanvasSpriteMemory.mjs +1 -1
  222. package/dist/interface/canvas/ICanvasSpriteMemory.mjs.map +1 -1
  223. package/dist/interface/canvas/ICanvasTextTextMemory.js +1 -1
  224. package/dist/interface/canvas/ICanvasTextTextMemory.js.map +1 -1
  225. package/dist/interface/canvas/ICanvasTextTextMemory.mjs +1 -1
  226. package/dist/interface/canvas/ICanvasTextTextMemory.mjs.map +1 -1
  227. package/dist/interface/canvas/ITextureMemory.js +1 -1
  228. package/dist/interface/canvas/ITextureMemory.js.map +1 -1
  229. package/dist/interface/canvas/ITextureMemory.mjs +1 -1
  230. package/dist/interface/canvas/ITextureMemory.mjs.map +1 -1
  231. package/dist/interface/canvas/index.js +1 -1
  232. package/dist/interface/canvas/index.js.map +1 -1
  233. package/dist/interface/canvas/index.mjs +1 -1
  234. package/dist/interface/canvas/index.mjs.map +1 -1
  235. package/dist/interface/export/ExportedCanvas.js +1 -1
  236. package/dist/interface/export/ExportedCanvas.js.map +1 -1
  237. package/dist/interface/export/ExportedCanvas.mjs +1 -1
  238. package/dist/interface/export/ExportedCanvas.mjs.map +1 -1
  239. package/dist/interface/export/ExportedStep.js +1 -1
  240. package/dist/interface/export/ExportedStep.js.map +1 -1
  241. package/dist/interface/export/ExportedStep.mjs +1 -1
  242. package/dist/interface/export/ExportedStep.mjs.map +1 -1
  243. package/dist/interface/export/ExportedStorage.js +1 -1
  244. package/dist/interface/export/ExportedStorage.js.map +1 -1
  245. package/dist/interface/export/ExportedStorage.mjs +1 -1
  246. package/dist/interface/export/ExportedStorage.mjs.map +1 -1
  247. package/dist/interface/export/index.js +1 -1
  248. package/dist/interface/export/index.js.map +1 -1
  249. package/dist/interface/export/index.mjs +1 -1
  250. package/dist/interface/export/index.mjs.map +1 -1
  251. package/dist/interface/index.js +1 -1
  252. package/dist/interface/index.js.map +1 -1
  253. package/dist/interface/index.mjs +1 -1
  254. package/dist/interface/index.mjs.map +1 -1
  255. package/dist/labels/BaseCanvasElementTestLabel.js +917 -23
  256. package/dist/labels/BaseCanvasElementTestLabel.js.map +1 -1
  257. package/dist/labels/BaseCanvasElementTestLabel.mjs +917 -23
  258. package/dist/labels/BaseCanvasElementTestLabel.mjs.map +1 -1
  259. package/dist/labels/CanvasEventsTestLabel.js +19 -23
  260. package/dist/labels/CanvasEventsTestLabel.js.map +1 -1
  261. package/dist/labels/CanvasEventsTestLabel.mjs +19 -23
  262. package/dist/labels/CanvasEventsTestLabel.mjs.map +1 -1
  263. package/dist/labels/CustomTickerCanvasElementTestLabel.js +15 -18
  264. package/dist/labels/CustomTickerCanvasElementTestLabel.js.map +1 -1
  265. package/dist/labels/CustomTickerCanvasElementTestLabel.mjs +15 -18
  266. package/dist/labels/CustomTickerCanvasElementTestLabel.mjs.map +1 -1
  267. package/dist/labels/ImagesAnimationsTestLabel.js +15 -15
  268. package/dist/labels/ImagesAnimationsTestLabel.js.map +1 -1
  269. package/dist/labels/ImagesAnimationsTestLabel.mjs +15 -15
  270. package/dist/labels/ImagesAnimationsTestLabel.mjs.map +1 -1
  271. package/dist/labels/MarkdownTest.js +15 -15
  272. package/dist/labels/MarkdownTest.js.map +1 -1
  273. package/dist/labels/MarkdownTest.mjs +15 -15
  274. package/dist/labels/MarkdownTest.mjs.map +1 -1
  275. package/dist/labels/StartLabel.js +125 -27
  276. package/dist/labels/StartLabel.js.map +1 -1
  277. package/dist/labels/StartLabel.mjs +126 -28
  278. package/dist/labels/StartLabel.mjs.map +1 -1
  279. package/dist/labels/TestConstant.js +15 -15
  280. package/dist/labels/TestConstant.js.map +1 -1
  281. package/dist/labels/TestConstant.mjs +15 -15
  282. package/dist/labels/TestConstant.mjs.map +1 -1
  283. package/dist/labels/index.js +125 -27
  284. package/dist/labels/index.js.map +1 -1
  285. package/dist/labels/index.mjs +126 -28
  286. package/dist/labels/index.mjs.map +1 -1
  287. package/dist/managers/StepManager.js +15 -15
  288. package/dist/managers/StepManager.js.map +1 -1
  289. package/dist/managers/StepManager.mjs +15 -15
  290. package/dist/managers/StepManager.mjs.map +1 -1
  291. package/dist/managers/StorageManager.js +1 -1
  292. package/dist/managers/StorageManager.js.map +1 -1
  293. package/dist/managers/StorageManager.mjs +1 -1
  294. package/dist/managers/StorageManager.mjs.map +1 -1
  295. package/dist/managers/WindowManager.d.mts +1 -1
  296. package/dist/managers/WindowManager.d.ts +1 -1
  297. package/dist/managers/WindowManager.js +15 -15
  298. package/dist/managers/WindowManager.js.map +1 -1
  299. package/dist/managers/WindowManager.mjs +15 -15
  300. package/dist/managers/WindowManager.mjs.map +1 -1
  301. package/dist/managers/index.js +15 -15
  302. package/dist/managers/index.js.map +1 -1
  303. package/dist/managers/index.mjs +15 -15
  304. package/dist/managers/index.mjs.map +1 -1
  305. package/dist/override/StepLabelProps.js +1 -1
  306. package/dist/override/StepLabelProps.js.map +1 -1
  307. package/dist/override/StepLabelProps.mjs +1 -1
  308. package/dist/override/StepLabelProps.mjs.map +1 -1
  309. package/dist/override/StepLabelResult.js +1 -1
  310. package/dist/override/StepLabelResult.js.map +1 -1
  311. package/dist/override/StepLabelResult.mjs +1 -1
  312. package/dist/override/StepLabelResult.mjs.map +1 -1
  313. package/dist/override/index.js +1 -1
  314. package/dist/override/index.js.map +1 -1
  315. package/dist/override/index.mjs +1 -1
  316. package/dist/override/index.mjs.map +1 -1
  317. package/dist/types/CanvasElementTagType.js +1 -1
  318. package/dist/types/CanvasElementTagType.js.map +1 -1
  319. package/dist/types/CanvasElementTagType.mjs +1 -1
  320. package/dist/types/CanvasElementTagType.mjs.map +1 -1
  321. package/dist/types/CanvasEventNamesType.js +1 -1
  322. package/dist/types/CanvasEventNamesType.js.map +1 -1
  323. package/dist/types/CanvasEventNamesType.mjs +1 -1
  324. package/dist/types/CanvasEventNamesType.mjs.map +1 -1
  325. package/dist/types/ChoiceMenuOptionsType.js +1 -1
  326. package/dist/types/ChoiceMenuOptionsType.js.map +1 -1
  327. package/dist/types/ChoiceMenuOptionsType.mjs +1 -1
  328. package/dist/types/ChoiceMenuOptionsType.mjs.map +1 -1
  329. package/dist/types/CloseType.js +1 -1
  330. package/dist/types/CloseType.js.map +1 -1
  331. package/dist/types/CloseType.mjs +1 -1
  332. package/dist/types/CloseType.mjs.map +1 -1
  333. package/dist/types/EventIdType.js +1 -1
  334. package/dist/types/EventIdType.js.map +1 -1
  335. package/dist/types/EventIdType.mjs +1 -1
  336. package/dist/types/EventIdType.mjs.map +1 -1
  337. package/dist/types/HistoryChoiceMenuOption.js +1 -1
  338. package/dist/types/HistoryChoiceMenuOption.js.map +1 -1
  339. package/dist/types/HistoryChoiceMenuOption.mjs +1 -1
  340. package/dist/types/HistoryChoiceMenuOption.mjs.map +1 -1
  341. package/dist/types/LabelIdType.js +1 -1
  342. package/dist/types/LabelIdType.js.map +1 -1
  343. package/dist/types/LabelIdType.mjs +1 -1
  344. package/dist/types/LabelIdType.mjs.map +1 -1
  345. package/dist/types/LabelRunModeType.js +1 -1
  346. package/dist/types/LabelRunModeType.js.map +1 -1
  347. package/dist/types/LabelRunModeType.mjs +1 -1
  348. package/dist/types/LabelRunModeType.mjs.map +1 -1
  349. package/dist/types/PauseType.js +1 -1
  350. package/dist/types/PauseType.js.map +1 -1
  351. package/dist/types/PauseType.mjs +1 -1
  352. package/dist/types/PauseType.mjs.map +1 -1
  353. package/dist/types/RepeatType.js +1 -1
  354. package/dist/types/RepeatType.js.map +1 -1
  355. package/dist/types/RepeatType.mjs +1 -1
  356. package/dist/types/RepeatType.mjs.map +1 -1
  357. package/dist/types/StepHistoryDataType.js +1 -1
  358. package/dist/types/StepHistoryDataType.js.map +1 -1
  359. package/dist/types/StepHistoryDataType.mjs +1 -1
  360. package/dist/types/StepHistoryDataType.mjs.map +1 -1
  361. package/dist/types/StepLabelType.js +1 -1
  362. package/dist/types/StepLabelType.js.map +1 -1
  363. package/dist/types/StepLabelType.mjs +1 -1
  364. package/dist/types/StepLabelType.mjs.map +1 -1
  365. package/dist/types/StorageElementType.js +1 -1
  366. package/dist/types/StorageElementType.js.map +1 -1
  367. package/dist/types/StorageElementType.mjs +1 -1
  368. package/dist/types/StorageElementType.mjs.map +1 -1
  369. package/dist/types/TickerIdType.js +1 -1
  370. package/dist/types/TickerIdType.js.map +1 -1
  371. package/dist/types/TickerIdType.mjs +1 -1
  372. package/dist/types/TickerIdType.mjs.map +1 -1
  373. package/dist/types/index.js +1 -1
  374. package/dist/types/index.js.map +1 -1
  375. package/dist/types/index.mjs +1 -1
  376. package/dist/types/index.mjs.map +1 -1
  377. package/dist/types/ticker/FadeAlphaTickerProps.js +1 -1
  378. package/dist/types/ticker/FadeAlphaTickerProps.js.map +1 -1
  379. package/dist/types/ticker/FadeAlphaTickerProps.mjs +1 -1
  380. package/dist/types/ticker/FadeAlphaTickerProps.mjs.map +1 -1
  381. package/dist/types/ticker/MoveTickerProps.js +1 -1
  382. package/dist/types/ticker/MoveTickerProps.js.map +1 -1
  383. package/dist/types/ticker/MoveTickerProps.mjs +1 -1
  384. package/dist/types/ticker/MoveTickerProps.mjs.map +1 -1
  385. package/dist/types/ticker/RotateTickerProps.js +1 -1
  386. package/dist/types/ticker/RotateTickerProps.js.map +1 -1
  387. package/dist/types/ticker/RotateTickerProps.mjs +1 -1
  388. package/dist/types/ticker/RotateTickerProps.mjs.map +1 -1
  389. package/dist/types/ticker/TagToRemoveAfterType.js +1 -1
  390. package/dist/types/ticker/TagToRemoveAfterType.js.map +1 -1
  391. package/dist/types/ticker/TagToRemoveAfterType.mjs +1 -1
  392. package/dist/types/ticker/TagToRemoveAfterType.mjs.map +1 -1
  393. package/dist/types/ticker/ZoomTickerProps.js +1 -1
  394. package/dist/types/ticker/ZoomTickerProps.js.map +1 -1
  395. package/dist/types/ticker/ZoomTickerProps.mjs +1 -1
  396. package/dist/types/ticker/ZoomTickerProps.mjs.map +1 -1
  397. package/dist/types/ticker/index.js +1 -1
  398. package/dist/types/ticker/index.js.map +1 -1
  399. package/dist/types/ticker/index.mjs +1 -1
  400. package/dist/types/ticker/index.mjs.map +1 -1
  401. package/package.json +4 -4
  402. package/dist/labels/TickerTestLabel.d.mts +0 -9
  403. package/dist/labels/TickerTestLabel.d.ts +0 -9
  404. package/dist/labels/TickerTestLabel.js +0 -2675
  405. package/dist/labels/TickerTestLabel.js.map +0 -1
  406. package/dist/labels/TickerTestLabel.mjs +0 -2669
  407. package/dist/labels/TickerTestLabel.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/StepManager.ts","../../src/functions/StepLabelUtility.ts","../../src/classes/Label.ts","../../src/classes/CloseLabel.ts","../../src/classes/canvas/CanvasBase.ts","../../src/classes/canvas/CanvasContainer.ts","../../src/functions/CanvasUtility.ts","../../src/classes/canvas/CanvasImage.ts","../../src/functions/TextureUtility.ts","../../src/classes/canvas/CanvasSprite.ts","../../src/decorators/EventDecorator.ts","../../src/classes/canvas/CanvasText.ts","../../src/decorators/CanvasElementDecorator.ts","../../src/decorators/TickerDecorator.ts","../../src/types/CloseType.ts","../../src/classes/StoredClassModel.ts","../../src/decorators/LabelDecorator.ts","../../src/functions/DialogueUtility.ts","../../src/classes/ticker/FadeAlphaTicker.ts","../../src/classes/ticker/TickerBase.ts","../../src/classes/ticker/MoveTicker.ts","../../src/functions/TickerUtility.ts","../../src/classes/ticker/RotateTicker.ts","../../src/classes/ticker/ZoomTicker.ts","../../src/constants.ts","../../src/functions/ExportUtility.ts","../../src/functions/DiffUtility.ts","../../src/managers/StorageManager.ts","../../src/managers/WindowManager.ts","../../src/functions/EasterEgg.ts","../../src/types/ticker/TagToRemoveAfterType.ts","../../src/classes/CharacterBaseModel.ts"],"names":["Container","Sprite","tagToRemoveAfter","diff","index","sha1","tag","ticker"],"mappings":"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","sourcesContent":["import { diff } from \"deep-diff\"\nimport { DialogueBaseModel, Label } from \"../classes\"\nimport { ChoiceMenuOptionClose, IStoratedChoiceMenuOption } from \"../classes/ChoiceMenuOption\"\nimport newCloseLabel, { CLOSE_LABEL_ID } from \"../classes/CloseLabel\"\nimport { getLabelById } from \"../decorators/LabelDecorator\"\nimport { getChoiceMenuOptions, getDialogue } from \"../functions\"\nimport { restoreDeepDiffChanges } from \"../functions/DiffUtility\"\nimport { createExportableElement } from \"../functions/ExportUtility\"\nimport { getStepSha1 } from \"../functions/StepLabelUtility\"\nimport ExportedStep from \"../interface/export/ExportedStep\"\nimport IHistoryStep, { IHistoryStepData } from \"../interface/IHistoryStep\"\nimport IOpenedLabel from \"../interface/IOpenedLabel\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\"\nimport { StepLabelPropsType, StepLabelResultType, StepLabelType } from \"../types/StepLabelType\"\nimport GameStorageManager from \"./StorageManager\"\nimport GameWindowManager from \"./WindowManager\"\n\n/**\n * GameStepManager is a class that manages the steps and labels of the game.\n */\nexport default class GameStepManager {\n private constructor() { }\n /**\n * stepHistory is a list of label events and steps that occurred during the progression of the steps.\n */\n private static _stepsHistory: IHistoryStep[] = []\n static get stepsHistory() {\n return GameStepManager._stepsHistory\n }\n private static _lastStepIndex: number = 0\n /**\n * lastStepIndex is the last step index that occurred during the progression of the steps. **Not is the length of the stepsHistory - 1.**\n */\n static get lastStepIndex() {\n return GameStepManager._lastStepIndex\n }\n /**\n * Increase the last step index that occurred during the progression of the steps.\n */\n private static increaseLastStepIndex() {\n GameStepManager._lastStepIndex++\n }\n private static _openedLabels: IOpenedLabel[] = []\n static get openedLabels() {\n return GameStepManager._openedLabels\n }\n /**\n * currentLabelId is the current label id that occurred during the progression of the steps.\n */\n private static get currentLabelId(): LabelIdType | undefined {\n if (GameStepManager._openedLabels.length > 0) {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n return item.label\n }\n return undefined\n }\n /**\n * currentLabel is the current label that occurred during the progression of the steps.\n */\n static get currentLabel(): Label | undefined {\n if (GameStepManager.currentLabelId) {\n return getLabelById(GameStepManager.currentLabelId)\n }\n }\n private static get currentLabelStepIndex(): number | null {\n if (GameStepManager._openedLabels.length > 0) {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n return item.currentStepIndex\n }\n return null\n }\n /**\n * lastHistoryStep is the last history step that occurred during the progression of the steps.\n */\n private static get lastHistoryStep(): IHistoryStep | null {\n if (GameStepManager._stepsHistory.length > 0) {\n return GameStepManager._stepsHistory[GameStepManager._stepsHistory.length - 1]\n }\n return null\n }\n private static _originalStepData: IHistoryStepData | undefined = undefined\n private static get originalStepData(): IHistoryStepData {\n if (!GameStepManager._originalStepData) {\n return {\n path: \"\",\n storage: {},\n canvas: {\n childrenTagsOrder: [],\n currentElements: {},\n currentTickers: {},\n currentTickersSteps: {},\n },\n labelIndex: -1,\n openedLabels: [],\n }\n }\n return createExportableElement(GameStepManager._originalStepData)\n }\n private static set originalStepData(value: IHistoryStepData) {\n GameStepManager._originalStepData = createExportableElement(value)\n }\n\n /* Edit History Methods */\n\n /**\n * Add a label to the history.\n * @param label The label to add to the history.\n */\n private static addStepHistory(step: StepLabelType<any>, choiseMade?: number) {\n let stepHistory: StepHistoryDataType = getStepSha1(step)\n let historyStep: IHistoryStepData = {\n path: window.location.pathname,\n storage: GameStorageManager.export(),\n canvas: GameWindowManager.export(),\n labelIndex: GameStepManager.currentLabelStepIndex || 0,\n openedLabels: createExportableElement(GameStepManager._openedLabels),\n }\n if (GameStepManager.originalStepData) {\n if (GameStepManager.originalStepData.openedLabels.length === historyStep.openedLabels.length) {\n try {\n let lastStepDataOpenedLabelsString = JSON.stringify(GameStepManager.originalStepData.openedLabels)\n let historyStepOpenedLabelsString = JSON.stringify(historyStep.openedLabels)\n if (\n lastStepDataOpenedLabelsString === historyStepOpenedLabelsString &&\n GameStepManager.originalStepData.path === historyStep.path &&\n GameStepManager.originalStepData.labelIndex === historyStep.labelIndex\n ) {\n return\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error comparing openedLabels\", e)\n }\n }\n }\n let data = diff(GameStepManager.originalStepData, historyStep)\n if (data) {\n let dialoge: DialogueBaseModel | undefined = undefined\n let requiredChoices: IStoratedChoiceMenuOption[] | undefined = undefined\n if (GameStorageManager.getVariable<number>(GameStorageManager.keysSystem.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY) === GameStepManager.lastStepIndex) {\n dialoge = getDialogue()\n }\n if (GameStorageManager.getVariable<number>(GameStorageManager.keysSystem.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY) === GameStepManager.lastStepIndex) {\n requiredChoices = GameStorageManager.getVariable<IStoratedChoiceMenuOption[]>(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY)\n }\n GameStepManager._stepsHistory.push({\n diff: data,\n currentLabel: GameStepManager.currentLabelId,\n dialoge: dialoge,\n choices: requiredChoices,\n stepSha1: stepHistory,\n index: GameStepManager.lastStepIndex,\n choiceIndexMade: choiseMade\n })\n GameStepManager.originalStepData = historyStep\n }\n GameStepManager.increaseLastStepIndex()\n }\n /**\n * Add a label to the history.\n * @param label The label to add to the history.\n */\n private static pushNewLabel(label: LabelIdType) {\n let currentLabel = getLabelById(label)\n if (!currentLabel) {\n throw new Error(`[Pixi'VN] Label ${label} not found`)\n }\n GameStepManager._openedLabels.push({\n label: label,\n currentStepIndex: 0,\n })\n }\n /**\n * Close the current label and add it to the history.\n * @returns \n */\n static closeCurrentLabel() {\n if (!GameStepManager.currentLabelId) {\n console.warn(\"[Pixi'VN] No label to close\")\n return\n }\n if (!GameStepManager.currentLabel) {\n console.error(\"[Pixi'VN] currentLabel not found\")\n return\n }\n GameStepManager._openedLabels.pop()\n }\n /**\n * Close all labels and add them to the history. **Attention: This method can cause an unhandled game ending.**\n */\n static closeAllLabels() {\n while (GameStepManager._openedLabels.length > 0) {\n GameStepManager.closeCurrentLabel()\n }\n }\n /**\n * Increase the current step index of the current label.\n */\n private static increaseCurrentStepIndex() {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1] = {\n ...item,\n currentStepIndex: item.currentStepIndex + 1,\n }\n }\n private static restorLastLabelList() {\n GameStepManager._openedLabels = GameStepManager.originalStepData.openedLabels\n }\n\n /* Run Methods */\n\n static get canGoNext(): boolean {\n let options = getChoiceMenuOptions()\n if (options && options.length > 0) {\n return false\n }\n return true\n }\n /**\n * Execute the next step and add it to the history.\n * @param props The props to pass to the step.\n * @param choiseMade The index of the choise made by the player. (This params is used in the choice menu)\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * function nextOnClick() {\n * setLoading(true)\n * GameStepManager.goNext(yourParams)\n * .then((result) => {\n * setUpdate((p) => p + 1)\n * setLoading(false)\n * if (result) {\n * // your code\n * }\n * })\n * .catch((e) => {\n * setLoading(false)\n * console.error(e)\n * })\n * }\n * ```\n */\n public static async goNext(props: StepLabelPropsType, choiseMade?: number): Promise<StepLabelResultType> {\n if (!GameStepManager.canGoNext) {\n console.warn(\"[Pixi'VN] The player must make a choice\")\n return\n }\n GameStepManager.increaseCurrentStepIndex()\n return await GameStepManager.runCurrentStep(props, choiseMade)\n }\n /**\n * Execute the current step and add it to the history.\n * @param props The props to pass to the step.\n * @param choiseMade The choise made by the player.\n * @returns StepLabelResultType or undefined.\n */\n private static async runCurrentStep<T extends {}>(props: StepLabelPropsType<T>, choiseMade?: number): Promise<StepLabelResultType> {\n if (GameStepManager.currentLabelId) {\n let currentLabelStepIndex = GameStepManager.currentLabelStepIndex\n if (currentLabelStepIndex === null) {\n console.error(\"[Pixi'VN] currentLabelStepIndex is null\")\n return\n }\n let currentLabel = GameStepManager.currentLabel as Label<T> | undefined\n if (!currentLabel) {\n console.error(\"[Pixi'VN] currentLabel not found\")\n return\n }\n if (currentLabel.steps.length > currentLabelStepIndex) {\n let step = currentLabel.steps[currentLabelStepIndex]\n let result = await step(props)\n GameStepManager.addStepHistory(step, choiseMade)\n return result\n }\n else if (GameStepManager.openedLabels.length > 1) {\n GameStepManager.closeCurrentLabel()\n return await GameStepManager.goNext(props, choiseMade)\n }\n else {\n GameStepManager.restorLastLabelList()\n console.error(\"[Pixi'VN] The end of the game is not managed, so the game is blocked. Read this documentation to know how to manage the end of the game: https://pixi-vn.web.app/start/labels.html#how-manage-the-end-of-the-game\")\n return\n }\n }\n }\n /**\n * Execute the label and add it to the history. (It's similar to Ren'Py's call function)\n * @param label The label to execute or the id of the label\n * @param props The props to pass to the label.\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.callLabel(startLabel, yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n * @example\n * ```typescript\n * // if you use it in a step label you should return the result.\n * return GameStepManager.callLabel(startLabel).then((result) => {\n * return result\n * })\n * ```\n */\n public static async callLabel<T extends {} = {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n let choiseMade: number | undefined = undefined\n let labelId: LabelIdType\n if (typeof label === 'string') {\n labelId = label\n }\n else {\n labelId = label.id\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n }\n try {\n if (labelId === CLOSE_LABEL_ID) {\n let closeCurrentLabel = newCloseLabel<T>(choiseMade)\n let choice: ChoiceMenuOptionClose<T> = {\n label: closeCurrentLabel,\n text: \"\",\n closeCurrentLabel: false,\n type: \"close\",\n props: {},\n }\n return GameStepManager.closeChoiceMenu(choice, props)\n }\n let tempLabel = getLabelById<Label<T>>(labelId)\n if (!tempLabel) {\n throw new Error(`[Pixi'VN] Label ${labelId} not found`)\n }\n GameStepManager.pushNewLabel(tempLabel.id)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error calling label\", e)\n return\n }\n return await GameStepManager.runCurrentStep<T>(props, choiseMade)\n }\n /**\n * Execute the label, close the current label, execute the new label and add the new label to the history. (It's similar to Ren'Py's jump function)\n * @param label The label to execute.\n * @param props The props to pass to the label or the id of the label\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.jumpLabel(startLabel, yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n * @example\n * ```typescript\n * // if you use it in a step label you should return the result.\n * return GameStepManager.jumpLabel(startLabel).then((result) => {\n * return result\n * })\n * ```\n */\n public static async jumpLabel<T extends {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n GameStepManager.closeCurrentLabel()\n let choiseMade: number | undefined = undefined\n let labelId: LabelIdType\n if (typeof label === 'string') {\n labelId = label\n }\n else {\n labelId = label.id\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n }\n try {\n if (labelId === CLOSE_LABEL_ID) {\n let closeCurrentLabel = newCloseLabel<T>(choiseMade)\n let choice: ChoiceMenuOptionClose<T> = {\n label: closeCurrentLabel,\n text: \"\",\n closeCurrentLabel: false,\n type: \"close\",\n props: {},\n }\n return GameStepManager.closeChoiceMenu<T>(choice, props)\n }\n let tempLabel = getLabelById<Label<T>>(labelId)\n if (!tempLabel) {\n throw new Error(`[Pixi'VN] Label ${labelId} not found`)\n }\n GameStepManager.pushNewLabel(tempLabel.id)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error jumping label\", e)\n return\n }\n return await GameStepManager.runCurrentStep<T>(props, choiseMade)\n }\n /**\n * When the player is in a choice menu, can use this function to exit to the choice menu.\n * @param choice\n * @param props\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.closeChoiceMenu(yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n */\n public static async closeChoiceMenu<T extends {} = {}>(choice: ChoiceMenuOptionClose<T>, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n let label: Label<T> = choice.label\n let choiseMade: number | undefined = undefined\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n if (choice.closeCurrentLabel) {\n GameStepManager.closeCurrentLabel()\n }\n return GameStepManager.goNext(props, choiseMade)\n }\n\n /* After Update Methods */\n\n // /**\n // * After the update or code edit, some steps or labels may no longer match.\n // * - In case of step mismatch, the game will be updated to the last matching step.\n // * - In case of label mismatch, the game gives an error.\n // * @returns \n // */\n // private static afterUpdate() {\n // // TODO: implement\n // if (!GameStepManager.currentLabel) {\n // // TODO: implement\n // return\n // }\n // let currentLabel = getLabelInstanceByClassName(GameStepManager.currentLabel)\n // if (!currentLabel) {\n // console.error(\"Label not found\")\n // return\n // }\n // let oldSteps = GameStepManager.stepsAfterLastHistoryLabel\n // let currentStepIndex = currentLabel.getCorrespondingStepsNumber(oldSteps)\n // let stepToRemove = oldSteps.length - currentStepIndex\n // GameStepManager.removeLastHistoryNodes(stepToRemove)\n // GameStepManager.loadLastStep()\n // }\n // private static loadLastStep() {\n // // TODO: implement\n // }\n // /**\n // * Remove a number of items from the last of the history.\n // * @param itemNumber The number of items to remove from the last of the history.\n // */\n // private static removeLastHistoryNodes(itemNumber: number) {\n // // TODO: implement\n // for (let i = 0; i < itemNumber; i++) {\n // GameStepManager._stepsHistory.pop()\n // }\n // }\n // /**\n // * stepsAfterLastHistoryLabel is a list of steps that occurred after the last history label.\n // */\n // private static get stepsAfterLastHistoryLabel(): StepHistoryDataType[] {\n // let length = GameStepManager._stepsHistory.length\n // let steps: StepHistoryDataType[] = []\n // for (let i = length - 1; i >= 0; i--) {\n // let element = GameStepManager._stepsHistory[i]\n // if (typeof element === \"object\" && \"stepSha1\" in element) {\n // steps.push(element.stepSha1)\n // }\n // else {\n // break\n // }\n // }\n\n // steps = steps.reverse()\n // return steps\n // }\n\n /* Go Back & Refresh Methods */\n\n /**\n * Go back to the last step and add it to the history.\n * @param navigate The navigate function.\n * @param steps The number of steps to go back.\n * @returns \n * @example\n * ```typescript\n * export function goBack(navigate: (path: string) => void, afterBack?: () => void) {\n * GameStepManager.goBack(navigate)\n * afterBack && afterBack()\n * }\n * ```\n */\n public static goBack(navigate: (path: string) => void, steps: number = 1) {\n if (steps <= 0) {\n console.warn(\"[Pixi'VN] Steps must be greater than 0\")\n return\n }\n if (GameStepManager._stepsHistory.length <= 1) {\n console.warn(\"[Pixi'VN] No steps to go back\")\n return\n }\n let restoredStep = GameStepManager.goBackInternal(steps, GameStepManager.originalStepData)\n if (restoredStep) {\n GameStepManager._originalStepData = restoredStep\n GameStepManager._openedLabels = createExportableElement(restoredStep.openedLabels)\n GameStorageManager.import(createExportableElement(restoredStep.storage))\n GameWindowManager.import(createExportableElement(restoredStep.canvas))\n navigate(restoredStep.path)\n }\n else {\n console.error(\"[Pixi'VN] Error going back\")\n }\n }\n private static goBackInternal(steps: number, restoredStep: IHistoryStepData): IHistoryStepData {\n if (steps <= 0) {\n return restoredStep\n }\n if (GameStepManager._stepsHistory.length == 0) {\n return restoredStep\n }\n let lastHistoryStep = GameStepManager.lastHistoryStep\n if (lastHistoryStep) {\n try {\n let result = restoreDeepDiffChanges(restoredStep, lastHistoryStep.diff)\n GameStepManager._lastStepIndex = lastHistoryStep.index\n GameStepManager._stepsHistory.pop()\n return GameStepManager.goBackInternal(steps - 1, result)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error applying diff\", e)\n return restoredStep\n }\n }\n else {\n return restoredStep\n }\n }\n\n /**\n * Return true if it is possible to go back.\n */\n public static get canGoBack(): boolean {\n return GameStepManager._stepsHistory.length > 1\n }\n\n /**\n * Add a label to the history.\n */\n public static clear() {\n GameStepManager._stepsHistory = []\n GameStepManager._openedLabels = []\n }\n\n /* Export and Import Methods */\n\n /**\n * Export the history to a JSON string.\n * @returns The history in a JSON string.\n */\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n /**\n * Export the history to an object.\n * @returns The history in an object.\n */\n public static export(): ExportedStep {\n return {\n stepsHistory: GameStepManager._stepsHistory,\n openedLabels: GameStepManager._openedLabels,\n lastStepIndex: GameStepManager._lastStepIndex,\n originalStepData: GameStepManager._originalStepData,\n }\n }\n /**\n * Import the history from a JSON string.\n * @param dataString The history in a JSON string.\n */\n public static importJson(dataString: string) {\n GameStepManager.import(JSON.parse(dataString))\n }\n /**\n * Import the history from an object.\n * @param data The history in an object.\n */\n public static import(data: object) {\n GameStepManager.clear()\n try {\n if (data.hasOwnProperty(\"stepsHistory\")) {\n GameStepManager._stepsHistory = (data as ExportedStep)[\"stepsHistory\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import stepsHistory data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"openedLabels\")) {\n GameStepManager._openedLabels = (data as ExportedStep)[\"openedLabels\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import openedLabels data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"lastStepIndex\")) {\n GameStepManager._lastStepIndex = (data as ExportedStep)[\"lastStepIndex\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import lastStepIndex data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"originalStepData\")) {\n GameStepManager._originalStepData = (data as ExportedStep)[\"originalStepData\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import originalStepData data, so will be ignored\")\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","import sha1 from 'crypto-js/sha1';\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\";\nimport { StepLabelType } from \"../types/StepLabelType\";\n\n/**\n * Convert StepLabel to StepHistoryData\n * @param step\n * @returns\n */\nexport function getStepSha1(step: StepLabelType): StepHistoryDataType {\n let sha1String = sha1(step.toString().toLocaleLowerCase())\n return sha1String.toString()\n}\n/**\n * Check if two steps are equal\n * @param step1\n * @param step2\n * @returns\n */\nexport function checkIfStepsIsEqual(step1: StepHistoryDataType | StepLabelType<any>, step2: StepHistoryDataType | StepLabelType<any>): boolean {\n return step1 === step2\n}\n","import { getLabelById } from \"../decorators\"\nimport { checkIfStepsIsEqual } from \"../functions/StepLabelUtility\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\"\nimport { StepLabelType } from \"../types/StepLabelType\"\n\n/**\n * Label is a class that contains a list of steps, which will be performed as the game continues.\n * For Ren'py this is the equivalent of a label.\n * @example\n * ```typescript\n * const START_LABEL_ID = \"StartLabel\"\n * \n * export const startLabel = newLabel(START_LABEL_ID,\n * [\n * (props) => {\n * GameWindowManager.clear()\n * setDialogue({ character: liam, text: \"Which test do you want to perform?\" })\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Events Test\", eventsTestLabel),\n * new ChoiceMenuOption(\"Show Image Test\", showImageTest),\n * ])\n * },\n * (props) => GameStepManager.jumpLabel(START_LABEL_ID, props),\n * ]\n * )\n * \n * GameStepManager.callLabel(StartLabel)\n * ```\n */\nexport default class Label<T extends {} = {}> {\n /**\n * @param id is the id of the label\n * @param steps is the list of steps that the label will perform\n * @param onStepRun is a function that will be executed before any step is executed, is useful for example to make sure all images used have been cached\n * @param choiseIndex is the index of the choice that the label will perform\n */\n constructor(id: LabelIdType, steps: StepLabelType<T>[] | (() => StepLabelType<T>[]), onStepRun?: () => void | Promise<void>, choiseIndex?: number) {\n this._id = id\n this._steps = steps\n this._onStepRun = onStepRun\n this._choiseIndex = choiseIndex\n }\n\n private _id: LabelIdType\n /**\n * Get the id of the label. This variable is used in the system to get the label by id, {@link getLabelById}\n */\n public get id(): LabelIdType {\n return this._id\n }\n\n private _steps: StepLabelType<T>[] | (() => StepLabelType<T>[])\n /**\n * Get the steps of the label.\n * This class should be extended and the steps method should be overridden.\n * Every time you update this list will also be updated when the other game versions load.\n */\n public get steps(): StepLabelType<T>[] {\n if (typeof this._steps === \"function\") {\n return this._steps()\n }\n return this._steps\n }\n\n /**\n * Get the corresponding steps number\n * @param externalSteps\n * @returns Numer of corresponding steps, for example, if externalSteps is [ABC, DEF, GHI] and the steps of the label is [ABC, GHT], the result will be 1\n */\n public getCorrespondingStepsNumber(externalSteps: StepHistoryDataType[] | StepLabelType[]): number {\n if (externalSteps.length === 0) {\n return 0\n }\n let res: number = 0\n externalSteps.forEach((step, index) => {\n if (checkIfStepsIsEqual(step, this.steps[index])) {\n res = index\n }\n })\n return res\n }\n\n private _onStepRun: (() => void | Promise<void>) | undefined\n /**\n * Get the function that will be executed before any step is executed, is useful for example to make sure all images used have been cached\n * @returns Promise<void> or void\n * @example\n * ```typescript\n * newLabel(\"id\", [], () => {\n * Assets.load('path/to/image1.png')\n * Assets.load('path/to/image2.png')\n * })\n * ```\n */\n public get onStepRun(): (() => void | Promise<void>) | undefined {\n return this._onStepRun\n }\n\n private _choiseIndex: number | undefined\n public get choiseIndex(): number | undefined {\n return this._choiseIndex\n }\n}\n","import Label from \"./Label\"\n\nexport const CLOSE_LABEL_ID = \"__close-label-id__\"\n\n/**\n * CloseLabel is a label used for closing the menu.\n */\nexport default function newCloseLabel<T extends {} = {}>(choiseIndex?: number) { return new Label<T>(CLOSE_LABEL_ID, [], undefined, choiseIndex) }\n","import { Container } from \"pixi.js\";\nimport { canvasElementDecorator } from \"../../decorators\";\nimport { getCanvasElementInstanceById } from \"../../decorators/CanvasElementDecorator\";\nimport { ICanvasBaseMemory } from \"../../interface/canvas\";\n\n/**\n * This class is used to create a canvas element to add into a Pixi Application.\n * You can use GameWindowManager.addCanvasElement() to add this element into the application.\n * This class should be implemented and the memory method should be overridden.\n * You must use the {@link canvasElementDecorator} to register the canvas in the game.\n * In Ren'Py is a displayable.\n * @example\n * ```typescript\n * \\@canvasElementDecorator() // this is equivalent to canvasElementDecorator(\"CanvasExample\")\n * export class CanvasExample extends Container implements CanvasBase<ICanvasExampleMemory> {\n * get memory(): ICanvasExampleMemory {\n * return {\n * pixivnId: \"CanvasExample\",\n * // ... other properties\n * }\n * }\n * set memory(value: ICanvasExampleMemory) {\n * // ... set other properties\n * }\n * }\n * ```\n */\nexport default class CanvasBase<T2 extends ICanvasBaseMemory> extends Container {\n /**\n * This method return the memory of the canvas element.\n */\n get memory(): T2 { throw new Error(\"[Pixi'VN] The method CanvasBase.memory must be overridden\") }\n /**\n * This method set the memory of the canvas element.\n */\n set memory(_value: T2) { throw new Error(\"[Pixi'VN] The method CanvasBase.memory must be overridden\") }\n /**\n * Get the id of the canvas element. This variable is used in the system to get the canvas element by id, {@link getCanvasElementInstanceById}\n */\n pixivnId: string = \"canvas_element_id_not_set\"\n}\n","import { Container, ContainerOptions } from \"pixi.js\";\nimport { exportCanvasElement, importCanvasElement } from \"../../functions/CanvasUtility\";\nimport ICanvasContainerMemory from \"../../interface/canvas/ICanvasContainerMemory\";\nimport CanvasBase from \"./CanvasBase\";\n\nexport const CANVAS_CONTAINER_ID = \"CanvasContainer\"\n\n/**\n * This class is a extension of the [PIXI.Container class](https://pixijs.com/8.x/examples/basic/container), it has the same properties and methods, \n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const container = new CanvasContainer();\n * GameWindowManager.addCanvasElement(container);\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * for (let i = 0; i < 25; i++)\n * {\n * const bunny = new CanvasSprite(texture);\n * bunny.x = (i % 5) * 40;\n * bunny.y = Math.floor(i / 5) * 40;\n * container.addChild(bunny);\n * }\n * ```\n */\nexport default class CanvasContainer extends Container implements CanvasBase<ICanvasContainerMemory> {\n constructor(options?: ContainerOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId\n }\n pixivnId: string = CANVAS_CONTAINER_ID\n get memory(): ICanvasContainerMemory {\n let memory = getMemoryContainer(this)\n this.children.forEach(child => {\n memory.elements.push(exportCanvasElement(child as CanvasBase<any>))\n })\n return memory\n }\n set memory(value: ICanvasContainerMemory) {\n setMemoryContainer(this, value)\n value.elements.forEach(child => {\n this.addChild(importCanvasElement(child))\n })\n }\n}\n\nexport function getMemoryContainer<T extends Container>(element: T): ICanvasContainerMemory {\n let className = \"CanvasContainer\"\n if (element.hasOwnProperty(\"pixivnId\")) {\n className = (element as any).pixivnId\n }\n return {\n pixivnId: className,\n elements: [],\n\n width: element.width,\n height: element.height,\n\n isRenderGroup: element.isRenderGroup,\n blendMode: element.blendMode,\n tint: element.tint,\n alpha: element.alpha,\n angle: element.angle,\n renderable: element.renderable,\n rotation: element.rotation,\n scale: { x: element.scale.x, y: element.scale.y },\n pivot: { x: element.pivot.x, y: element.pivot.y },\n position: { x: element.position.x, y: element.position.y },\n skew: { x: element.skew.x, y: element.skew.y },\n visible: element.visible,\n culled: element.culled,\n x: element.x,\n y: element.y,\n boundsArea: element.boundsArea,\n\n cursor: element.cursor,\n eventMode: element.eventMode,\n interactive: element.interactive,\n interactiveChildren: element.interactiveChildren,\n hitArea: element.hitArea\n }\n}\n\nexport function setMemoryContainer<T extends Container>(element: T | Container, memory: ContainerOptions) {\n memory.width && (element.width = memory.width)\n memory.height && (element.height = memory.height)\n\n memory.isRenderGroup && (element.isRenderGroup = memory.isRenderGroup)\n memory.blendMode && (element.blendMode = memory.blendMode)\n memory.tint && (element.tint = memory.tint)\n memory.alpha && (element.alpha = memory.alpha)\n memory.angle && (element.angle = memory.angle)\n memory.renderable && (element.renderable = memory.renderable)\n memory.rotation && (element.rotation = memory.rotation)\n if (memory.scale) {\n if (typeof memory.scale === \"number\") {\n element.scale.set(memory.scale, memory.scale)\n }\n else {\n element.scale.set(memory.scale.x, memory.scale.y)\n }\n }\n if (memory.pivot) {\n if (typeof memory.pivot === \"number\") {\n element.pivot.set(memory.pivot, memory.pivot)\n }\n else {\n element.pivot.set(memory.pivot.x, memory.pivot.y)\n }\n }\n memory.position && (element.position.set(memory.position.x, memory.position.y))\n memory.skew && (element.skew.set(memory.skew.x, memory.skew.y))\n memory.visible && (element.visible = memory.visible)\n memory.culled && (element.culled = memory.culled)\n memory.x && (element.x = memory.x)\n memory.y && (element.y = memory.y)\n memory.boundsArea && (element.boundsArea = memory.boundsArea)\n\n memory.cursor && (element.cursor = memory.cursor)\n memory.eventMode && (element.eventMode = memory.eventMode)\n memory.interactive && (element.interactive = memory.interactive)\n memory.interactiveChildren && (element.interactiveChildren = memory.interactiveChildren)\n memory.hitArea && (element.hitArea = memory.hitArea)\n}\n","import { Texture } from \"pixi.js\";\nimport { CanvasBase } from \"../classes/canvas\";\nimport { getCanvasElementInstanceById } from \"../decorators/CanvasElementDecorator\";\nimport { ICanvasBaseMemory, ITextureMemory } from \"../interface/canvas\";\n\n/**\n * Get the memory object of the PixiJS texture\n * @param texture PixiJS Texture object\n * @returns Memory object of the texture\n */\nexport function getTextureMemory(texture: Texture): ITextureMemory {\n let sourceTexture = texture.source\n let textureMemory: ITextureMemory = {\n image: sourceTexture.label\n }\n return textureMemory\n}\n\n/**\n * Export a Canvas element to a memory object\n * @param element Canvas element\n * @returns Memory object of the canvas\n */\nexport function exportCanvasElement<T extends CanvasBase<any>>(\n element: T,\n): ICanvasBaseMemory {\n return element.memory\n}\n\n/**\n * Import a Canvas element from a memory object\n * @param memory Memory object of the canvas\n * @returns Canvas element\n */\nexport function importCanvasElement<T extends CanvasBase<any>>(\n memory: ICanvasBaseMemory,\n): T {\n let element = getCanvasElementInstanceById<T>(memory.pixivnId)\n if (element) {\n element.memory = memory\n }\n else {\n throw new Error(\"[Pixi'VN] The element \" + memory.pixivnId + \" could not be created\")\n }\n\n return element\n}\n","import { Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { addImage, loadImage, showWithDissolveTransition } from \"../../functions\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasImageMemory from \"../../interface/canvas/ICanvasImageMemory\";\nimport CanvasSprite, { getMemorySprite, setMemorySprite } from \"./CanvasSprite\";\n\nexport const CANVAS_IMAGE_ID = \"CanvasImage\"\n\n/**\n * This class is a extension of the CanvasSprite class, it has the same properties and methods,\n * but it has some features that make texture management easier.\n * You need to use CanvasImage.load() to show the image in the canvas.\n * This class is used for functions like {@link addImage}, {@link loadImage} and {@link showWithDissolveTransition}.\n * @example\n * ```typescript\n * let alien = new CanvasImage({\n * anchor: { x: 0.5, y: 0.5 },\n * x: 100,\n * y: 100,\n * }, 'https://pixijs.com/assets/eggHead.png')\n * await alien.load()\n * GameWindowManager.addCanvasElement(\"alien\", alien)\n * ```\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * alien.x = 100\n * alien.y = 100\n * await alien.load()\n * ```\n */\nexport default class CanvasImage extends CanvasSprite<ICanvasImageMemory> {\n pixivnId: string = CANVAS_IMAGE_ID\n constructor(options?: SpriteOptions | Texture | undefined, imageLink?: string) {\n super(options)\n if (imageLink) {\n this.imageLink = imageLink\n }\n }\n override get memory(): ICanvasImageMemory {\n return {\n ...getMemorySprite(this),\n pixivnId: this.pixivnId,\n imageLink: this.imageLink,\n }\n }\n override set memory(memory: ICanvasImageMemory) {\n setMemorySprite(this, memory)\n this.imageLink = memory.imageLink\n }\n imageLink: string = \"\"\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean) {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasImage()\n mySprite.texture = sprite.texture\n return mySprite\n }\n /** \n * Load the image from the link and set the texture of the sprite.\n * @param image The link of the image. If it is not set, it will use the imageLink property.\n * @returns A promise that resolves when the image is loaded.\n */\n async load(image?: string) {\n if (!image) {\n image = this.imageLink\n }\n return getTexture(this.imageLink)\n .then((texture) => {\n if (texture) {\n this.texture = texture\n }\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error into CanvasImage.load()\", e)\n })\n }\n}\n","import { Assets, TextStyle, TextStyleOptions, Texture } from 'pixi.js';\n\n/**\n * Get a texture from a url.\n * @param imageUrl is the url of the image.\n * @returns the texture of the image, or a text with the error.\n */\nexport async function getTexture(imageUrl: string): Promise<Texture | void> {\n if (Assets.cache.has(imageUrl)) {\n return Assets.get(imageUrl)\n }\n return Assets.load(imageUrl)\n .then((texture) => {\n if (!texture) {\n console.error(\"[Pixi'VN] Texture not found\", imageUrl)\n return\n }\n // if texture not is a Texture, then it is a TextureResource\n if (!(texture instanceof Texture)) {\n console.error(\"[Pixi'VN] File not is a image\", imageUrl)\n return\n }\n\n return texture\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error loading image\", e)\n return\n })\n}\n\nexport function getTextStyle(style: TextStyle): TextStyleOptions {\n let fill = style.fill\n if (fill instanceof Object) {\n // TODO: FillGradient and FillPattern are not supported yet\n console.warn(\"[Pixi'VN] CanvasText.style.fill is a FillGradient or FillPattern, this is not supported yet.\", fill)\n fill = \"#00FF00\"\n }\n return {\n align: style.align,\n breakWords: style.breakWords,\n dropShadow: style.dropShadow,\n fill: fill,\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontStyle: style.fontStyle,\n fontVariant: style.fontVariant,\n fontWeight: style.fontWeight,\n leading: style.leading,\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n padding: style.padding,\n stroke: style.stroke,\n textBaseline: style.textBaseline,\n trim: style.trim,\n whiteSpace: style.whiteSpace,\n wordWrap: style.wordWrap,\n wordWrapWidth: style.wordWrapWidth,\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextureMemory } from \"../../functions/CanvasUtility\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasBaseMemory from \"../../interface/canvas/ICanvasBaseMemory\";\nimport ICanvasSpriteMemory, { ICanvasSpriteBaseMemory } from \"../../interface/canvas/ICanvasSpriteMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_SPRITE_ID = \"CanvasSprite\"\n\n/**\n * This class is a extension of the [PIXI.Sprite class](https://pixijs.com/8.x/examples/sprite/basic), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n *\n * sprite.anchor.set(0.5);\n * sprite.x = GameWindowManager.screen.width / 2;\n * sprite.y = GameWindowManager.screen.height / 2;\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\nexport default class CanvasSprite<Memory extends SpriteOptions & ICanvasBaseMemory = ICanvasSpriteMemory> extends Sprite implements CanvasBase<Memory | ICanvasSpriteMemory> {\n constructor(options?: SpriteOptions | Texture) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId\n }\n pixivnId: string = CANVAS_SPRITE_ID\n get memory(): Memory | ICanvasSpriteMemory {\n return getMemorySprite(this)\n }\n set memory(value: ICanvasSpriteMemory) {\n setMemorySprite(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasSprite> {\n * override fn(event: CanvasEventNamesType, sprite: CanvasSprite): void {\n * if (event === 'pointerdown') {\n * sprite.scale.x *= 1.25;\n * sprite.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * let sprite = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * await sprite.load()\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean): CanvasSprite<any> {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasSprite()\n mySprite.texture = sprite.texture\n return mySprite\n }\n}\n\nexport function getMemorySprite<T extends CanvasSprite<any>>(element: T | CanvasSprite<any>): ICanvasSpriteMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n textureImage: getTextureMemory((element as any).texture),\n anchor: { x: element.anchor.x, y: element.anchor.y },\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemorySprite<Memory extends ICanvasSpriteBaseMemory>(element: CanvasSprite<any>, memory: Memory) {\n setMemoryContainer(element, memory)\n getTexture(memory.textureImage.image).then((texture) => {\n if (texture) {\n element.texture = texture\n }\n })\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event, instance)\n }\n }\n}\n","import { CanvasEvent } from \"../classes\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CanvasEventNamesType } from \"../types\"\nimport { EventIdType } from \"../types/EventIdType\"\n\n/**\n * Canvas Event Register\n */\nexport const registeredEvents: { [name: EventIdType]: typeof CanvasEvent<CanvasEventNamesType> } = {}\n/**\n * Is a decorator that register a event in the game.\n * Is a required decorator for use the event in the game.\n * Thanks to this decoration the game has the possibility of updating the events to the latest modification and saving the game.\n * @param name is th identifier of the event, by default is the name of the class\n * @returns \n */\nexport default function eventDecorator(name?: EventIdType) {\n return function (target: typeof CanvasEvent<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredEvents[name]) {\n console.info(`[Pixi'VN] Event ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredEvents[name] = target\n }\n}\n\n/**\n * Get an event by the id.\n * @param eventId The id of the event.\n * @returns The event type.\n */\nexport function getEventTypeById<T = typeof CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n\n/**\n * Get an event instance by the id.\n * @param eventId The id of the event.\n * @returns The event instance.\n */\nexport function getEventInstanceById<T = CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n let event = new eventType()\n return event as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Text, TextOptions } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextStyle } from \"../../functions/TextureUtility\";\nimport ICanvasTextMemory from \"../../interface/canvas/ICanvasTextTextMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_TEXT_ID = \"CanvasText\"\n\n/**\n * This class is a extension of the [PIXI.Text class](https://pixijs.com/8.x/examples/text/pixi-text), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\nexport default class CanvasText extends Text implements CanvasBase<ICanvasTextMemory> {\n constructor(options?: TextOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId\n }\n pixivnId: string = CANVAS_TEXT_ID\n get memory(): ICanvasTextMemory {\n return getMemoryText(this)\n }\n set memory(value: ICanvasTextMemory) {\n setMemoryText(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasText> {\n * override fn(event: CanvasEventNamesType, text: CanvasText): void {\n * if (event === 'pointerdown') {\n * text.scale.x *= 1.25;\n * text.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n *\n * text.eventMode = 'static';\n * text.cursor = 'pointer';\n * text.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n}\n\nexport function getMemoryText<T extends CanvasText>(element: T | CanvasText): ICanvasTextMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n anchor: { x: element.anchor.x, y: element.anchor.y },\n text: element.text,\n resolution: element.resolution,\n style: getTextStyle(element.style),\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemoryText(element: CanvasText, memory: ICanvasTextMemory) {\n setMemoryContainer(element, memory)\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.text && (element.text = memory.text)\n memory.resolution && (element.resolution = memory.resolution)\n memory.style && (element.style = memory.style)\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event as CanvasEventNamesType, instance)\n }\n }\n}\n","import { CanvasContainer, CanvasImage, CanvasSprite, CanvasText } from \"../classes/canvas\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CANVAS_CONTAINER_ID } from \"../classes/canvas/CanvasContainer\"\nimport { CANVAS_IMAGE_ID } from \"../classes/canvas/CanvasImage\"\nimport { CANVAS_SPRITE_ID } from \"../classes/canvas/CanvasSprite\"\nimport { CANVAS_TEXT_ID } from \"../classes/canvas/CanvasText\"\nimport { CanvasElementTagType } from \"../types/CanvasElementTagType\"\n\nexport const registeredCanvasElement: { [name: CanvasElementTagType]: typeof CanvasBase<any> } = {}\n/**\n * Is a decorator that register a canvas element in the game.\n * @param name Name of the canvas element, by default it will use the class name. If the name is already registered, it will show a warning\n * @returns \n */\nexport default function canvasElementDecorator(name?: CanvasElementTagType) {\n return function (target: typeof CanvasBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredCanvasElement[name]) {\n console.warn(`[Pixi'VN] CanvasElement ${name} already registered`)\n }\n target.prototype.pixivnId = name\n registeredCanvasElement[name] = target\n }\n}\n\nexport function getCanvasElementTypeById<T extends typeof CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n\nexport function getCanvasElementInstanceById<T extends CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n if (canvasId === CANVAS_CONTAINER_ID) {\n eventType = CanvasContainer\n }\n else if (canvasId === CANVAS_IMAGE_ID) {\n eventType = CanvasImage\n }\n else if (canvasId === CANVAS_SPRITE_ID) {\n eventType = CanvasSprite\n }\n else if (canvasId === CANVAS_TEXT_ID) {\n eventType = CanvasText\n }\n }\n\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n let canvasElement = new eventType()\n return canvasElement as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n","import { UPDATE_PRIORITY } from \"pixi.js\"\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\"\nimport { TickerIdType } from \"../types/TickerIdType\"\n\n/**\n * A dictionary that contains all tickers registered and avvailable to be used.\n */\nexport const registeredTickers: { [name: TickerIdType]: typeof TickerBase } = {}\n/**\n * Is a decorator that register a ticker in the game.\n * Is a required decorator for use the ticker in the game.\n * Thanks to this decoration the game has the possibility of updating the tickers to the latest modification and saving the game.\n * @param name is th identifier of the label, by default is the name of the class\n * @returns \n */\nexport default function tickerDecorator(name?: TickerIdType) {\n return function (target: typeof TickerBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredTickers[name]) {\n console.info(`[Pixi'VN] Ticker ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredTickers[name] = target\n }\n}\n\n/**\n * Get a ticker instance by the id.\n * @param tickerId The id of the ticker.\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker. If is undefined, the ticker will be called every frame.\n * @param priority The priority of the ticker. If is undefined, the priority will be UPDATE_PRIORITY.NORMAL.\n * @returns The instance of the ticker\n */\nexport function geTickerInstanceById<TArgs extends TickerArgsType>(tickerId: TickerIdType, args: TArgs, duration?: number, priority?: UPDATE_PRIORITY): TickerBase<TArgs> | undefined {\n try {\n let ticker = registeredTickers[tickerId]\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n return new ticker(args, duration, priority)\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Ticker ${tickerId}`, e)\n return\n }\n}\n","export type CloseType = \"close\"\nexport const Close: CloseType = \"close\"","import { GameStorageManager } from \"../managers\"\n\n/**\n * StoredClassModel is a abstract class that contains the methods to store a class in the game.\n * I suggest you extend this class to create your own stored class.\n * @example\n * ```typescript\n * export class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n * constructor(id: string, props: CharacterBaseModelProps) {\n * super(\"___character___\", id)\n * this.defaultName = props.name\n * this.defaultSurname = props.surname\n * }\n * private defaultName: string = \"\"\n * get name(): string {\n * return this.getStorageProperty<string>(\"name\") || this.defaultName\n * }\n * set name(value: string) {\n * this.setStorageProperty<string>(\"name\", value)\n * }\n * private defaultSurname?: string\n * get surname(): string | undefined {\n * return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n * }\n * set surname(value: string | undefined) {\n * this.setStorageProperty<string>(\"surname\", value)\n * }\n * }\n * ```\n */\nexport default class StoredClassModel {\n /**\n * @param categoryId The id of the category. For example if you are storing a character class, you can use \"characters\" as categoryId. so all instances of the character class will be stored in the \"characters\" category.\n * @param id The id of instance of the class. This id must be unique for the category.\n */\n constructor(categoryId: string, id: string) {\n this.categoryId = categoryId\n this._id = id\n }\n private _id: string\n /**\n * Is id of the stored class. is unique for this class.\n */\n get id(): string {\n return this._id\n }\n private categoryId: string\n /**\n * Update a property in the storage.\n * @param propertyName The name of the property to set.\n * @param value The value to set. If is undefined, the property will be removed from the storage.\n */\n protected setStorageProperty<T>(propertyName: string, value: T | undefined): void {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (!storage) {\n storage = {}\n }\n // if storage not have a key with the id\n if (!storage.hasOwnProperty(this.id)) {\n storage[this.id] = {}\n }\n\n if (value === undefined || value === null) {\n if (storage[this.id].hasOwnProperty(propertyName)) {\n delete storage[this.id][propertyName]\n }\n }\n else {\n storage[this.id] = { ...storage[this.id], [propertyName]: value }\n }\n\n if (Object.keys(storage[this.id]).length === 0) {\n delete storage[this.id]\n }\n\n GameStorageManager.setVariable(this.categoryId, storage)\n }\n /**\n * Get a property from the storage.\n * @param propertyName The name of the property to get.\n * @returns The value of the property. If the property is not found, returns undefined.\n */\n protected getStorageProperty<T>(propertyName: string): T | undefined {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (storage && storage.hasOwnProperty(this.id) && storage[this.id].hasOwnProperty(propertyName)) {\n return storage[this.id][propertyName]\n }\n return undefined\n }\n}\n","import { Label } from \"../classes\"\nimport { StepLabelType } from \"../types\"\nimport { LabelIdType } from \"../types/LabelIdType\"\n\nexport const registeredLabels: { [key: LabelIdType]: Label<any> } = {}\n\n/**\n * Creates a new label and registers it in the system.\n * **This function must be called at least once at system startup to register the label, otherwise the system cannot be used.**\n * @param id The id of the label, it must be unique\n * @param steps The steps of the label\n * @param onStepRun is a function that will be executed before any step is executed, is useful for example to make sure all images used have been cached\n * @returns The created label\n */\nexport function newLabel<T extends {} = {}>(id: LabelIdType, steps: StepLabelType<T>[] | (() => StepLabelType<T>[]), onStepRun?: () => void | Promise<void>): Label<T> {\n if (registeredLabels[id]) {\n console.info(`[Pixi'VN] Label ${id} already exists, it will be overwritten`)\n }\n let label = new Label<T>(id, steps, onStepRun)\n registeredLabels[id] = label\n return label\n}\n\n/**\n * Gets a label by its id\n * @param id The id of the label\n * @returns The label or undefined if it does not exist\n */\nexport function getLabelById<T = Label<any>>(id: LabelIdType): T | undefined {\n let label = registeredLabels[id]\n if (!label) {\n console.error(`[Pixi'VN] Label ${id} not found`)\n return\n }\n return label as T\n}\n","import { CharacterBaseModel, DialogueBaseModel, Label } from \"../classes\";\nimport { ChoiceMenuOptionClose, IStoratedChoiceMenuOption } from \"../classes/ChoiceMenuOption\";\nimport newCloseLabel from \"../classes/CloseLabel\";\nimport { DialogueData } from \"../classes/DialogueBaseModel\";\nimport { getLabelById } from \"../decorators\";\nimport { DialogueHistory } from \"../interface\";\nimport { GameStepManager, GameStorageManager } from \"../managers\";\nimport { Close, HistoryChoiceMenuOption } from \"../types\";\nimport { ChoiceMenuOptionsType } from \"../types/ChoiceMenuOptionsType\";\n\n/**\n * Set the dialogue to be shown in the game\n * @param text Text of the dialogue\n * @example\n * ```typescript\n * setDialogue(\"Hello World\")\n * setDialogue({\n * character: \"character\",\n * text: \"Hello World\"\n * })\n * setDialogue(new DialogueBaseModel(\"Hello World\", character))\n * ```\n */\nexport function setDialogue<TCharacter extends CharacterBaseModel = CharacterBaseModel, TDialogue extends DialogueBaseModel = DialogueBaseModel>(props: {\n character: string | TCharacter,\n text: string,\n} | string | TDialogue): void {\n let text = ''\n let character: string | undefined = undefined\n let dialogue: TDialogue | DialogueBaseModel\n if (typeof props === 'string') {\n text = props\n dialogue = new DialogueBaseModel(text, character)\n }\n else if (!(props instanceof DialogueBaseModel)) {\n text = props.text\n if (props.character) {\n if (typeof props.character === 'string') {\n character = props.character\n }\n else {\n character = props.character.id\n }\n }\n dialogue = new DialogueBaseModel(text, character)\n }\n else {\n dialogue = props\n }\n\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY, dialogue as DialogueData)\n GameStorageManager.setVariable(GameStorageManager.keysSystem.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY, GameStepManager.lastStepIndex)\n}\n\n/**\n * Get the dialogue to be shown in the game\n * @returns Dialogue to be shown in the game\n */\nexport function getDialogue<T extends DialogueBaseModel = DialogueBaseModel>(): T | undefined {\n return GameStorageManager.getVariable<DialogueData>(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY) as T\n}\n\n/**\n * Clear the dialogue to be shown in the game\n */\nexport function clearDialogue(): void {\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY, undefined)\n}\n\n/**\n * Set the options to be shown in the game\n * @param options Options to be shown in the game\n * @example\n * ```typescript\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Events Test\", EventsTestLabel),\n * new ChoiceMenuOption(\"Show Image Test\", ShowImageTest, \"call\", { image: \"imageId\" }),\n * new ChoiceMenuOption(\"Ticker Test\", TickerTestLabel),\n * new ChoiceMenuOption(\"Tinting Test\", TintingTestLabel, \"jump\"),\n * new ChoiceMenuOption(\"Base Canvas Element Test Label\", BaseCanvasElementTestLabel)\n * ])\n * ```\n */\nexport function setChoiceMenuOptions<T extends {} = {}>(options: ChoiceMenuOptionsType<T>): void {\n let value: IStoratedChoiceMenuOption[] = options.map((option) => {\n if (option instanceof ChoiceMenuOptionClose) {\n return {\n text: option.text,\n type: Close,\n closeCurrentLabel: option.closeCurrentLabel,\n }\n }\n return {\n ...option,\n label: option.label.id,\n }\n })\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY, value)\n GameStorageManager.setVariable(GameStorageManager.keysSystem.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY, GameStepManager.lastStepIndex)\n}\n\n/**\n * Get the options to be shown in the game\n * @returns Options to be shown in the game\n */\nexport function getChoiceMenuOptions<TChoice extends ChoiceMenuOptionsType = ChoiceMenuOptionsType<{ [key: string | number | symbol]: any }>>(): TChoice | undefined {\n let d = GameStorageManager.getVariable<IStoratedChoiceMenuOption[]>(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY)\n if (d) {\n let options: ChoiceMenuOptionsType = []\n d.forEach((option, index) => {\n if (option.type === Close) {\n let itemLabel = newCloseLabel(index)\n options.push({\n text: option.text,\n label: itemLabel,\n type: Close,\n closeCurrentLabel: option.closeCurrentLabel,\n props: {},\n })\n return\n }\n let label = getLabelById(option.label)\n if (label) {\n let itemLabel = new Label(label.id, label.steps, label.onStepRun, index)\n options.push({\n ...option,\n label: itemLabel\n })\n }\n })\n return options as TChoice\n }\n return undefined\n}\n\n/**\n * Clear the options to be shown in the game\n */\nexport function clearChoiceMenuOptions(): void {\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY, undefined)\n}\n\n/**\n * Get the history of the dialogues\n * @returns the history of the dialogues\n */\nexport function getDialogueHistory<T extends DialogueBaseModel = DialogueBaseModel>(): DialogueHistory<T>[] {\n let list: DialogueHistory<T>[] = []\n GameStepManager.stepsHistory.forEach((step) => {\n let dialoge = step.dialoge\n let requiredChoices = step.choices\n if (\n list.length > 0 &&\n list[list.length - 1].choices &&\n !list[list.length - 1].playerMadeChoice &&\n step.currentLabel\n ) {\n let oldChoices = list[list.length - 1].choices\n if (oldChoices) {\n let choiceMade = false\n if (step.choiceIndexMade !== undefined && oldChoices.length > step.choiceIndexMade) {\n oldChoices[step.choiceIndexMade].isResponse = true\n choiceMade = true\n }\n list[list.length - 1].playerMadeChoice = choiceMade\n list[list.length - 1].choices = oldChoices\n }\n }\n if (dialoge || requiredChoices) {\n let choices: HistoryChoiceMenuOption[] | undefined = requiredChoices?.map((choice) => {\n return {\n text: choice.text,\n type: choice.type,\n isResponse: false\n }\n })\n list.push({\n dialoge: dialoge as T,\n playerMadeChoice: false,\n choices: choices,\n stepIndex: step.index\n })\n }\n })\n return list\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { GameWindowManager } from \"../../managers\";\nimport { FadeAlphaTickerProps } from \"../../types/ticker/FadeAlphaTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that fades the alpha of the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let bunny = addImage(\"bunny1\", \"https://pixijs.com/assets/eggHead.png\")\n * await bunny.load()\n * GameWindowManager.addCanvasElement(\"bunny\", bunny);\n * // ...\n * const ticker = new FadeAlphaTicker({\n * duration: 4, // 4 seconds\n * type: \"hide\",\n * }),\n * GameWindowManager.addTicker(\"bunny\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class FadeAlphaTicker extends TickerBase<FadeAlphaTickerProps> {\n override fn(\n ticker: Ticker,\n args: FadeAlphaTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let type = args.type === undefined ? \"hide\" : args.type\n let duration = args.duration === undefined ? 1 : args.duration\n let speed = 1 / (duration * 60)\n let limit = args.limit === undefined ? type === \"hide\" ? 0 : 1 : args.limit\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (type === \"hide\" && limit < 0) {\n limit = 0\n }\n if (type === \"show\" && limit > 1) {\n limit = 1\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (type === \"show\" && element.alpha < limit) {\n element.alpha += speed * ticker.deltaTime\n }\n else if (type === \"hide\" && element.alpha > limit) {\n element.alpha -= speed * ticker.deltaTime\n }\n if (type === \"show\" && element.alpha >= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n else if (type === \"hide\" && element.alpha <= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n }\n}\n","import { Ticker, UPDATE_PRIORITY } from \"pixi.js\"\nimport { tickerDecorator } from \"../../decorators\"\nimport { geTickerInstanceById } from \"../../decorators/TickerDecorator\"\nimport ITicker from \"../../interface/ITicker\"\nimport { GameWindowManager } from \"../../managers\"\nimport { StorageElementType } from \"../../types/StorageElementType\"\nimport { TickerIdType } from \"../../types/TickerIdType\"\n\nexport type TickerArgsType = { [id: string]: StorageElementType } | {\n tagToRemoveAfter?: string[] | string,\n [id: string]: StorageElementType\n}[]\n\n/**\n * A class is used to create a ticker element to add into a Pixi Application.\n * You can use GameWindowManager.addTicker() to add this element into the application.\n * This class should be extended and the fn method should be overridden.\n * You must use the {@link tickerDecorator} to register the ticker in the game.\n * In Ren'Py is a transform.\n * @example\n * ```typescript\n * \\@tickerDecorator() // this is equivalent to tickerDecorator(\"RotateTicker\")\n * export class RotateTicker extends TickerBase<{ speed?: number }> {\n * override fn(\n * t: Ticker, // the ticker that is calling this method\n * args: { // the arguments that you passed when you added the ticker\n * speed?: number,\n * },\n * tags: string[], // the tags of the canvas elements that are connected to this ticker\n * tickerId: string, // the id of the ticker. You can use this to get the ticker from the GameWindowManager.currentTickers\n * ): void {\n * let speed = args.speed === undefined ? 0.1 : args.speed\n * tags.forEach((tag) => {\n * let element = GameWindowManager.getCanvasElement(tag)\n * if (element && element instanceof Container) {\n * if (clockwise)\n * element.rotation += speed * t.deltaTime\n * else\n * element.rotation -= speed * t.deltaTime\n * }\n * })\n * }\n * }\n * ```\n */\nexport default class TickerBase<TArgs extends TickerArgsType> implements ITicker<TArgs> {\n /**\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker in seconds. If is undefined, the step will end only when the animation is finished (if the animation doesn't have a goal to reach then it won't finish). @default undefined\n * @param priority The priority of the ticker. @default UPDATE_PRIORITY.NORMAL\n */\n constructor(args: TArgs, duration?: number, priority?: UPDATE_PRIORITY) {\n this.args = args\n this.duration = duration\n this.priority = priority\n this.id = this.constructor.prototype.id\n }\n /**\n * Get the id of the ticker. This variable is used in the system to get the ticker by id, {@link geTickerInstanceById}\n */\n id: TickerIdType = 'ticker_id_not_set'\n args: TArgs\n duration?: number\n priority?: UPDATE_PRIORITY\n /**\n * The method that will be called every frame.\n * This method should be overridden and you can use GameWindowManager.addCanvasElement() to get the canvas element of the canvas, and edit them.\n * @param _ticker The ticker that is calling this method\n * @param _args The arguments that you passed when you added the ticker\n * @param _tags The tags of the canvas elements that are connected to this ticker\n * @param _tickerId The id of the ticker. You can use this to get the ticker from the {@link GameWindowManager.currentTickers}\n */\n fn(_ticker: Ticker, _args: TArgs, _tags: string | string[], _tickerId: string): void { throw new Error(\"[Pixi'VN] The method TickerBase.fn() must be overridden\") }\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { MoveTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that moves the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new MoveTicker({\n * speed: 0.1,\n * destination: { x: 100, y: 100 },\n * }),\n * ```\n */\n@tickerDecorator()\nexport default class MoveTicker extends TickerBase<MoveTickerProps> {\n override fn(\n ticker: Ticker,\n args: MoveTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 1\n let ySpeed = 1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = args.speed\n ySpeed = args.speed\n }\n else {\n xSpeed = args.speed.x\n ySpeed = args.speed.y\n }\n }\n xSpeed /= 60\n ySpeed /= 60\n let destination = args.destination\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n let xDistance = (destination.x - element.x) > 0 ? 1 : -1\n if (xDistance != 0) {\n element.x += xDistance * xSpeed * ticker.deltaTime\n let newDistance = destination.x - element.x\n if (xDistance < 0 && newDistance > 0 ||\n xDistance > 0 && newDistance < 0\n ) {\n element.x = destination.x\n }\n }\n let yDistance = (destination.y - element.y) > 0 ? 1 : -1\n if (yDistance != 0) {\n element.y += yDistance * ySpeed * ticker.deltaTime\n let newDistance = destination.y - element.y\n if (yDistance < 0 && newDistance > 0 ||\n yDistance > 0 && newDistance < 0\n ) {\n element.y = destination.y\n }\n }\n if (element.x == destination.x && element.y == destination.y) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression)\n }\n}\n","import { ITickerProgrationExponential, ITickerProgrationLinear, TickerProgrationType } from \"../interface/TickerProgrationType\";\n\n/**\n * This function updates the progression of the ticker.\n * For example, if the speed of the ticker is 0.1 and the progression is 0.01, then the speed will be 0.11.\n * @param args The arguments that are passed to the ticker\n * @param propertyName The property name that will be updated \n * @param progression The progression of the ticker\n * @returns \n */\nexport function updateTickerProgression<T extends {}>(args: T, propertyName: keyof T, progression: TickerProgrationType) {\n if (args[propertyName] === undefined\n || !progression\n || args[propertyName] === progression.limit\n ) {\n return\n }\n if (typeof args[propertyName] === \"number\") {\n if (progression.type === \"linear\") {\n (args as any)[propertyName] = getLinearProgression(args[propertyName], progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName] = getExponentialProgression(args[propertyName], progression)\n }\n }\n // args[propertyName] is { x: number, y: number }\n else if (\n args[propertyName] !== undefined &&\n typeof args[propertyName] === \"object\" &&\n (args as any)[propertyName].haveOwnProperty(\"x\") &&\n (args as any)[propertyName].haveOwnProperty(\"y\") &&\n typeof (args as any)[propertyName].x === \"number\" &&\n typeof (args as any)[propertyName].y === \"number\"\n ) {\n if (progression.type === \"linear\") {\n (args as any)[propertyName].x = getLinearProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getLinearProgression((args as any)[propertyName].y, progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName].x = getExponentialProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getExponentialProgression((args as any)[propertyName].y, progression)\n }\n }\n}\n\nfunction getLinearProgression(number: number, progression: ITickerProgrationLinear): number {\n if (progression.limit !== undefined) {\n if (number > progression.limit && progression.amt > 0) {\n return progression.limit\n }\n else if (number < progression.limit && progression.amt < 0) {\n return progression.limit\n }\n }\n return number + (progression.amt / 60)\n}\n\nfunction getExponentialProgression(number: number, progression: ITickerProgrationExponential): number {\n if (progression.limit !== undefined) {\n if (number > progression.limit && progression.percentage > 0) {\n return progression.limit\n }\n else if (number < progression.limit && progression.percentage < 0) {\n return progression.limit\n }\n }\n return number + number * progression.percentage\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { RotateTickerProps } from \"../../types/ticker/RotateTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that rotates the canvas element of the canvas. For centre rotation, set the anchor of the canvas element to 0.5.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new RotateTicker({\n * speed: 0.1,\n * clockwise: true,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class RotateTicker extends TickerBase<RotateTickerProps> {\n override fn(\n ticker: Ticker,\n args: RotateTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let speed = (args.speed === undefined ? 1 : args.speed) / 60\n let clockwise = args.clockwise === undefined ? true : args.clockwise\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (clockwise)\n element.rotation += speed * ticker.deltaTime\n else\n element.rotation -= speed * ticker.deltaTime\n if (speed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression)\n }\n}\n","import { Container, ContainerChild, Sprite, Ticker, UPDATE_PRIORITY } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { ZoomTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that zooms the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new ZoomTicker({\n * speed: 0.1,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class ZoomTicker extends TickerBase<ZoomTickerProps> {\n override fn(\n ticker: Ticker,\n args: ZoomTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 0.1\n let ySpeed = 0.1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = args.speed\n ySpeed = args.speed\n }\n else {\n xSpeed = args.speed.x\n ySpeed = args.speed.y\n }\n }\n xSpeed /= 60\n ySpeed /= 60\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n let type = args.type || \"zoom\"\n let xLimit = type === \"zoom\" ? Infinity : 0\n let yLimit = type === \"zoom\" ? Infinity : 0\n if (args.limit) {\n if (typeof args.limit === \"number\") {\n xLimit = args.limit\n yLimit = args.limit\n }\n else {\n xLimit = args.limit.x\n yLimit = args.limit.y\n }\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (\n type === \"zoom\"\n && (element.scale.x < xLimit || element.scale.y < yLimit)\n ) {\n element.scale.x += xSpeed * ticker.deltaTime\n element.scale.y += ySpeed * ticker.deltaTime\n }\n else if (\n type === \"unzoom\"\n && (element.scale.x > xLimit || element.scale.y > yLimit)\n ) {\n element.scale.x -= xSpeed * ticker.deltaTime\n element.scale.y -= ySpeed * ticker.deltaTime\n }\n if (type === \"zoom\") {\n if (element.scale.x > xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y > yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x >= xLimit && element.scale.y >= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n else if (type === \"unzoom\") {\n if (element.scale.x < xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y < yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x <= xLimit && element.scale.y <= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n if (xSpeed < 0.00001 && ySpeed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression)\n }\n\n onEndOfTicker<T extends Container = Container>(\n tag: string,\n tickerId: string,\n _element: T,\n tagToRemoveAfter: string[] | string,\n ): void {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n}\n\n\nexport class ZoomInOutTicker extends ZoomTicker {\n constructor(props: ZoomTickerProps, duration?: number, priority?: UPDATE_PRIORITY) {\n super(props, duration, priority)\n }\n override onEndOfTicker<T extends Container = Container<ContainerChild>>(tag: string, tickerId: string, element: T, tagToRemoveAfter: string[] | string): void {\n if (element.children.length > 0) {\n let elementChild = element.children[0]\n GameWindowManager.addCanvasElement(tag, elementChild as any)\n }\n super.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n}\n","import { PauseType, RepeatType } from \"./types\"\n\nexport const PIXIVN_VERSION = '0.6.2'\nexport const Repeat: RepeatType = \"repeat\"\n/**\n * Pause the tickers for a duration.\n * @param duration Duration in seconds\n * @returns The pause object\n */\nexport function Pause(duration: number): PauseType {\n return {\n type: \"pause\",\n duration: duration,\n }\n}\n","/**\n * This function is used to create a deep copy of the element\n * @param element The element to be copied\n * @returns The copied element\n */\nexport function createExportableElement<T>(element: T): T {\n try {\n let elementString = JSON.stringify(element)\n return JSON.parse(elementString)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error creating exportable element\", e)\n throw new Error(\"[Pixi'VN] Error creating exportable element\")\n }\n}\n","import deepDiff from \"deep-diff\"\nimport { createExportableElement } from \"./ExportUtility\"\n\nexport function restoreDeepDiffChanges<T extends object = object>(data: T, differences: deepDiff.Diff<T, T>[]): T {\n let result = createExportableElement(data)\n differences.forEach((diff) => {\n let dataToEdit: any = result\n if (diff.path && diff.path.length > 0) {\n diff.path.forEach((path, index) => {\n if (diff.path && index === diff.path.length - 1) {\n if (diff.kind === \"E\" || diff.kind === \"D\") {\n dataToEdit[path] = diff.lhs\n }\n else if (diff.kind === \"N\") {\n // if path is a number, dataToEdit is an array\n if (Number.isInteger(path)) {\n // remove index from array\n if (Array.isArray(dataToEdit)) {\n dataToEdit.splice(path, 1)\n }\n }\n // if path is a string, dataToEdit is an object\n else if (typeof path === \"string\") {\n // remove key from object\n delete dataToEdit[path]\n }\n }\n else if (diff.kind === \"A\") {\n let index = diff.index\n if (diff.item.kind === \"N\") {\n // remove index from array\n (dataToEdit[path] as any[]).splice(index, 1)\n }\n else if (diff.item.kind === \"E\" || diff.item.kind === \"D\") {\n // edit index in array\n (dataToEdit[path] as any[])[index] = diff.item.lhs\n }\n else if (diff.item.kind === \"A\") {\n console.warn(\"[Pixi'VN] Nested array found, skipping diff\", diff)\n }\n else {\n console.warn(\"[Pixi'VN] No array found, skipping diff\", diff)\n }\n }\n }\n else {\n dataToEdit = dataToEdit[path]\n }\n })\n }\n else {\n console.warn(\"[Pixi'VN] No path found, skipping diff\", diff)\n }\n })\n return result\n}","import { createExportableElement } from \"../functions/ExportUtility\"\nimport { ExportedStorage } from \"../interface/export\"\nimport { StorageElementType } from \"../types/StorageElementType\"\n\nexport default class GameStorageManager {\n private static storage: { [key: string]: StorageElementType } = {}\n private constructor() { }\n public static get keysSystem() {\n return {\n CURRENT_DIALOGUE_MEMORY_KEY: \"___current_dialogue_memory___\",\n LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY: \"___last_dialogue_added_in_step_memory___\",\n CURRENT_MENU_OPTIONS_MEMORY_KEY: \"___current_menu_options_memory___\",\n LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY: \"___last_menu_options_added_in_step_memory___\",\n CHARACTER_CATEGORY_KEY: \"___character___\",\n FLAGS_CATEGORY_KEY: \"___flags___\",\n }\n }\n /**\n * Set a variable in the storage\n * @param key The key of the variable\n * @param value The value of the variable. If undefined, the variable will be removed\n * @returns\n */\n public static setVariable(key: string, value: StorageElementType) {\n key = key.toLowerCase()\n if (value === undefined || value === null) {\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n return\n }\n GameStorageManager.storage[key] = value\n }\n /**\n * Get a variable from the storage\n * @param key The key of the variable\n * @returns The value of the variable. If the variable does not exist, it will return undefined\n */\n public static getVariable<T extends StorageElementType>(key: string): T | undefined {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n return GameStorageManager.storage[key] as T\n }\n return undefined\n }\n /**\n * Remove a variable from the storage\n * @param key The key of the variable\n * @returns\n */\n public static removeVariable(key: string) {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n }\n /**\n * Clear the storage and the oidsUsed\n * @returns\n */\n public static clear() {\n GameStorageManager.storage = {}\n }\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n public static export(): ExportedStorage {\n return createExportableElement(GameStorageManager.storage)\n }\n public static importJson(dataString: string) {\n GameStorageManager.import(JSON.parse(dataString))\n }\n public static import(data: object) {\n GameStorageManager.clear()\n try {\n if (data) {\n GameStorageManager.storage = (data as ExportedStorage)\n }\n else {\n console.warn(\"[Pixi'VN] No storage data found\")\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","import sha1 from 'crypto-js/sha1';\nimport { Application, ApplicationOptions, Container, Ticker } from \"pixi.js\";\nimport CanvasBase from \"../classes/canvas/CanvasBase\";\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\";\nimport { Repeat } from \"../constants\";\nimport { geTickerInstanceById } from \"../decorators/TickerDecorator\";\nimport { exportCanvasElement, importCanvasElement } from \"../functions/CanvasUtility\";\nimport { asciiArtLog } from \"../functions/EasterEgg\";\nimport { createExportableElement } from \"../functions/ExportUtility\";\nimport { ITicker, ITickersSteps, TickerHistory, TickerTimeoutHistory } from \"../interface\";\nimport { ITickersStep } from \"../interface/ITickersSteps\";\nimport { ICanvasBaseMemory } from \"../interface/canvas\";\nimport { ExportedCanvas } from \"../interface/export\";\nimport { PauseType } from \"../types/PauseType\";\nimport { RepeatType } from \"../types/RepeatType\";\nimport { TickerIdType } from \"../types/TickerIdType\";\nimport { tagToRemoveAfter } from '../types/ticker/TagToRemoveAfterType';\n\n/**\n * This class is responsible for managing the canvas, the tickers, the events, and the window size and the children of the window.\n */\nexport default class GameWindowManager {\n private constructor() { }\n\n private static _app: Application | undefined = undefined\n /**\n * The PIXI Application instance.\n * It not recommended to use this property directly.\n */\n static get app() {\n if (!GameWindowManager._app) {\n throw new Error(\"[Pixi'VN] GameWindowManager.app is undefined\")\n }\n return GameWindowManager._app\n }\n private static _isInitialized: boolean = false\n /**\n * If the manager is initialized.\n */\n static get isInitialized() {\n return GameWindowManager._isInitialized\n }\n /**\n * This is the div that have same size of the canvas.\n * This is useful to put interface elements.\n * You can use React or other framework to put elements in this div.\n */\n static htmlLayout: HTMLElement\n static canvasWidth: number\n static canvasHeight: number\n static get screen() {\n return GameWindowManager.app.screen\n }\n\n /**\n * Initialize the PIXI Application and the interface div.\n * This method should be called before any other method.\n * @param element The html element where I will put the canvas. Example: document.body\n * @param width The width of the canvas\n * @param height The height of the canvas\n * @param options The options of PIXI Application\n * @example\n * ```typescript\n * const body = document.body\n * if (!body) {\n * throw new Error('body element not found')\n * }\n * await GameWindowManager.initialize(body, 1920, 1080, {\n * backgroundColor: \"#303030\"\n * })\n * ```\n */\n public static async initialize(element: HTMLElement, width: number, height: number, options?: Partial<ApplicationOptions>): Promise<void> {\n GameWindowManager.canvasWidth = width\n GameWindowManager.canvasHeight = height\n GameWindowManager._app = new Application()\n return GameWindowManager.app.init({\n resolution: window.devicePixelRatio || 1,\n autoDensity: true,\n width: width,\n height: height,\n ...options\n }).then(() => {\n GameWindowManager._isInitialized = true\n // Manager.app.ticker.add(Manager.update)\n this.addCanvasIntoElement(element)\n // listen for the browser telling us that the screen size changed\n window.addEventListener(\"resize\", GameWindowManager.resize)\n\n // call it manually once so we are sure we are the correct size after starting\n GameWindowManager.resize()\n\n asciiArtLog()\n });\n }\n\n /**\n * Add the canvas into a html element.\n * @param element it is the html element where I will put the canvas. Example: document.body\n */\n private static addCanvasIntoElement(element: HTMLElement) {\n if (GameWindowManager.isInitialized) {\n element.appendChild(GameWindowManager.app.canvas as HTMLCanvasElement)\n }\n else {\n console.error(\"[Pixi'VN] GameWindowManager is not initialized\")\n }\n }\n /**\n * Initialize the interface div and add it into a html element.\n * @param element it is the html element where I will put the interface div. Example: document.getElementById('root')\n * @example\n * ```tsx\n * const root = document.getElementById('root')\n * if (!root) {\n * throw new Error('root element not found')\n * }\n * GameWindowManager.initializeHTMLLayout(root)\n * const reactRoot = createRoot(GameWindowManager.htmlLayout)\n * reactRoot.render(\n * <App />\n * )\n * ```\n */\n public static initializeHTMLLayout(element: HTMLElement) {\n let div = document.createElement('div')\n div.style.position = 'absolute'\n div.style.pointerEvents = 'none'\n element.appendChild(div)\n GameWindowManager.htmlLayout = div\n GameWindowManager.resize()\n }\n\n /* Resize Metods */\n\n /**\n * This method returns the scale of the screen.\n */\n public static get screenScale() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return Math.min(screenWidth / GameWindowManager.canvasWidth, screenHeight / GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the width of the screen enlarged by the scale.\n */\n public static get screenWidth() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasWidth)\n }\n /**\n * This method returns the height of the screen enlarged by the scale.\n */\n public static get screenHeight() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the horizontal margin of the screen.\n */\n public static get horizontalMargin() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n return (screenWidth - GameWindowManager.screenWidth) / 2\n }\n /**\n * This method returns the vertical margin of the screen.\n */\n public static get verticalMargin() {\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return (screenHeight - GameWindowManager.screenHeight) / 2\n }\n /**\n * This method is called when the screen is resized.\n */\n private static resize(): void {\n // now we use css trickery to set the sizes and margins\n if (GameWindowManager.isInitialized) {\n let style = GameWindowManager.app.canvas.style;\n style.width = `${GameWindowManager.screenWidth}px`;\n style.height = `${GameWindowManager.screenHeight}px`;\n (style as any).marginLeft = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginRight = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginTop = `${GameWindowManager.verticalMargin}px`;\n (style as any).marginBottom = `${GameWindowManager.verticalMargin}px`;\n }\n\n if (GameWindowManager.htmlLayout) {\n GameWindowManager.htmlLayout.style.width = `${GameWindowManager.screenWidth}px`\n GameWindowManager.htmlLayout.style.height = `${GameWindowManager.screenHeight}px`\n GameWindowManager.htmlLayout.style.marginLeft = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginRight = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginTop = `${GameWindowManager.verticalMargin}px`\n GameWindowManager.htmlLayout.style.marginBottom = `${GameWindowManager.verticalMargin}px`\n }\n }\n\n /* Edit Canvas Elements Methods */\n\n /**\n * This is a dictionary that contains all Canvas Elements of Canvas, currently.\n */\n static get currentCanvasElements() {\n return GameWindowManager._children\n }\n private static _children: { [tag: string]: CanvasBase<any> } = {}\n /**\n * The order of the children tags.\n */\n private static childrenTagsOrder: string[] = []\n /**\n * Add a canvas element to the canvas.\n * If there is a canvas element with the same tag, it will be removed.\n * @param tag The tag of the canvas element.\n * @param canvasElement The canvas elements to be added.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n public static addCanvasElement(tag: string, canvasElement: CanvasBase<any>) {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.removeCanvasElement(tag)\n }\n GameWindowManager.app.stage.addChild(canvasElement)\n GameWindowManager._children[tag] = canvasElement\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n /**\n * Remove a canvas element from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n * @param tags The tag of the canvas element to be removed.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.removeCanvasElement(\"bunny\");\n * ```\n */\n public static removeCanvasElement(tags: string | string[]) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n tags.forEach((tag) => {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.app.stage.removeChild(GameWindowManager._children[tag])\n delete GameWindowManager._children[tag]\n GameWindowManager.removeTickerByCanvasElement(tag)\n }\n })\n GameWindowManager.childrenTagsOrder = GameWindowManager.childrenTagsOrder.filter((t) => !tags.includes(t))\n }\n /**\n * Get a canvas element by the tag.\n * @param tag The tag of the canvas element.\n * @returns The canvas element.\n * @example\n * ```typescript\n * const sprite = GameWindowManager.getCanvasElement<CanvasSprite>(\"bunny\");\n * ```\n */\n public static getCanvasElement<T extends CanvasBase<any>>(tag: string): T | undefined {\n return GameWindowManager._children[tag] as T | undefined\n }\n /**\n * Check if a DisplayObject is on the canvas.\n * @param pixiElement The DisplayObject to be checked.\n * @returns If the DisplayObject is on the canvas.\n */\n public static canvasElementIsOnCanvas<T extends Container>(pixiElement: T) {\n return GameWindowManager.app.stage.children.includes(pixiElement)\n }\n /**\n * Remove all canvas elements from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n */\n public static removeCanvasElements() {\n GameWindowManager.app.stage.removeChildren()\n GameWindowManager._children = {}\n GameWindowManager.childrenTagsOrder = []\n GameWindowManager.removeAllTickers()\n }\n /**\n * Edit the tag of a canvas element.\n * @param oldTag The old tag of the canvas element.\n * @param newTag The new tag of the canvas element.\n */\n public static editCanvasElementTag(oldTag: string, newTag: string) {\n if (GameWindowManager._children[oldTag]) {\n GameWindowManager._children[newTag] = GameWindowManager._children[oldTag]\n delete GameWindowManager._children[oldTag]\n }\n if (GameWindowManager._currentTickersSteps[oldTag]) {\n GameWindowManager._currentTickersSteps[newTag] = GameWindowManager._currentTickersSteps[oldTag]\n delete GameWindowManager._currentTickersSteps[oldTag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(oldTag)) {\n ticker.canvasElementTags = ticker.canvasElementTags.map((t) => t === oldTag ? newTag : t)\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (Array.isArray(tagToRemoveAfter)) {\n ticker.args.tagToRemoveAfter = tagToRemoveAfter.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.tags.includes(oldTag)) {\n TickerTimeout.tags = TickerTimeout.tags.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n\n /** Edit Tickers Methods */\n\n /**\n * Currently tickers that are running.\n */\n public static get currentTickers() {\n return GameWindowManager._currentTickers\n }\n public static get currentTickersList() {\n return Object.values(GameWindowManager._currentTickers)\n }\n private static get currentTickersWithoutCreatedBySteps() {\n return Object.fromEntries(Object.entries(GameWindowManager._currentTickers).filter(([_, ticker]) => !ticker.createdByTicketStepsId))\n }\n private static _currentTickers: { [id: string]: TickerHistory<any> } = {}\n /**\n * The steps of the tickers\n */\n public static get currentTickersSteps() {\n return GameWindowManager._currentTickersSteps\n }\n private static _currentTickersSteps: { [tag: string]: ITickersSteps } = {}\n private static _currentTickersTimeouts: { [timeout: string]: TickerTimeoutHistory } = {}\n private static generateTickerId(tickerData: TickerHistory<any>): string {\n try {\n return sha1(JSON.stringify(tickerData)).toString() + \"_\" + Math.random().toString(36).substring(7)\n }\n catch (e) {\n throw new Error(`[Pixi'VN] Error to generate ticker id: ${e}`)\n }\n }\n /**\n * Run a ticker. You can run multiple addTicker with the same tag and different tickerClasses.\n * If you run a ticker with the same tag and tickerClass, the old ticker will be removed.\n * If already exists a sequence of tickers with the same tag, it will be removed.\n * @param canvasEslementTag The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be run.\n * @param args The arguments to be used in the ticker.\n * @param duration The time to be used in the ticker. This number is in seconds. If it is undefined, the ticker will run forever.\n * @param priority The priority to be used in the ticker.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.addTicker(\"alien\", new RotateTicker({ speed: 0.2 }))\n * ```\n */\n static addTicker<TArgs extends TickerArgsType>(canvasElementTag: string | string[], ticker: TickerBase<TArgs>) {\n let tickerId: TickerIdType = ticker.id\n if (typeof canvasElementTag === \"string\") {\n canvasElementTag = [canvasElementTag]\n }\n if (!geTickerInstanceById<TArgs>(tickerId, ticker.args, ticker.duration, ticker.priority)) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerId,\n args: createExportableElement(ticker.args),\n canvasElementTags: canvasElementTag,\n priority: ticker.priority,\n duration: ticker.duration,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n }\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(canvasElementTag, tickerId, timeout.toString(), true)\n }\n }\n private static pushTicker<TArgs extends TickerArgsType>(id: string, tickerData: TickerHistory<TArgs>, ticker: TickerBase<TArgs>) {\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(tickerData.canvasElementTags, ticker)\n GameWindowManager._currentTickers[id] = tickerData\n tickerData.fn = (t: Ticker) => {\n let data = GameWindowManager._currentTickers[id]\n if (data) {\n ticker?.fn(t, data.args, data.canvasElementTags, id)\n }\n }\n GameWindowManager.app.ticker.add(tickerData.fn, undefined, tickerData.priority)\n }\n /**\n * Run a sequence of tickers. If exists a ticker steps with the same tag, it will be removed.\n * @param tag The tag of canvas element that will use the tickers.\n * @param steps The steps of the tickers.\n * @param currentStepNumber The current step number. It is used to continue the sequence of tickers.\n * @returns\n * @example\n * ```typescript\n * GameWindowManager.addTickersSteps(\"alien\", [\n * new RotateTicker({ speed: 0.1, clockwise: true }, 2), // 2 seconds\n * Pause(1), // 1 second\n * new RotateTicker({ speed: 0.2, clockwise: false }, 2),\n * Repeat,\n * ])\n * ```\n */\n static addTickersSteps<TArgs extends TickerArgsType>(tag: string, steps: (ITicker<TArgs> | RepeatType | PauseType)[], currentStepNumber = 0) {\n if (steps.length == 0) {\n console.warn(\"[Pixi'VN] The steps of the tickers is empty\")\n return\n }\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n GameWindowManager._currentTickersSteps[tag] = {\n currentStepNumber: currentStepNumber,\n steps: steps.map((step) => {\n if (step === Repeat) {\n return step\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n return step as PauseType\n }\n let tickerId = (step as ITicker<TArgs>).id\n return {\n ticker: tickerId,\n args: createExportableElement((step as ITicker<TArgs>).args),\n duration: step.duration,\n }\n })\n }\n GameWindowManager.runTickersSteps(tag)\n }\n private static restoneTickersSteps(data: { [tag: string]: ITickersSteps }) {\n for (let tag in data) {\n let steps = data[tag]\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n }\n private static runTickersSteps<TArgs extends TickerArgsType>(tag: string) {\n let step = GameWindowManager._currentTickersSteps[tag].steps[GameWindowManager._currentTickersSteps[tag].currentStepNumber]\n if (step === Repeat) {\n step = GameWindowManager._currentTickersSteps[tag].steps[0]\n GameWindowManager._currentTickersSteps[tag].currentStepNumber = 0\n if (step === Repeat) {\n console.error(\"[Pixi'VN] TikersSteps has a RepeatType in the first step\")\n return\n }\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, (step as PauseType).duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, \"steps\", timeout.toString(), false)\n return\n }\n let ticker = geTickerInstanceById<TArgs>((step as ITickersStep<TArgs>).ticker, (step as ITickersStep<TArgs>).args, step.duration, (step as ITickersStep<TArgs>).priority)\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${(step as ITickersStep<TArgs>).ticker} not found`)\n return\n }\n let tickerName: TickerIdType = ticker.id\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerName,\n args: createExportableElement(ticker.args),\n canvasElementTags: [tag],\n priority: ticker.priority,\n duration: ticker.duration,\n createdByTicketStepsId: tag,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, tickerName, timeout.toString(), false)\n }\n }\n private static nextTickerStep(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n let steps = GameWindowManager._currentTickersSteps[tag]\n if (steps.currentStepNumber + 1 < steps.steps.length) {\n steps.currentStepNumber++\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n else {\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n }\n }\n }\n public static onEndOfTicker(canvasElementTags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string, canvasElementTagsToDelete: string | string[], tickerId: string) {\n let tickerData = GameWindowManager._currentTickers[tickerId]\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(canvasElementTags, ticker)\n GameWindowManager.removeCanvasElement(canvasElementTagsToDelete)\n if (tickerData) {\n GameWindowManager.removeTicker(tickerId)\n if (tickerData.duration == undefined && tickerData.createdByTicketStepsId) {\n GameWindowManager.nextTickerStep(tickerData.createdByTicketStepsId)\n }\n }\n }\n /**\n * Remove a connection between a canvas element and a ticker.\n * And remove the ticker if there is no canvas element connected to it.\n * @param tags The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be removed.\n * @example\n * ```typescript\n * GameWindowManager.removeAssociationBetweenTickerCanvasElement(\"alien\", RotateTicker)\n * ```\n */\n public static removeAssociationBetweenTickerCanvasElement(tags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string) {\n let tickerId: TickerIdType\n if (typeof ticker === \"string\") {\n tickerId = ticker\n }\n else if (ticker instanceof TickerBase) {\n tickerId = ticker.id\n }\n else {\n tickerId = ticker.prototype.id\n }\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.id === tickerId) {\n GameWindowManager._currentTickers[id].canvasElementTags = ticker.canvasElementTags.filter((e) => !tags.includes(e))\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.ticker === tickerId && TickerTimeout.canBeDeletedBeforeEnd) {\n GameWindowManager._currentTickersTimeouts[timeout].tags = TickerTimeout.tags.filter((t) => !tags.includes(t))\n }\n }\n GameWindowManager.removeTickersWithoutAssociatedCanvasElement()\n }\n /**\n * Remove all tickers that are not connected to any existing canvas element.\n */\n private static removeTickersWithoutAssociatedCanvasElement() {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n ticker.canvasElementTags = ticker.canvasElementTags.filter((e) => GameWindowManager._children[e])\n if (ticker.canvasElementTags.length === 0) {\n GameWindowManager.removeTicker(id)\n }\n }\n for (let tag in GameWindowManager._currentTickersSteps) {\n if (GameWindowManager._children[tag] === undefined) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n }\n Object.entries(GameWindowManager._currentTickersTimeouts).forEach(([timeout, { tags }]) => {\n if (tags.length === 0) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n })\n }\n private static addTickerTimeoutInfo(tags: string | string[], ticker: string, timeout: string, canBeDeletedBeforeEnd: boolean) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n GameWindowManager._currentTickersTimeouts[timeout] = {\n tags: tags,\n ticker: ticker,\n canBeDeletedBeforeEnd: canBeDeletedBeforeEnd\n }\n }\n private static removeTickerTimeoutInfo(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n if (GameWindowManager._currentTickersTimeouts[timeout]) {\n delete GameWindowManager._currentTickersTimeouts[timeout]\n }\n }\n private static removeTickerTimeout(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n clearTimeout(Number(timeout))\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }\n private static removeTickerTimeoutsByTag(tag: string, checkCanBeDeletedBeforeEnd: boolean) {\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let tagsWithoutTagToRemove = GameWindowManager._currentTickersTimeouts[timeout].tags.filter((t) => t !== tag)\n if (tagsWithoutTagToRemove.length === 0) {\n let canBeDeletedBeforeEnd = GameWindowManager._currentTickersTimeouts[timeout].canBeDeletedBeforeEnd\n if (!checkCanBeDeletedBeforeEnd || canBeDeletedBeforeEnd) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n else {\n GameWindowManager._currentTickersTimeouts[timeout].tags = tagsWithoutTagToRemove\n }\n }\n }\n /**\n * Remove all tickers from the canvas.\n */\n public static removeAllTickers() {\n GameWindowManager._currentTickersSteps = {}\n Object.keys(GameWindowManager._currentTickers).forEach((id) => {\n GameWindowManager.removeTicker(id)\n })\n GameWindowManager._currentTickers = {}\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n /**\n * Remove all tickers from a canvas element.\n * @param tag The tag of the canvas element that will use the ticker.\n */\n private static removeTickerByCanvasElement(tag: string | string[]) {\n if (typeof tag === \"string\") {\n tag = [tag]\n }\n tag.forEach((tag) => {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(tag)) {\n GameWindowManager.removeTicker(id)\n }\n }\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n GameWindowManager.removeTickerTimeoutsByTag(tag, false)\n delete GameWindowManager._currentTickersSteps[tag]\n })\n }\n private static removeTickerStepByCanvasElement(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.createdByTicketStepsId === tag) {\n GameWindowManager.removeTicker(id)\n }\n }\n }\n private static removeTicker(tickerId: string) {\n let ticker = GameWindowManager._currentTickers[tickerId]\n if (ticker) {\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n GameWindowManager.removeCanvasElement(tagToRemoveAfter)\n }\n GameWindowManager.app.ticker.remove(ticker.fn)\n delete GameWindowManager._currentTickers[tickerId]\n }\n }\n\n /**\n * Clear the canvas and the tickers.\n */\n static clear() {\n GameWindowManager.removeCanvasElements()\n }\n\n /* Export and Import Methods */\n\n /**\n * Export the canvas and the tickers to a JSON string.\n * @returns The JSON string.\n */\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n /**\n * Export the canvas and the tickers to an object.\n * @returns The object.\n */\n public static export(): ExportedCanvas {\n let currentElements: { [tag: string]: ICanvasBaseMemory } = {}\n for (let tag in GameWindowManager._children) {\n currentElements[tag] = exportCanvasElement(GameWindowManager._children[tag])\n }\n return {\n currentTickers: createExportableElement(GameWindowManager.currentTickersWithoutCreatedBySteps),\n currentTickersSteps: createExportableElement(GameWindowManager._currentTickersSteps),\n currentElements: createExportableElement(currentElements),\n childrenTagsOrder: createExportableElement(GameWindowManager.childrenTagsOrder),\n }\n }\n /**\n * Import the canvas and the tickers from a JSON string.\n * @param dataString The JSON string.\n */\n public static importJson(dataString: string) {\n GameWindowManager.import(JSON.parse(dataString))\n }\n /**\n * Import the canvas and the tickers from an object.\n * @param data The object.\n */\n public static import(data: object) {\n GameWindowManager.clear()\n try {\n if (data.hasOwnProperty(\"childrenTagsOrder\") && data.hasOwnProperty(\"currentElements\")) {\n let currentElements = (data as ExportedCanvas)[\"currentElements\"]\n let childrenTagsOrder = (data as ExportedCanvas)[\"childrenTagsOrder\"]\n childrenTagsOrder.forEach((tag) => {\n if (currentElements[tag]) {\n let element = importCanvasElement(currentElements[tag])\n GameWindowManager.addCanvasElement(tag, element)\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n })\n }\n else {\n console.error(\"[Pixi'VN] The data does not have the properties childrenTagsOrder and currentElements\")\n return\n }\n if (data.hasOwnProperty(\"currentTickers\")) {\n let currentTickers = (data as ExportedCanvas)[\"currentTickers\"]\n for (let id in currentTickers) {\n let t = currentTickers[id]\n let tags: string[] = t.canvasElementTags\n let ticker = geTickerInstanceById(t.id, t.args, t.duration, t.priority)\n if (ticker) {\n GameWindowManager.addTicker(tags, ticker)\n }\n else {\n console.error(`[Pixi'VN] Ticker ${t.id} not found`)\n }\n }\n }\n if (data.hasOwnProperty(\"currentTickersSteps\")) {\n let currentTickersSteps = (data as ExportedCanvas)[\"currentTickersSteps\"]\n GameWindowManager.restoneTickersSteps(currentTickersSteps)\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","export function asciiArtLog() {\n console.info(`\n ____ _ _ ___ ___ _ \n | _ \\\\(_)_ _(_| ) \\\\ / / \\\\ | |\n | |_) | \\\\ \\\\/ / |/ \\\\ \\\\ / /| \\\\| |\n | __/| |> <| | \\\\ V / | |\\\\ |\n |_| |_/_/\\\\_\\\\_| \\\\_/ |_| \\\\_|\n `)\n}","export const tagToRemoveAfter = \"tagToRemoveAfter\";\nexport type tagToRemoveAfterType = \"tagToRemoveAfter\";\n","import { saveCharacter } from \"../decorators\"\nimport { CharacterBaseModelProps } from \"../interface\"\nimport { GameStorageManager } from \"../managers\"\nimport StoredClassModel from \"./StoredClassModel\"\n\n/**\n * CharacterBaseModel is a class that is used to create a character model.\n * I suggest you extend this class to create your own character models.\n * You must use the {@link saveCharacter} function to save the character in the game.\n * @example\n * ```typescript\n * export const liam = new CharacterBaseModel('liam', {\n * name: 'Liam',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * export const alice = new CharacterBaseModel('alice', {\n * name: 'Alice',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * saveCharacter([liam, alice]);\n * ```\n */\nexport default class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n /**\n * @param id The id of the character.\n * @param props The properties of the character.\n */\n constructor(id: string, props: CharacterBaseModelProps) {\n super(GameStorageManager.keysSystem.CHARACTER_CATEGORY_KEY, id)\n this.defaultName = props.name\n this.defaultSurname = props.surname\n this.defaultAge = props.age\n this._icon = props.icon\n this._color = props.color\n }\n private defaultName: string = \"\"\n /***\n * The name of the character.\n * If you set undefined, it will return the default name.\n */\n get name(): string {\n return this.getStorageProperty<string>(\"name\") || this.defaultName\n }\n set name(value: string | undefined) {\n this.setStorageProperty<string>(\"name\", value)\n }\n private defaultSurname?: string\n /**\n * The surname of the character.\n * If you set undefined, it will return the default surname.\n */\n get surname(): string | undefined {\n return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n }\n set surname(value: string | undefined) {\n this.setStorageProperty<string>(\"surname\", value)\n }\n private defaultAge?: number | undefined\n /**\n * The age of the character.\n * If you set undefined, it will return the default age.\n */\n get age(): number | undefined {\n return this.getStorageProperty<number>(\"age\") || this.defaultAge\n }\n set age(value: number | undefined) {\n this.setStorageProperty<number>(\"age\", value)\n }\n private _icon?: string\n /**\n * The icon of the character.\n */\n get icon(): string | undefined {\n return this._icon\n }\n private _color?: string | undefined\n /**\n * The color of the character.\n */\n get color(): string | undefined {\n return this._color\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/functions/CanvasUtility.ts","../../src/classes/canvas/CanvasContainer.ts","../../src/functions/TextureUtility.ts","../../src/decorators/EventDecorator.ts","../../src/classes/canvas/CanvasSprite.ts","../../src/classes/canvas/CanvasImage.ts","../../src/classes/canvas/CanvasText.ts","../../src/decorators/CanvasElementDecorator.ts","../../src/decorators/TickerDecorator.ts","../../src/classes/StoredClassModel.ts","../../src/classes/ticker/TickerBase.ts","../../src/classes/ticker/FadeAlphaTicker.ts","../../src/functions/TickerUtility.ts","../../src/classes/ticker/MoveTicker.ts","../../src/classes/ticker/RotateTicker.ts","../../src/classes/ticker/ZoomTicker.ts","../../src/constants.ts","../../src/functions/ExportUtility.ts","../../src/managers/StorageManager.ts","../../src/functions/EasterEgg.ts","../../src/types/ticker/TagToRemoveAfterType.ts","../../src/managers/WindowManager.ts","../../src/classes/CharacterBaseModel.ts"],"names":["Container","Sprite","tagToRemoveAfter","sha1","tag","ticker"],"mappings":"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","file":"CharacterBaseModel.mjs","sourcesContent":["import { Texture } from \"pixi.js\";\nimport { CanvasBase } from \"../classes/canvas\";\nimport { getCanvasElementInstanceById } from \"../decorators/CanvasElementDecorator\";\nimport { ICanvasBaseMemory, ITextureMemory } from \"../interface/canvas\";\n\n/**\n * Get the memory object of the PixiJS texture\n * @param texture PixiJS Texture object\n * @returns Memory object of the texture\n */\nexport function getTextureMemory(texture: Texture): ITextureMemory {\n let sourceTexture = texture.source\n let textureMemory: ITextureMemory = {\n image: sourceTexture.label\n }\n return textureMemory\n}\n\n/**\n * Export a Canvas element to a memory object\n * @param element Canvas element\n * @returns Memory object of the canvas\n */\nexport function exportCanvasElement<T extends CanvasBase<any>>(\n element: T,\n): ICanvasBaseMemory {\n return element.memory\n}\n\n/**\n * Import a Canvas element from a memory object\n * @param memory Memory object of the canvas\n * @returns Canvas element\n */\nexport function importCanvasElement<T extends CanvasBase<any>>(\n memory: ICanvasBaseMemory,\n): T {\n let element = getCanvasElementInstanceById<T>(memory.pixivnId)\n if (element) {\n element.memory = memory\n }\n else {\n throw new Error(\"[Pixi'VN] The element \" + memory.pixivnId + \" could not be created\")\n }\n\n return element\n}\n","import { Container, ContainerOptions } from \"pixi.js\";\nimport { exportCanvasElement, importCanvasElement } from \"../../functions/CanvasUtility\";\nimport ICanvasContainerMemory from \"../../interface/canvas/ICanvasContainerMemory\";\nimport CanvasBase from \"./CanvasBase\";\n\nexport const CANVAS_CONTAINER_ID = \"CanvasContainer\"\n\n/**\n * This class is a extension of the [PIXI.Container class](https://pixijs.com/8.x/examples/basic/container), it has the same properties and methods, \n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const container = new CanvasContainer();\n * GameWindowManager.addCanvasElement(container);\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * for (let i = 0; i < 25; i++)\n * {\n * const bunny = new CanvasSprite(texture);\n * bunny.x = (i % 5) * 40;\n * bunny.y = Math.floor(i / 5) * 40;\n * container.addChild(bunny);\n * }\n * ```\n */\nexport default class CanvasContainer extends Container implements CanvasBase<ICanvasContainerMemory> {\n constructor(options?: ContainerOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_CONTAINER_ID\n }\n pixivnId: string = CANVAS_CONTAINER_ID\n get memory(): ICanvasContainerMemory {\n let memory = getMemoryContainer(this)\n this.children.forEach(child => {\n memory.elements.push(exportCanvasElement(child as CanvasBase<any>))\n })\n return memory\n }\n set memory(value: ICanvasContainerMemory) {\n setMemoryContainer(this, value)\n value.elements.forEach(child => {\n this.addChild(importCanvasElement(child))\n })\n }\n}\n\nexport function getMemoryContainer<T extends Container>(element: T): ICanvasContainerMemory {\n let className = \"CanvasContainer\"\n if (element.hasOwnProperty(\"pixivnId\")) {\n className = (element as any).pixivnId\n }\n return {\n pixivnId: className,\n elements: [],\n\n width: element.width,\n height: element.height,\n\n isRenderGroup: element.isRenderGroup,\n blendMode: element.blendMode,\n tint: element.tint,\n alpha: element.alpha,\n angle: element.angle,\n renderable: element.renderable,\n rotation: element.rotation,\n scale: { x: element.scale.x, y: element.scale.y },\n pivot: { x: element.pivot.x, y: element.pivot.y },\n position: { x: element.position.x, y: element.position.y },\n skew: { x: element.skew.x, y: element.skew.y },\n visible: element.visible,\n x: element.x,\n y: element.y,\n boundsArea: element.boundsArea,\n\n cursor: element.cursor,\n eventMode: element.eventMode,\n interactive: element.interactive,\n interactiveChildren: element.interactiveChildren,\n hitArea: element.hitArea\n }\n}\n\nexport function setMemoryContainer<T extends Container>(element: T | Container, memory: ContainerOptions) {\n memory.width && (element.width = memory.width)\n memory.height && (element.height = memory.height)\n\n memory.isRenderGroup && (element.isRenderGroup = memory.isRenderGroup)\n memory.blendMode && (element.blendMode = memory.blendMode)\n memory.tint && (element.tint = memory.tint)\n memory.alpha && (element.alpha = memory.alpha)\n memory.angle && (element.angle = memory.angle)\n memory.renderable && (element.renderable = memory.renderable)\n memory.rotation && (element.rotation = memory.rotation)\n if (memory.scale) {\n if (typeof memory.scale === \"number\") {\n element.scale.set(memory.scale, memory.scale)\n }\n else {\n element.scale.set(memory.scale.x, memory.scale.y)\n }\n }\n if (memory.pivot) {\n if (typeof memory.pivot === \"number\") {\n element.pivot.set(memory.pivot, memory.pivot)\n }\n else {\n element.pivot.set(memory.pivot.x, memory.pivot.y)\n }\n }\n memory.position && (element.position.set(memory.position.x, memory.position.y))\n memory.skew && (element.skew.set(memory.skew.x, memory.skew.y))\n memory.visible && (element.visible = memory.visible)\n memory.x && (element.x = memory.x)\n memory.y && (element.y = memory.y)\n memory.boundsArea && (element.boundsArea = memory.boundsArea)\n\n memory.cursor && (element.cursor = memory.cursor)\n memory.eventMode && (element.eventMode = memory.eventMode)\n memory.interactive && (element.interactive = memory.interactive)\n memory.interactiveChildren && (element.interactiveChildren = memory.interactiveChildren)\n memory.hitArea && (element.hitArea = memory.hitArea)\n}\n","import { Assets, ColorSource, FillGradient, FillPattern, StrokeStyle, TextStyle, TextStyleOptions, Texture } from 'pixi.js';\n\n/**\n * Get a texture from a url.\n * @param imageUrl is the url of the image.\n * @returns the texture of the image, or a text with the error.\n */\nexport async function getTexture(imageUrl: string): Promise<Texture | void> {\n if (Assets.cache.has(imageUrl)) {\n return Assets.get(imageUrl)\n }\n return Assets.load(imageUrl)\n .then((texture) => {\n if (!texture) {\n console.error(\"[Pixi'VN] Texture not found\", imageUrl)\n return\n }\n // if texture not is a Texture, then it is a TextureResource\n if (!(texture instanceof Texture)) {\n console.error(\"[Pixi'VN] File not is a image\", imageUrl)\n return\n }\n\n return texture\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error loading image\", e)\n return\n })\n}\n\nfunction getFillGradientFillPattern(prop: ColorSource | FillGradient | FillPattern | StrokeStyle, propName: keyof TextStyle) {\n if (!(prop instanceof Object)) {\n return prop\n }\n // TODO: FillGradient and FillPattern are not supported yet\n console.warn(`[Pixi'VN] CanvasText.style.${propName} is a FillGradient or FillPattern, this is not supported yet.`, prop)\n return undefined\n}\n\nexport function getTextStyle(style: TextStyle): TextStyleOptions {\n return {\n align: style.align,\n breakWords: style.breakWords,\n dropShadow: style.dropShadow,\n fill: getFillGradientFillPattern(style.stroke, \"fill\"),\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontStyle: style.fontStyle,\n fontVariant: style.fontVariant,\n fontWeight: style.fontWeight,\n leading: style.leading,\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n padding: style.padding,\n stroke: getFillGradientFillPattern(style.stroke, \"stroke\"),\n textBaseline: style.textBaseline,\n trim: style.trim,\n whiteSpace: style.whiteSpace,\n wordWrap: style.wordWrap,\n wordWrapWidth: style.wordWrapWidth,\n }\n}\n","import { CanvasEvent } from \"../classes\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CanvasEventNamesType } from \"../types\"\nimport { EventIdType } from \"../types/EventIdType\"\n\n/**\n * Canvas Event Register\n */\nexport const registeredEvents: { [name: EventIdType]: typeof CanvasEvent<CanvasEventNamesType> } = {}\n/**\n * Is a decorator that register a event in the game.\n * Is a required decorator for use the event in the game.\n * Thanks to this decoration the game has the possibility of updating the events to the latest modification and saving the game.\n * @param name is th identifier of the event, by default is the name of the class\n * @returns \n */\nexport default function eventDecorator(name?: EventIdType) {\n return function (target: typeof CanvasEvent<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredEvents[name]) {\n console.info(`[Pixi'VN] Event ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredEvents[name] = target\n }\n}\n\n/**\n * Get an event by the id.\n * @param eventId The id of the event.\n * @returns The event type.\n */\nexport function getEventTypeById<T = typeof CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n\n/**\n * Get an event instance by the id.\n * @param eventId The id of the event.\n * @returns The event instance.\n */\nexport function getEventInstanceById<T = CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n let event = new eventType()\n return event as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextureMemory } from \"../../functions/CanvasUtility\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasBaseMemory from \"../../interface/canvas/ICanvasBaseMemory\";\nimport ICanvasSpriteMemory, { ICanvasSpriteBaseMemory } from \"../../interface/canvas/ICanvasSpriteMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_SPRITE_ID = \"CanvasSprite\"\n\n/**\n * This class is a extension of the [PIXI.Sprite class](https://pixijs.com/8.x/examples/sprite/basic), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n *\n * sprite.anchor.set(0.5);\n * sprite.x = GameWindowManager.screen.width / 2;\n * sprite.y = GameWindowManager.screen.height / 2;\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\nexport default class CanvasSprite<Memory extends SpriteOptions & ICanvasBaseMemory = ICanvasSpriteMemory> extends Sprite implements CanvasBase<Memory | ICanvasSpriteMemory> {\n constructor(options?: SpriteOptions | Texture) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_SPRITE_ID\n }\n pixivnId: string = CANVAS_SPRITE_ID\n get memory(): Memory | ICanvasSpriteMemory {\n return getMemorySprite(this)\n }\n set memory(value: ICanvasSpriteMemory) {\n setMemorySprite(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasSprite> {\n * override fn(event: CanvasEventNamesType, sprite: CanvasSprite): void {\n * if (event === 'pointerdown') {\n * sprite.scale.x *= 1.25;\n * sprite.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * let sprite = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * await sprite.load()\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean): CanvasSprite<any> {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasSprite()\n mySprite.texture = sprite.texture\n return mySprite\n }\n}\n\nexport function getMemorySprite<T extends CanvasSprite<any>>(element: T | CanvasSprite<any>): ICanvasSpriteMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n textureImage: getTextureMemory((element as any).texture),\n anchor: { x: element.anchor.x, y: element.anchor.y },\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemorySprite<Memory extends ICanvasSpriteBaseMemory>(element: CanvasSprite<any>, memory: Memory) {\n setMemoryContainer(element, memory)\n getTexture(memory.textureImage.image).then((texture) => {\n if (texture) {\n element.texture = texture\n }\n })\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event, instance)\n }\n }\n}\n","import { Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { addImage, loadImage, showWithDissolveTransition } from \"../../functions\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasImageMemory from \"../../interface/canvas/ICanvasImageMemory\";\nimport CanvasSprite, { getMemorySprite, setMemorySprite } from \"./CanvasSprite\";\n\nexport const CANVAS_IMAGE_ID = \"CanvasImage\"\n\n/**\n * This class is a extension of the CanvasSprite class, it has the same properties and methods,\n * but it has some features that make texture management easier.\n * You need to use CanvasImage.load() to show the image in the canvas.\n * This class is used for functions like {@link addImage}, {@link loadImage} and {@link showWithDissolveTransition}.\n * @example\n * ```typescript\n * let alien = new CanvasImage({\n * anchor: { x: 0.5, y: 0.5 },\n * x: 100,\n * y: 100,\n * }, 'https://pixijs.com/assets/eggHead.png')\n * await alien.load()\n * GameWindowManager.addCanvasElement(\"alien\", alien)\n * ```\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * alien.x = 100\n * alien.y = 100\n * await alien.load()\n * ```\n */\nexport default class CanvasImage extends CanvasSprite<ICanvasImageMemory> {\n pixivnId: string = CANVAS_IMAGE_ID\n constructor(options?: SpriteOptions | Texture | undefined, imageLink?: string) {\n super(options)\n if (imageLink) {\n this.imageLink = imageLink\n }\n }\n override get memory(): ICanvasImageMemory {\n return {\n ...getMemorySprite(this),\n pixivnId: this.pixivnId,\n imageLink: this.imageLink,\n }\n }\n override set memory(memory: ICanvasImageMemory) {\n setMemorySprite(this, memory)\n this.imageLink = memory.imageLink\n }\n imageLink: string = \"\"\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean) {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasImage()\n mySprite.texture = sprite.texture\n return mySprite\n }\n /** \n * Load the image from the link and set the texture of the sprite.\n * @param image The link of the image. If it is not set, it will use the imageLink property.\n * @returns A promise that resolves when the image is loaded.\n */\n async load(image?: string) {\n if (!image) {\n image = this.imageLink\n }\n return getTexture(this.imageLink)\n .then((texture) => {\n if (texture) {\n this.texture = texture\n }\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error into CanvasImage.load()\", e)\n })\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Text, TextOptions } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextStyle } from \"../../functions/TextureUtility\";\nimport ICanvasTextMemory from \"../../interface/canvas/ICanvasTextTextMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_TEXT_ID = \"CanvasText\"\n\n/**\n * This class is a extension of the [PIXI.Text class](https://pixijs.com/8.x/examples/text/pixi-text), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\nexport default class CanvasText extends Text implements CanvasBase<ICanvasTextMemory> {\n constructor(options?: TextOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_TEXT_ID\n }\n pixivnId: string = CANVAS_TEXT_ID\n get memory(): ICanvasTextMemory {\n return getMemoryText(this)\n }\n set memory(value: ICanvasTextMemory) {\n setMemoryText(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasText> {\n * override fn(event: CanvasEventNamesType, text: CanvasText): void {\n * if (event === 'pointerdown') {\n * text.scale.x *= 1.25;\n * text.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n *\n * text.eventMode = 'static';\n * text.cursor = 'pointer';\n * text.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n}\n\nexport function getMemoryText<T extends CanvasText>(element: T | CanvasText): ICanvasTextMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n anchor: { x: element.anchor.x, y: element.anchor.y },\n text: element.text,\n resolution: element.resolution,\n style: getTextStyle(element.style),\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemoryText(element: CanvasText, memory: ICanvasTextMemory) {\n setMemoryContainer(element, memory)\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.text && (element.text = memory.text)\n memory.resolution && (element.resolution = memory.resolution)\n memory.style && (element.style = memory.style)\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event as CanvasEventNamesType, instance)\n }\n }\n}\n","import { CanvasContainer, CanvasImage, CanvasSprite, CanvasText } from \"../classes/canvas\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CANVAS_CONTAINER_ID } from \"../classes/canvas/CanvasContainer\"\nimport { CANVAS_IMAGE_ID } from \"../classes/canvas/CanvasImage\"\nimport { CANVAS_SPRITE_ID } from \"../classes/canvas/CanvasSprite\"\nimport { CANVAS_TEXT_ID } from \"../classes/canvas/CanvasText\"\nimport { CanvasElementTagType } from \"../types/CanvasElementTagType\"\n\nexport const registeredCanvasElement: { [name: CanvasElementTagType]: typeof CanvasBase<any> } = {}\n/**\n * Is a decorator that register a canvas element in the game.\n * @param name Name of the canvas element, by default it will use the class name. If the name is already registered, it will show a warning\n * @returns \n */\nexport default function canvasElementDecorator(name?: CanvasElementTagType) {\n return function (target: typeof CanvasBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredCanvasElement[name]) {\n console.warn(`[Pixi'VN] CanvasElement ${name} already registered`)\n }\n target.prototype.pixivnId = name\n registeredCanvasElement[name] = target\n }\n}\n\nexport function getCanvasElementTypeById<T extends typeof CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n\nexport function getCanvasElementInstanceById<T extends CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n if (canvasId === CANVAS_CONTAINER_ID) {\n eventType = CanvasContainer\n }\n else if (canvasId === CANVAS_IMAGE_ID) {\n eventType = CanvasImage\n }\n else if (canvasId === CANVAS_SPRITE_ID) {\n eventType = CanvasSprite\n }\n else if (canvasId === CANVAS_TEXT_ID) {\n eventType = CanvasText\n }\n }\n\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n let canvasElement = new eventType()\n return canvasElement as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n","import { UPDATE_PRIORITY } from \"pixi.js\"\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\"\nimport { TickerIdType } from \"../types/TickerIdType\"\n\n/**\n * A dictionary that contains all tickers registered and avvailable to be used.\n */\nexport const registeredTickers: { [name: TickerIdType]: typeof TickerBase } = {}\n/**\n * Is a decorator that register a ticker in the game.\n * Is a required decorator for use the ticker in the game.\n * Thanks to this decoration the game has the possibility of updating the tickers to the latest modification and saving the game.\n * @param name is th identifier of the label, by default is the name of the class\n * @returns \n */\nexport default function tickerDecorator(name?: TickerIdType) {\n return function (target: typeof TickerBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredTickers[name]) {\n console.info(`[Pixi'VN] Ticker ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredTickers[name] = target\n }\n}\n\n/**\n * Get a ticker instance by the id.\n * @param tickerId The id of the ticker.\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker. If is undefined, the ticker will be called every frame.\n * @param priority The priority of the ticker. If is undefined, the priority will be UPDATE_PRIORITY.NORMAL.\n * @returns The instance of the ticker\n */\nexport function geTickerInstanceById<TArgs extends TickerArgsType>(tickerId: TickerIdType, args: TArgs, duration?: number, priority?: UPDATE_PRIORITY): TickerBase<TArgs> | undefined {\n try {\n let ticker = registeredTickers[tickerId]\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n return new ticker(args, duration, priority)\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Ticker ${tickerId}`, e)\n return\n }\n}\n","import { GameStorageManager } from \"../managers\"\n\n/**\n * StoredClassModel is a abstract class that contains the methods to store a class in the game.\n * I suggest you extend this class to create your own stored class.\n * @example\n * ```typescript\n * export class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n * constructor(id: string, props: CharacterBaseModelProps) {\n * super(\"___character___\", id)\n * this.defaultName = props.name\n * this.defaultSurname = props.surname\n * }\n * private defaultName: string = \"\"\n * get name(): string {\n * return this.getStorageProperty<string>(\"name\") || this.defaultName\n * }\n * set name(value: string) {\n * this.setStorageProperty<string>(\"name\", value)\n * }\n * private defaultSurname?: string\n * get surname(): string | undefined {\n * return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n * }\n * set surname(value: string | undefined) {\n * this.setStorageProperty<string>(\"surname\", value)\n * }\n * }\n * ```\n */\nexport default class StoredClassModel {\n /**\n * @param categoryId The id of the category. For example if you are storing a character class, you can use \"characters\" as categoryId. so all instances of the character class will be stored in the \"characters\" category.\n * @param id The id of instance of the class. This id must be unique for the category.\n */\n constructor(categoryId: string, id: string) {\n this.categoryId = categoryId\n this._id = id\n }\n private _id: string\n /**\n * Is id of the stored class. is unique for this class.\n */\n get id(): string {\n return this._id\n }\n private categoryId: string\n /**\n * Update a property in the storage.\n * @param propertyName The name of the property to set.\n * @param value The value to set. If is undefined, the property will be removed from the storage.\n */\n protected setStorageProperty<T>(propertyName: string, value: T | undefined): void {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (!storage) {\n storage = {}\n }\n // if storage not have a key with the id\n if (!storage.hasOwnProperty(this.id)) {\n storage[this.id] = {}\n }\n\n if (value === undefined || value === null) {\n if (storage[this.id].hasOwnProperty(propertyName)) {\n delete storage[this.id][propertyName]\n }\n }\n else {\n storage[this.id] = { ...storage[this.id], [propertyName]: value }\n }\n\n if (Object.keys(storage[this.id]).length === 0) {\n delete storage[this.id]\n }\n\n GameStorageManager.setVariable(this.categoryId, storage)\n }\n /**\n * Get a property from the storage.\n * @param propertyName The name of the property to get.\n * @returns The value of the property. If the property is not found, returns undefined.\n */\n protected getStorageProperty<T>(propertyName: string): T | undefined {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (storage && storage.hasOwnProperty(this.id) && storage[this.id].hasOwnProperty(propertyName)) {\n return storage[this.id][propertyName]\n }\n return undefined\n }\n}\n","import { Ticker, UPDATE_PRIORITY } from \"pixi.js\"\nimport { tickerDecorator } from \"../../decorators\"\nimport { geTickerInstanceById } from \"../../decorators/TickerDecorator\"\nimport ITicker from \"../../interface/ITicker\"\nimport { GameWindowManager } from \"../../managers\"\nimport { StorageElementType } from \"../../types/StorageElementType\"\nimport { TickerIdType } from \"../../types/TickerIdType\"\n\nexport type TickerArgsType = { [id: string]: StorageElementType } | {\n tagToRemoveAfter?: string[] | string,\n [id: string]: StorageElementType\n}[]\n\n/**\n * A class is used to create a ticker element to add into a Pixi Application.\n * You can use GameWindowManager.addTicker() to add this element into the application.\n * This class should be extended and the fn method should be overridden.\n * You must use the {@link tickerDecorator} to register the ticker in the game.\n * In Ren'Py is a transform.\n * @example\n * ```typescript\n * \\@tickerDecorator() // this is equivalent to tickerDecorator(\"RotateTicker\")\n * export class RotateTicker extends TickerBase<{ speed?: number }> {\n * override fn(\n * t: Ticker, // the ticker that is calling this method\n * args: { // the arguments that you passed when you added the ticker\n * speed?: number,\n * },\n * tags: string[], // the tags of the canvas elements that are connected to this ticker\n * tickerId: string, // the id of the ticker. You can use this to get the ticker from the GameWindowManager.currentTickers\n * ): void {\n * let speed = args.speed === undefined ? 0.1 : args.speed\n * tags.forEach((tag) => {\n * let element = GameWindowManager.getCanvasElement(tag)\n * if (element && element instanceof Container) {\n * if (clockwise)\n * element.rotation += speed * t.deltaTime\n * else\n * element.rotation -= speed * t.deltaTime\n * }\n * })\n * }\n * }\n * ```\n */\nexport default class TickerBase<TArgs extends TickerArgsType> implements ITicker<TArgs> {\n /**\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker in seconds. If is undefined, the step will end only when the animation is finished (if the animation doesn't have a goal to reach then it won't finish). @default undefined\n * @param priority The priority of the ticker. @default UPDATE_PRIORITY.NORMAL\n */\n constructor(args: TArgs, duration?: number, priority?: UPDATE_PRIORITY) {\n this.args = args\n this.duration = duration\n this.priority = priority\n this.id = this.constructor.prototype.id\n }\n /**\n * Get the id of the ticker. This variable is used in the system to get the ticker by id, {@link geTickerInstanceById}\n */\n id: TickerIdType = 'ticker_id_not_set'\n args: TArgs\n duration?: number\n priority?: UPDATE_PRIORITY\n /**\n * The method that will be called every frame.\n * This method should be overridden and you can use GameWindowManager.addCanvasElement() to get the canvas element of the canvas, and edit them.\n * @param _ticker The ticker that is calling this method\n * @param _args The arguments that you passed when you added the ticker\n * @param _tags The tags of the canvas elements that are connected to this ticker\n * @param _tickerId The id of the ticker. You can use this to get the ticker from the {@link GameWindowManager.currentTickers}\n */\n fn(_ticker: Ticker, _args: TArgs, _tags: string | string[], _tickerId: string): void { throw new Error(\"[Pixi'VN] The method TickerBase.fn() must be overridden\") }\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { GameWindowManager } from \"../../managers\";\nimport { FadeAlphaTickerProps } from \"../../types/ticker/FadeAlphaTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that fades the alpha of the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let bunny = addImage(\"bunny1\", \"https://pixijs.com/assets/eggHead.png\")\n * await bunny.load()\n * GameWindowManager.addCanvasElement(\"bunny\", bunny);\n * // ...\n * const ticker = new FadeAlphaTicker({\n * duration: 4, // 4 seconds\n * type: \"hide\",\n * }),\n * GameWindowManager.addTicker(\"bunny\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class FadeAlphaTicker extends TickerBase<FadeAlphaTickerProps> {\n override fn(\n ticker: Ticker,\n args: FadeAlphaTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let type = args.type === undefined ? \"hide\" : args.type\n let duration = args.duration === undefined ? 1 : args.duration\n let speed = 1 / (duration * 60)\n let limit = args.limit === undefined ? type === \"hide\" ? 0 : 1 : args.limit\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (type === \"hide\" && limit < 0) {\n limit = 0\n }\n if (type === \"show\" && limit > 1) {\n limit = 1\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (type === \"show\" && element.alpha < limit) {\n element.alpha += speed * ticker.deltaTime\n }\n else if (type === \"hide\" && element.alpha > limit) {\n element.alpha -= speed * ticker.deltaTime\n }\n if (type === \"show\" && element.alpha >= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n else if (type === \"hide\" && element.alpha <= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n }\n}\n","import { ITickerProgrationExponential, ITickerProgrationLinear, TickerProgrationType } from \"../interface/TickerProgrationType\";\n\n/**\n * This function updates the progression of the ticker.\n * For example, if the speed of the ticker is 0.1 and the progression is 0.01, then the speed will be 0.11.\n * @param args The arguments that are passed to the ticker\n * @param propertyName The property name that will be updated \n * @param progression The progression of the ticker\n * @returns \n */\nexport function updateTickerProgression<T extends {}>(args: T, propertyName: keyof T, progression: TickerProgrationType) {\n if (args[propertyName] === undefined\n || !progression\n || args[propertyName] === progression.limit\n ) {\n return\n }\n if (typeof args[propertyName] === \"number\") {\n if (progression.type === \"linear\") {\n (args as any)[propertyName] = getLinearProgression(args[propertyName], progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName] = getExponentialProgression(args[propertyName], progression)\n }\n }\n // args[propertyName] is { x: number, y: number }\n else if (\n args[propertyName] !== undefined &&\n typeof args[propertyName] === \"object\" &&\n (args as any)[propertyName].haveOwnProperty(\"x\") &&\n (args as any)[propertyName].haveOwnProperty(\"y\") &&\n typeof (args as any)[propertyName].x === \"number\" &&\n typeof (args as any)[propertyName].y === \"number\"\n ) {\n if (progression.type === \"linear\") {\n (args as any)[propertyName].x = getLinearProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getLinearProgression((args as any)[propertyName].y, progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName].x = getExponentialProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getExponentialProgression((args as any)[propertyName].y, progression)\n }\n }\n}\n\nfunction getLinearProgression(number: number, progression: ITickerProgrationLinear): number {\n if (progression.limit !== undefined) {\n if (number > progression.limit && progression.amt > 0) {\n return progression.limit\n }\n else if (number < progression.limit && progression.amt < 0) {\n return progression.limit\n }\n }\n return number + (progression.amt / 60)\n}\n\nfunction getExponentialProgression(number: number, progression: ITickerProgrationExponential): number {\n if (progression.limit !== undefined) {\n if (number > progression.limit && progression.percentage > 0) {\n return progression.limit\n }\n else if (number < progression.limit && progression.percentage < 0) {\n return progression.limit\n }\n }\n return number + number * progression.percentage\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { MoveTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that moves the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new MoveTicker({\n * speed: 0.1,\n * destination: { x: 100, y: 100 },\n * }),\n * ```\n */\n@tickerDecorator()\nexport default class MoveTicker extends TickerBase<MoveTickerProps> {\n override fn(\n ticker: Ticker,\n args: MoveTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 1\n let ySpeed = 1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = args.speed\n ySpeed = args.speed\n }\n else {\n xSpeed = args.speed.x\n ySpeed = args.speed.y\n }\n }\n xSpeed /= 60\n ySpeed /= 60\n let destination = args.destination\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n let xDistance = (destination.x - element.x) > 0 ? 1 : -1\n if (xDistance != 0) {\n element.x += xDistance * xSpeed * ticker.deltaTime\n let newDistance = destination.x - element.x\n if (xDistance < 0 && newDistance > 0 ||\n xDistance > 0 && newDistance < 0\n ) {\n element.x = destination.x\n }\n }\n let yDistance = (destination.y - element.y) > 0 ? 1 : -1\n if (yDistance != 0) {\n element.y += yDistance * ySpeed * ticker.deltaTime\n let newDistance = destination.y - element.y\n if (yDistance < 0 && newDistance > 0 ||\n yDistance > 0 && newDistance < 0\n ) {\n element.y = destination.y\n }\n }\n if (element.x == destination.x && element.y == destination.y) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression)\n }\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { RotateTickerProps } from \"../../types/ticker/RotateTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that rotates the canvas element of the canvas. For centre rotation, set the anchor of the canvas element to 0.5.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new RotateTicker({\n * speed: 0.1,\n * clockwise: true,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class RotateTicker extends TickerBase<RotateTickerProps> {\n override fn(\n ticker: Ticker,\n args: RotateTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let speed = (args.speed === undefined ? 1 : args.speed) / 60\n let clockwise = args.clockwise === undefined ? true : args.clockwise\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (clockwise)\n element.rotation += speed * ticker.deltaTime\n else\n element.rotation -= speed * ticker.deltaTime\n if (speed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression)\n }\n}\n","import { Container, ContainerChild, Sprite, Ticker, UPDATE_PRIORITY } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { ZoomTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that zooms the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new ZoomTicker({\n * speed: 0.1,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class ZoomTicker extends TickerBase<ZoomTickerProps> {\n override fn(\n ticker: Ticker,\n args: ZoomTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 0.1\n let ySpeed = 0.1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = args.speed\n ySpeed = args.speed\n }\n else {\n xSpeed = args.speed.x\n ySpeed = args.speed.y\n }\n }\n xSpeed /= 60\n ySpeed /= 60\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n let type = args.type || \"zoom\"\n let xLimit = type === \"zoom\" ? Infinity : 0\n let yLimit = type === \"zoom\" ? Infinity : 0\n if (args.limit) {\n if (typeof args.limit === \"number\") {\n xLimit = args.limit\n yLimit = args.limit\n }\n else {\n xLimit = args.limit.x\n yLimit = args.limit.y\n }\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (\n type === \"zoom\"\n && (element.scale.x < xLimit || element.scale.y < yLimit)\n ) {\n element.scale.x += xSpeed * ticker.deltaTime\n element.scale.y += ySpeed * ticker.deltaTime\n }\n else if (\n type === \"unzoom\"\n && (element.scale.x > xLimit || element.scale.y > yLimit)\n ) {\n element.scale.x -= xSpeed * ticker.deltaTime\n element.scale.y -= ySpeed * ticker.deltaTime\n }\n if (type === \"zoom\") {\n if (element.scale.x > xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y > yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x >= xLimit && element.scale.y >= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n else if (type === \"unzoom\") {\n if (element.scale.x < xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y < yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x <= xLimit && element.scale.y <= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n if (xSpeed < 0.00001 && ySpeed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression)\n }\n\n onEndOfTicker<T extends Container = Container>(\n tag: string,\n tickerId: string,\n _element: T,\n tagToRemoveAfter: string[] | string,\n ): void {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n}\n\n\nexport class ZoomInOutTicker extends ZoomTicker {\n constructor(props: ZoomTickerProps, duration?: number, priority?: UPDATE_PRIORITY) {\n super(props, duration, priority)\n }\n override onEndOfTicker<T extends Container = Container<ContainerChild>>(tag: string, tickerId: string, element: T, tagToRemoveAfter: string[] | string): void {\n if (element.children.length > 0) {\n let elementChild = element.children[0]\n GameWindowManager.addCanvasElement(tag, elementChild as any)\n }\n super.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n}\n","import { PauseType, RepeatType } from \"./types\"\n\nexport const PIXIVN_VERSION = '0.6.4'\nexport const Repeat: RepeatType = \"repeat\"\n/**\n * Pause the tickers for a duration.\n * @param duration Duration in seconds\n * @returns The pause object\n */\nexport function Pause(duration: number): PauseType {\n return {\n type: \"pause\",\n duration: duration,\n }\n}\n","/**\n * This function is used to create a deep copy of the element\n * @param element The element to be copied\n * @returns The copied element\n */\nexport function createExportableElement<T>(element: T): T {\n try {\n let elementString = JSON.stringify(element)\n return JSON.parse(elementString)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error creating exportable element\", e)\n throw new Error(\"[Pixi'VN] Error creating exportable element\")\n }\n}\n","import { createExportableElement } from \"../functions/ExportUtility\"\nimport { ExportedStorage } from \"../interface/export\"\nimport { StorageElementType } from \"../types/StorageElementType\"\n\nexport default class GameStorageManager {\n private static storage: { [key: string]: StorageElementType } = {}\n private constructor() { }\n public static get keysSystem() {\n return {\n CURRENT_DIALOGUE_MEMORY_KEY: \"___current_dialogue_memory___\",\n LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY: \"___last_dialogue_added_in_step_memory___\",\n CURRENT_MENU_OPTIONS_MEMORY_KEY: \"___current_menu_options_memory___\",\n LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY: \"___last_menu_options_added_in_step_memory___\",\n CHARACTER_CATEGORY_KEY: \"___character___\",\n FLAGS_CATEGORY_KEY: \"___flags___\",\n }\n }\n /**\n * Set a variable in the storage\n * @param key The key of the variable\n * @param value The value of the variable. If undefined, the variable will be removed\n * @returns\n */\n public static setVariable(key: string, value: StorageElementType) {\n key = key.toLowerCase()\n if (value === undefined || value === null) {\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n return\n }\n GameStorageManager.storage[key] = value\n }\n /**\n * Get a variable from the storage\n * @param key The key of the variable\n * @returns The value of the variable. If the variable does not exist, it will return undefined\n */\n public static getVariable<T extends StorageElementType>(key: string): T | undefined {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n return GameStorageManager.storage[key] as T\n }\n return undefined\n }\n /**\n * Remove a variable from the storage\n * @param key The key of the variable\n * @returns\n */\n public static removeVariable(key: string) {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n }\n /**\n * Clear the storage and the oidsUsed\n * @returns\n */\n public static clear() {\n GameStorageManager.storage = {}\n }\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n public static export(): ExportedStorage {\n return createExportableElement(GameStorageManager.storage)\n }\n public static importJson(dataString: string) {\n GameStorageManager.import(JSON.parse(dataString))\n }\n public static import(data: object) {\n GameStorageManager.clear()\n try {\n if (data) {\n GameStorageManager.storage = (data as ExportedStorage)\n }\n else {\n console.warn(\"[Pixi'VN] No storage data found\")\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","export function asciiArtLog() {\n console.info(`\n ____ _ _ ___ ___ _ \n | _ \\\\(_)_ _(_| ) \\\\ / / \\\\ | |\n | |_) | \\\\ \\\\/ / |/ \\\\ \\\\ / /| \\\\| |\n | __/| |> <| | \\\\ V / | |\\\\ |\n |_| |_/_/\\\\_\\\\_| \\\\_/ |_| \\\\_|\n `)\n}","export const tagToRemoveAfter = \"tagToRemoveAfter\";\nexport type tagToRemoveAfterType = \"tagToRemoveAfter\";\n","import sha1 from 'crypto-js/sha1';\nimport { Application, ApplicationOptions, Container, Ticker } from \"pixi.js\";\nimport CanvasBase from \"../classes/canvas/CanvasBase\";\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\";\nimport { Repeat } from \"../constants\";\nimport { geTickerInstanceById } from \"../decorators/TickerDecorator\";\nimport { exportCanvasElement, importCanvasElement } from \"../functions/CanvasUtility\";\nimport { asciiArtLog } from \"../functions/EasterEgg\";\nimport { createExportableElement } from \"../functions/ExportUtility\";\nimport { ITicker, ITickersSteps, TickerHistory, TickerTimeoutHistory } from \"../interface\";\nimport { ITickersStep } from \"../interface/ITickersSteps\";\nimport { ICanvasBaseMemory } from \"../interface/canvas\";\nimport { ExportedCanvas } from \"../interface/export\";\nimport { PauseType } from \"../types/PauseType\";\nimport { RepeatType } from \"../types/RepeatType\";\nimport { TickerIdType } from \"../types/TickerIdType\";\nimport { tagToRemoveAfter } from '../types/ticker/TagToRemoveAfterType';\n\n/**\n * This class is responsible for managing the canvas, the tickers, the events, and the window size and the children of the window.\n */\nexport default class GameWindowManager {\n private constructor() { }\n\n private static _app: Application | undefined = undefined\n /**\n * The PIXI Application instance.\n * It not recommended to use this property directly.\n */\n static get app() {\n if (!GameWindowManager._app) {\n throw new Error(\"[Pixi'VN] GameWindowManager.app is undefined\")\n }\n return GameWindowManager._app\n }\n private static _isInitialized: boolean = false\n /**\n * If the manager is initialized.\n */\n static get isInitialized() {\n return GameWindowManager._isInitialized\n }\n /**\n * This is the div that have same size of the canvas.\n * This is useful to put interface elements.\n * You can use React or other framework to put elements in this div.\n */\n static htmlLayout: HTMLElement\n static canvasWidth: number\n static canvasHeight: number\n static get screen() {\n return GameWindowManager.app.screen\n }\n\n /**\n * Initialize the PIXI Application and the interface div.\n * This method should be called before any other method.\n * @param element The html element where I will put the canvas. Example: document.body\n * @param width The width of the canvas\n * @param height The height of the canvas\n * @param options The options of PIXI Application\n * @example\n * ```typescript\n * const body = document.body\n * if (!body) {\n * throw new Error('body element not found')\n * }\n * await GameWindowManager.initialize(body, 1920, 1080, {\n * backgroundColor: \"#303030\"\n * })\n * ```\n */\n public static async initialize(element: HTMLElement, width: number, height: number, options?: Partial<ApplicationOptions>): Promise<void> {\n GameWindowManager.canvasWidth = width\n GameWindowManager.canvasHeight = height\n GameWindowManager._app = new Application()\n return GameWindowManager.app.init({\n resolution: window.devicePixelRatio || 1,\n autoDensity: true,\n width: width,\n height: height,\n ...options\n }).then(() => {\n GameWindowManager._isInitialized = true\n // Manager.app.ticker.add(Manager.update)\n this.addCanvasIntoHTMLElement(element)\n // listen for the browser telling us that the screen size changed\n window.addEventListener(\"resize\", GameWindowManager.resize)\n\n // call it manually once so we are sure we are the correct size after starting\n GameWindowManager.resize()\n\n asciiArtLog()\n });\n }\n\n /**\n * Add the canvas into a html element.\n * @param element it is the html element where I will put the canvas. Example: document.body\n */\n private static addCanvasIntoHTMLElement(element: HTMLElement) {\n if (GameWindowManager.isInitialized) {\n element.appendChild(GameWindowManager.app.canvas as HTMLCanvasElement)\n }\n else {\n console.error(\"[Pixi'VN] GameWindowManager is not initialized\")\n }\n }\n /**\n * Initialize the interface div and add it into a html element.\n * @param element it is the html element where I will put the interface div. Example: document.getElementById('root')\n * @example\n * ```tsx\n * const root = document.getElementById('root')\n * if (!root) {\n * throw new Error('root element not found')\n * }\n * GameWindowManager.initializeHTMLLayout(root)\n * const reactRoot = createRoot(GameWindowManager.htmlLayout)\n * reactRoot.render(\n * <App />\n * )\n * ```\n */\n public static initializeHTMLLayout(element: HTMLElement) {\n let div = document.createElement('div')\n div.style.position = 'absolute'\n div.style.pointerEvents = 'none'\n element.appendChild(div)\n GameWindowManager.htmlLayout = div\n GameWindowManager.resize()\n }\n\n /* Resize Metods */\n\n /**\n * This method returns the scale of the screen.\n */\n public static get screenScale() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return Math.min(screenWidth / GameWindowManager.canvasWidth, screenHeight / GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the width of the screen enlarged by the scale.\n */\n public static get screenWidth() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasWidth)\n }\n /**\n * This method returns the height of the screen enlarged by the scale.\n */\n public static get screenHeight() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the horizontal margin of the screen.\n */\n public static get horizontalMargin() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n return (screenWidth - GameWindowManager.screenWidth) / 2\n }\n /**\n * This method returns the vertical margin of the screen.\n */\n public static get verticalMargin() {\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return (screenHeight - GameWindowManager.screenHeight) / 2\n }\n /**\n * This method is called when the screen is resized.\n */\n private static resize(): void {\n // now we use css trickery to set the sizes and margins\n if (GameWindowManager.isInitialized) {\n let style = GameWindowManager.app.canvas.style;\n style.width = `${GameWindowManager.screenWidth}px`;\n style.height = `${GameWindowManager.screenHeight}px`;\n (style as any).marginLeft = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginRight = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginTop = `${GameWindowManager.verticalMargin}px`;\n (style as any).marginBottom = `${GameWindowManager.verticalMargin}px`;\n }\n\n if (GameWindowManager.htmlLayout) {\n GameWindowManager.htmlLayout.style.width = `${GameWindowManager.screenWidth}px`\n GameWindowManager.htmlLayout.style.height = `${GameWindowManager.screenHeight}px`\n GameWindowManager.htmlLayout.style.marginLeft = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginRight = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginTop = `${GameWindowManager.verticalMargin}px`\n GameWindowManager.htmlLayout.style.marginBottom = `${GameWindowManager.verticalMargin}px`\n }\n }\n\n /* Edit Canvas Elements Methods */\n\n /**\n * This is a dictionary that contains all Canvas Elements of Canvas, currently.\n */\n static get currentCanvasElements() {\n return GameWindowManager._children\n }\n private static _children: { [tag: string]: CanvasBase<any> } = {}\n /**\n * The order of the children tags.\n */\n private static childrenTagsOrder: string[] = []\n /**\n * Add a canvas element to the canvas.\n * If there is a canvas element with the same tag, it will be removed.\n * @param tag The tag of the canvas element.\n * @param canvasElement The canvas elements to be added.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n public static addCanvasElement(tag: string, canvasElement: CanvasBase<any>) {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.removeCanvasElement(tag)\n }\n GameWindowManager.app.stage.addChild(canvasElement)\n GameWindowManager._children[tag] = canvasElement\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n /**\n * Remove a canvas element from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n * @param tags The tag of the canvas element to be removed.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.removeCanvasElement(\"bunny\");\n * ```\n */\n public static removeCanvasElement(tags: string | string[]) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n tags.forEach((tag) => {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.app.stage.removeChild(GameWindowManager._children[tag])\n delete GameWindowManager._children[tag]\n GameWindowManager.removeTickerByCanvasElement(tag)\n }\n })\n GameWindowManager.childrenTagsOrder = GameWindowManager.childrenTagsOrder.filter((t) => !tags.includes(t))\n }\n /**\n * Get a canvas element by the tag.\n * @param tag The tag of the canvas element.\n * @returns The canvas element.\n * @example\n * ```typescript\n * const sprite = GameWindowManager.getCanvasElement<CanvasSprite>(\"bunny\");\n * ```\n */\n public static getCanvasElement<T extends CanvasBase<any>>(tag: string): T | undefined {\n return GameWindowManager._children[tag] as T | undefined\n }\n /**\n * Check if a DisplayObject is on the canvas.\n * @param pixiElement The DisplayObject to be checked.\n * @returns If the DisplayObject is on the canvas.\n */\n public static canvasElementIsOnCanvas<T extends Container>(pixiElement: T) {\n return GameWindowManager.app.stage.children.includes(pixiElement)\n }\n /**\n * Remove all canvas elements from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n */\n public static removeCanvasElements() {\n GameWindowManager.app.stage.removeChildren()\n GameWindowManager._children = {}\n GameWindowManager.childrenTagsOrder = []\n GameWindowManager.removeAllTickers()\n }\n /**\n * Edit the tag of a canvas element.\n * @param oldTag The old tag of the canvas element.\n * @param newTag The new tag of the canvas element.\n */\n public static editCanvasElementTag(oldTag: string, newTag: string) {\n if (GameWindowManager._children[oldTag]) {\n GameWindowManager._children[newTag] = GameWindowManager._children[oldTag]\n delete GameWindowManager._children[oldTag]\n }\n if (GameWindowManager._currentTickersSteps[oldTag]) {\n GameWindowManager._currentTickersSteps[newTag] = GameWindowManager._currentTickersSteps[oldTag]\n delete GameWindowManager._currentTickersSteps[oldTag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(oldTag)) {\n ticker.canvasElementTags = ticker.canvasElementTags.map((t) => t === oldTag ? newTag : t)\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (Array.isArray(tagToRemoveAfter)) {\n ticker.args.tagToRemoveAfter = tagToRemoveAfter.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.tags.includes(oldTag)) {\n TickerTimeout.tags = TickerTimeout.tags.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n\n /** Edit Tickers Methods */\n\n /**\n * Currently tickers that are running.\n */\n public static get currentTickers() {\n return GameWindowManager._currentTickers\n }\n public static get currentTickersList() {\n return Object.values(GameWindowManager._currentTickers)\n }\n private static get currentTickersWithoutCreatedBySteps() {\n return Object.fromEntries(Object.entries(GameWindowManager._currentTickers).filter(([_, ticker]) => !ticker.createdByTicketStepsId))\n }\n private static _currentTickers: { [id: string]: TickerHistory<any> } = {}\n /**\n * The steps of the tickers\n */\n public static get currentTickersSteps() {\n return GameWindowManager._currentTickersSteps\n }\n private static _currentTickersSteps: { [tag: string]: ITickersSteps } = {}\n private static _currentTickersTimeouts: { [timeout: string]: TickerTimeoutHistory } = {}\n private static generateTickerId(tickerData: TickerHistory<any>): string {\n try {\n return sha1(JSON.stringify(tickerData)).toString() + \"_\" + Math.random().toString(36).substring(7)\n }\n catch (e) {\n throw new Error(`[Pixi'VN] Error to generate ticker id: ${e}`)\n }\n }\n /**\n * Run a ticker. You can run multiple addTicker with the same tag and different tickerClasses.\n * If you run a ticker with the same tag and tickerClass, the old ticker will be removed.\n * If already exists a sequence of tickers with the same tag, it will be removed.\n * @param canvasEslementTag The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be run.\n * @param args The arguments to be used in the ticker.\n * @param duration The time to be used in the ticker. This number is in seconds. If it is undefined, the ticker will run forever.\n * @param priority The priority to be used in the ticker.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.addTicker(\"alien\", new RotateTicker({ speed: 0.2 }))\n * ```\n */\n static addTicker<TArgs extends TickerArgsType>(canvasElementTag: string | string[], ticker: TickerBase<TArgs>) {\n let tickerId: TickerIdType = ticker.id\n if (typeof canvasElementTag === \"string\") {\n canvasElementTag = [canvasElementTag]\n }\n if (!geTickerInstanceById<TArgs>(tickerId, ticker.args, ticker.duration, ticker.priority)) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerId,\n args: createExportableElement(ticker.args),\n canvasElementTags: canvasElementTag,\n priority: ticker.priority,\n duration: ticker.duration,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n }\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(canvasElementTag, tickerId, timeout.toString(), true)\n }\n }\n private static pushTicker<TArgs extends TickerArgsType>(id: string, tickerData: TickerHistory<TArgs>, ticker: TickerBase<TArgs>) {\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(tickerData.canvasElementTags, ticker)\n GameWindowManager._currentTickers[id] = tickerData\n tickerData.fn = (t: Ticker) => {\n let data = GameWindowManager._currentTickers[id]\n if (data) {\n ticker?.fn(t, data.args, data.canvasElementTags, id)\n }\n }\n GameWindowManager.app.ticker.add(tickerData.fn, undefined, tickerData.priority)\n }\n /**\n * Run a sequence of tickers. If exists a ticker steps with the same tag, it will be removed.\n * @param tag The tag of canvas element that will use the tickers.\n * @param steps The steps of the tickers.\n * @param currentStepNumber The current step number. It is used to continue the sequence of tickers.\n * @returns\n * @example\n * ```typescript\n * GameWindowManager.addTickersSteps(\"alien\", [\n * new RotateTicker({ speed: 0.1, clockwise: true }, 2), // 2 seconds\n * Pause(1), // 1 second\n * new RotateTicker({ speed: 0.2, clockwise: false }, 2),\n * Repeat,\n * ])\n * ```\n */\n static addTickersSteps<TArgs extends TickerArgsType>(tag: string, steps: (ITicker<TArgs> | RepeatType | PauseType)[], currentStepNumber = 0) {\n if (steps.length == 0) {\n console.warn(\"[Pixi'VN] The steps of the tickers is empty\")\n return\n }\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n GameWindowManager._currentTickersSteps[tag] = {\n currentStepNumber: currentStepNumber,\n steps: steps.map((step) => {\n if (step === Repeat) {\n return step\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n return step as PauseType\n }\n let tickerId = (step as ITicker<TArgs>).id\n return {\n ticker: tickerId,\n args: createExportableElement((step as ITicker<TArgs>).args),\n duration: step.duration,\n }\n })\n }\n GameWindowManager.runTickersSteps(tag)\n }\n private static restoneTickersSteps(data: { [tag: string]: ITickersSteps }) {\n for (let tag in data) {\n let steps = data[tag]\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n }\n private static runTickersSteps<TArgs extends TickerArgsType>(tag: string) {\n let step = GameWindowManager._currentTickersSteps[tag].steps[GameWindowManager._currentTickersSteps[tag].currentStepNumber]\n if (step === Repeat) {\n step = GameWindowManager._currentTickersSteps[tag].steps[0]\n GameWindowManager._currentTickersSteps[tag].currentStepNumber = 0\n if (step === Repeat) {\n console.error(\"[Pixi'VN] TikersSteps has a RepeatType in the first step\")\n return\n }\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, (step as PauseType).duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, \"steps\", timeout.toString(), false)\n return\n }\n let ticker = geTickerInstanceById<TArgs>((step as ITickersStep<TArgs>).ticker, (step as ITickersStep<TArgs>).args, step.duration, (step as ITickersStep<TArgs>).priority)\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${(step as ITickersStep<TArgs>).ticker} not found`)\n return\n }\n let tickerName: TickerIdType = ticker.id\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerName,\n args: createExportableElement(ticker.args),\n canvasElementTags: [tag],\n priority: ticker.priority,\n duration: ticker.duration,\n createdByTicketStepsId: tag,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, tickerName, timeout.toString(), false)\n }\n }\n private static nextTickerStep(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n let steps = GameWindowManager._currentTickersSteps[tag]\n if (steps.currentStepNumber + 1 < steps.steps.length) {\n steps.currentStepNumber++\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n else {\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n }\n }\n }\n public static onEndOfTicker(canvasElementTags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string, canvasElementTagsToDelete: string | string[], tickerId: string) {\n let tickerData = GameWindowManager._currentTickers[tickerId]\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(canvasElementTags, ticker)\n GameWindowManager.removeCanvasElement(canvasElementTagsToDelete)\n if (tickerData) {\n GameWindowManager.removeTicker(tickerId)\n if (tickerData.duration == undefined && tickerData.createdByTicketStepsId) {\n GameWindowManager.nextTickerStep(tickerData.createdByTicketStepsId)\n }\n }\n }\n /**\n * Remove a connection between a canvas element and a ticker.\n * And remove the ticker if there is no canvas element connected to it.\n * @param tags The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be removed.\n * @example\n * ```typescript\n * GameWindowManager.removeAssociationBetweenTickerCanvasElement(\"alien\", RotateTicker)\n * ```\n */\n public static removeAssociationBetweenTickerCanvasElement(tags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string) {\n let tickerId: TickerIdType\n if (typeof ticker === \"string\") {\n tickerId = ticker\n }\n else if (ticker instanceof TickerBase) {\n tickerId = ticker.id\n }\n else {\n tickerId = ticker.prototype.id\n }\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.id === tickerId) {\n GameWindowManager._currentTickers[id].canvasElementTags = ticker.canvasElementTags.filter((e) => !tags.includes(e))\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.ticker === tickerId && TickerTimeout.canBeDeletedBeforeEnd) {\n GameWindowManager._currentTickersTimeouts[timeout].tags = TickerTimeout.tags.filter((t) => !tags.includes(t))\n }\n }\n GameWindowManager.removeTickersWithoutAssociatedCanvasElement()\n }\n /**\n * Remove all tickers that are not connected to any existing canvas element.\n */\n private static removeTickersWithoutAssociatedCanvasElement() {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n ticker.canvasElementTags = ticker.canvasElementTags.filter((e) => GameWindowManager._children[e])\n if (ticker.canvasElementTags.length === 0) {\n GameWindowManager.removeTicker(id)\n }\n }\n for (let tag in GameWindowManager._currentTickersSteps) {\n if (GameWindowManager._children[tag] === undefined) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n }\n Object.entries(GameWindowManager._currentTickersTimeouts).forEach(([timeout, { tags }]) => {\n if (tags.length === 0) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n })\n }\n private static addTickerTimeoutInfo(tags: string | string[], ticker: string, timeout: string, canBeDeletedBeforeEnd: boolean) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n GameWindowManager._currentTickersTimeouts[timeout] = {\n tags: tags,\n ticker: ticker,\n canBeDeletedBeforeEnd: canBeDeletedBeforeEnd\n }\n }\n private static removeTickerTimeoutInfo(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n if (GameWindowManager._currentTickersTimeouts[timeout]) {\n delete GameWindowManager._currentTickersTimeouts[timeout]\n }\n }\n private static removeTickerTimeout(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n clearTimeout(Number(timeout))\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }\n private static removeTickerTimeoutsByTag(tag: string, checkCanBeDeletedBeforeEnd: boolean) {\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let tagsWithoutTagToRemove = GameWindowManager._currentTickersTimeouts[timeout].tags.filter((t) => t !== tag)\n if (tagsWithoutTagToRemove.length === 0) {\n let canBeDeletedBeforeEnd = GameWindowManager._currentTickersTimeouts[timeout].canBeDeletedBeforeEnd\n if (!checkCanBeDeletedBeforeEnd || canBeDeletedBeforeEnd) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n else {\n GameWindowManager._currentTickersTimeouts[timeout].tags = tagsWithoutTagToRemove\n }\n }\n }\n /**\n * Remove all tickers from the canvas.\n */\n public static removeAllTickers() {\n GameWindowManager._currentTickersSteps = {}\n Object.keys(GameWindowManager._currentTickers).forEach((id) => {\n GameWindowManager.removeTicker(id)\n })\n GameWindowManager._currentTickers = {}\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n /**\n * Remove all tickers from a canvas element.\n * @param tag The tag of the canvas element that will use the ticker.\n */\n private static removeTickerByCanvasElement(tag: string | string[]) {\n if (typeof tag === \"string\") {\n tag = [tag]\n }\n tag.forEach((tag) => {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(tag)) {\n GameWindowManager.removeTicker(id)\n }\n }\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n GameWindowManager.removeTickerTimeoutsByTag(tag, false)\n delete GameWindowManager._currentTickersSteps[tag]\n })\n }\n private static removeTickerStepByCanvasElement(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.createdByTicketStepsId === tag) {\n GameWindowManager.removeTicker(id)\n }\n }\n }\n private static removeTicker(tickerId: string) {\n let ticker = GameWindowManager._currentTickers[tickerId]\n if (ticker) {\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n GameWindowManager.removeCanvasElement(tagToRemoveAfter)\n }\n GameWindowManager.app.ticker.remove(ticker.fn)\n delete GameWindowManager._currentTickers[tickerId]\n }\n }\n\n /**\n * Clear the canvas and the tickers.\n */\n static clear() {\n GameWindowManager.removeCanvasElements()\n }\n\n /* Export and Import Methods */\n\n /**\n * Export the canvas and the tickers to a JSON string.\n * @returns The JSON string.\n */\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n /**\n * Export the canvas and the tickers to an object.\n * @returns The object.\n */\n public static export(): ExportedCanvas {\n let currentElements: { [tag: string]: ICanvasBaseMemory } = {}\n for (let tag in GameWindowManager._children) {\n currentElements[tag] = exportCanvasElement(GameWindowManager._children[tag])\n }\n return {\n currentTickers: createExportableElement(GameWindowManager.currentTickersWithoutCreatedBySteps),\n currentTickersSteps: createExportableElement(GameWindowManager._currentTickersSteps),\n currentElements: createExportableElement(currentElements),\n childrenTagsOrder: createExportableElement(GameWindowManager.childrenTagsOrder),\n }\n }\n /**\n * Import the canvas and the tickers from a JSON string.\n * @param dataString The JSON string.\n */\n public static importJson(dataString: string) {\n GameWindowManager.import(JSON.parse(dataString))\n }\n /**\n * Import the canvas and the tickers from an object.\n * @param data The object.\n */\n public static import(data: object) {\n GameWindowManager.clear()\n try {\n if (data.hasOwnProperty(\"childrenTagsOrder\") && data.hasOwnProperty(\"currentElements\")) {\n let currentElements = (data as ExportedCanvas)[\"currentElements\"]\n let childrenTagsOrder = (data as ExportedCanvas)[\"childrenTagsOrder\"]\n childrenTagsOrder.forEach((tag) => {\n if (currentElements[tag]) {\n let element = importCanvasElement(currentElements[tag])\n GameWindowManager.addCanvasElement(tag, element)\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n })\n }\n else {\n console.error(\"[Pixi'VN] The data does not have the properties childrenTagsOrder and currentElements\")\n return\n }\n if (data.hasOwnProperty(\"currentTickers\")) {\n let currentTickers = (data as ExportedCanvas)[\"currentTickers\"]\n for (let id in currentTickers) {\n let t = currentTickers[id]\n let tags: string[] = t.canvasElementTags\n let ticker = geTickerInstanceById(t.id, t.args, t.duration, t.priority)\n if (ticker) {\n GameWindowManager.addTicker(tags, ticker)\n }\n else {\n console.error(`[Pixi'VN] Ticker ${t.id} not found`)\n }\n }\n }\n if (data.hasOwnProperty(\"currentTickersSteps\")) {\n let currentTickersSteps = (data as ExportedCanvas)[\"currentTickersSteps\"]\n GameWindowManager.restoneTickersSteps(currentTickersSteps)\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","import { saveCharacter } from \"../decorators\"\nimport { CharacterBaseModelProps } from \"../interface\"\nimport { GameStorageManager } from \"../managers\"\nimport StoredClassModel from \"./StoredClassModel\"\n\n/**\n * CharacterBaseModel is a class that is used to create a character model.\n * I suggest you extend this class to create your own character models.\n * You must use the {@link saveCharacter} function to save the character in the game.\n * @example\n * ```typescript\n * export const liam = new CharacterBaseModel('liam', {\n * name: 'Liam',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * export const alice = new CharacterBaseModel('alice', {\n * name: 'Alice',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * saveCharacter([liam, alice]);\n * ```\n */\nexport default class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n /**\n * @param id The id of the character.\n * @param props The properties of the character.\n */\n constructor(id: string, props: CharacterBaseModelProps) {\n super(GameStorageManager.keysSystem.CHARACTER_CATEGORY_KEY, id)\n this.defaultName = props.name\n this.defaultSurname = props.surname\n this.defaultAge = props.age\n this._icon = props.icon\n this._color = props.color\n }\n private defaultName: string = \"\"\n /***\n * The name of the character.\n * If you set undefined, it will return the default name.\n */\n get name(): string {\n return this.getStorageProperty<string>(\"name\") || this.defaultName\n }\n set name(value: string | undefined) {\n this.setStorageProperty<string>(\"name\", value)\n }\n private defaultSurname?: string\n /**\n * The surname of the character.\n * If you set undefined, it will return the default surname.\n */\n get surname(): string | undefined {\n return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n }\n set surname(value: string | undefined) {\n this.setStorageProperty<string>(\"surname\", value)\n }\n private defaultAge?: number | undefined\n /**\n * The age of the character.\n * If you set undefined, it will return the default age.\n */\n get age(): number | undefined {\n return this.getStorageProperty<number>(\"age\") || this.defaultAge\n }\n set age(value: number | undefined) {\n this.setStorageProperty<number>(\"age\", value)\n }\n private _icon?: string\n /**\n * The icon of the character.\n */\n get icon(): string | undefined {\n return this._icon\n }\n private _color?: string | undefined\n /**\n * The color of the character.\n */\n get color(): string | undefined {\n return this._color\n }\n}\n"]}