@turnipxenon/pineapple 1.1.2

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 (322) hide show
  1. package/README.md +38 -0
  2. package/dist/app.postcss +94 -0
  3. package/dist/assets/bg_tiled/bg_tiled_ares.png +0 -0
  4. package/dist/assets/bg_tiled/bg_tiled_corn.png +0 -0
  5. package/dist/assets/bg_tiled/bg_tiled_pineapple.png +0 -0
  6. package/dist/assets/bg_tiled/bg_tiled_reinhard.png +0 -0
  7. package/dist/assets/bg_tiled/bg_tiled_tomato.png +0 -0
  8. package/dist/assets/bg_tiled/bg_tiled_turnip.png +0 -0
  9. package/dist/assets/characters/ares/ares_blushing.webp +0 -0
  10. package/dist/assets/characters/ares/ares_disappointed.webp +0 -0
  11. package/dist/assets/characters/ares/ares_happy.webp +0 -0
  12. package/dist/assets/characters/ares/ares_lets_go.webp +0 -0
  13. package/dist/assets/characters/ares/ares_logo.webp +0 -0
  14. package/dist/assets/characters/ares/ares_mad.webp +0 -0
  15. package/dist/assets/characters/ares/ares_neutral.webp +0 -0
  16. package/dist/assets/characters/ares/ares_slightly_mad.webp +0 -0
  17. package/dist/assets/characters/ares/ares_surprised.webp +0 -0
  18. package/dist/assets/characters/ares/ares_yay.webp +0 -0
  19. package/dist/assets/game_dev/footage-chef-wings.gif +0 -0
  20. package/dist/assets/game_dev/footage-depreciation.webm +0 -0
  21. package/dist/assets/game_dev/footage-thinking-of-flowers.webm +0 -0
  22. package/dist/assets/game_dev/screenshot-game-jam-mama.png +0 -0
  23. package/dist/assets/game_dev/screenshot-string-hop.png +0 -0
  24. package/dist/assets/game_dev/screenshot-wet-ass-road.png +0 -0
  25. package/dist/assets/icons/chat_cursor.svg +47 -0
  26. package/dist/assets/icons/external_link.svg +50 -0
  27. package/dist/assets/temp/background-image.jpg +0 -0
  28. package/dist/assets/temp/bitbucket-logo.png +0 -0
  29. package/dist/assets/temp/github-logo.png +0 -0
  30. package/dist/assets/temp/header-hep-cat.mp4 +0 -0
  31. package/dist/assets/temp/header-hep-cat.ogg +0 -0
  32. package/dist/assets/temp/header-hep-cat.webm +0 -0
  33. package/dist/assets/temp/header-pengi.mp4 +0 -0
  34. package/dist/assets/temp/header-pengi.webm +0 -0
  35. package/dist/assets/temp/header-soulwork.mp4 +0 -0
  36. package/dist/assets/temp/header-soulwork.ogg +0 -0
  37. package/dist/assets/temp/header-soulwork.webm +0 -0
  38. package/dist/components/DialogOverlay.svelte +93 -0
  39. package/dist/components/DialogOverlay.svelte.d.ts +14 -0
  40. package/dist/components/LazyAsset.svelte +96 -0
  41. package/dist/components/LazyAsset.svelte.d.ts +20 -0
  42. package/dist/components/LazyAssetType.d.ts +10 -0
  43. package/dist/components/LazyAssetType.js +12 -0
  44. package/dist/components/PineappleBaseLayout.svelte +186 -0
  45. package/dist/components/PineappleBaseLayout.svelte.d.ts +19 -0
  46. package/dist/components/RandomizedBackground.svelte +62 -0
  47. package/dist/components/RandomizedBackground.svelte.d.ts +16 -0
  48. package/dist/components/RandomizedImage.svelte +29 -0
  49. package/dist/components/RandomizedImage.svelte.d.ts +17 -0
  50. package/dist/components/dialog_manager/DialogManager.d.ts +77 -0
  51. package/dist/components/dialog_manager/DialogManager.js +239 -0
  52. package/dist/components/dialog_manager/DialogManagerStore.d.ts +41 -0
  53. package/dist/components/dialog_manager/DialogManagerStore.js +45 -0
  54. package/dist/components/dialog_manager/DialogProcessor.d.ts +13 -0
  55. package/dist/components/dialog_manager/DialogProcessor.js +62 -0
  56. package/dist/components/dialog_manager/DialogUtils.d.ts +5 -0
  57. package/dist/components/dialog_manager/DialogUtils.js +8 -0
  58. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.d.ts +15 -0
  59. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.js +34 -0
  60. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.d.ts +4 -0
  61. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.js +1 -0
  62. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.d.ts +3 -0
  63. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.js +1 -0
  64. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.d.ts +5 -0
  65. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.js +6 -0
  66. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.d.ts +12 -0
  67. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.js +22 -0
  68. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.d.ts +5 -0
  69. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.js +1 -0
  70. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.d.ts +4 -0
  71. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.js +1 -0
  72. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.d.ts +15 -0
  73. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.js +220 -0
  74. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.d.ts +5 -0
  75. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.js +1 -0
  76. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.d.ts +8 -0
  77. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.js +15 -0
  78. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.d.ts +3 -0
  79. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.js +1 -0
  80. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.d.ts +10 -0
  81. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.js +15 -0
  82. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.d.ts +11 -0
  83. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.js +30 -0
  84. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.d.ts +6 -0
  85. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.js +21 -0
  86. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.d.ts +9 -0
  87. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.js +19 -0
  88. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.d.ts +9 -0
  89. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.js +18 -0
  90. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.d.ts +15 -0
  91. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.js +24 -0
  92. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.d.ts +20 -0
  93. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.js +32 -0
  94. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.d.ts +13 -0
  95. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.js +25 -0
  96. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.d.ts +7 -0
  97. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.js +15 -0
  98. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.d.ts +7 -0
  99. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.js +14 -0
  100. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.d.ts +7 -0
  101. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.js +12 -0
  102. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.d.ts +7 -0
  103. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.js +12 -0
  104. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.d.ts +7 -0
  105. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.js +12 -0
  106. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.d.ts +7 -0
  107. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.js +12 -0
  108. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.d.ts +7 -0
  109. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.js +12 -0
  110. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.d.ts +7 -0
  111. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.js +13 -0
  112. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.d.ts +17 -0
  113. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.js +32 -0
  114. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.d.ts +9 -0
  115. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.js +47 -0
  116. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.d.ts +7 -0
  117. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.js +13 -0
  118. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.d.ts +7 -0
  119. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.js +17 -0
  120. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.d.ts +7 -0
  121. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.js +14 -0
  122. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.d.ts +7 -0
  123. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.js +14 -0
  124. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.d.ts +7 -0
  125. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.js +12 -0
  126. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.d.ts +7 -0
  127. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.js +14 -0
  128. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.d.ts +7 -0
  129. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.js +14 -0
  130. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.d.ts +4 -0
  131. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.js +1 -0
  132. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.d.ts +6 -0
  133. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.js +1 -0
  134. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.d.ts +6 -0
  135. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.js +1 -0
  136. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.d.ts +8 -0
  137. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.js +15 -0
  138. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.d.ts +5 -0
  139. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.js +5 -0
  140. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.d.ts +11 -0
  141. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.js +53 -0
  142. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.d.ts +11 -0
  143. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.js +49 -0
  144. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.d.ts +11 -0
  145. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.js +23 -0
  146. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.d.ts +6 -0
  147. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.js +8 -0
  148. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.d.ts +12 -0
  149. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.js +43 -0
  150. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.d.ts +11 -0
  151. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.js +25 -0
  152. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.d.ts +6 -0
  153. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.js +18 -0
  154. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.d.ts +6 -0
  155. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.js +17 -0
  156. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.d.ts +10 -0
  157. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.js +38 -0
  158. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.d.ts +11 -0
  159. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.js +31 -0
  160. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.d.ts +8 -0
  161. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.js +39 -0
  162. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +8 -0
  163. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +40 -0
  164. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.d.ts +9 -0
  165. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.js +28 -0
  166. package/dist/index.d.ts +8 -0
  167. package/dist/index.js +8 -0
  168. package/dist/scripts/SetDefaultEnvironment.d.ts +1 -0
  169. package/dist/scripts/SetDefaultEnvironment.js +41 -0
  170. package/dist/scripts/pineapple_fiber/PineappleWeaver.d.ts +9 -0
  171. package/dist/scripts/pineapple_fiber/PineappleWeaver.js +201 -0
  172. package/dist/scripts/util/FileManagement.d.ts +7 -0
  173. package/dist/scripts/util/FileManagement.js +35 -0
  174. package/dist/scripts/util/ManualCheck.d.ts +1 -0
  175. package/dist/scripts/util/ManualCheck.js +28 -0
  176. package/dist/scripts/util/ManualCheckRun.d.ts +1 -0
  177. package/dist/scripts/util/ManualCheckRun.js +6 -0
  178. package/dist/store.d.ts +17 -0
  179. package/dist/store.js +17 -0
  180. package/dist/styles/DefaultGridContainer.css +61 -0
  181. package/dist/theme.postcss +107 -0
  182. package/dist/types/BlogBlurbMeta.d.ts +11 -0
  183. package/dist/types/BlogBlurbMeta.js +16 -0
  184. package/dist/types/BreadcrumbData.d.ts +4 -0
  185. package/dist/types/BreadcrumbData.js +1 -0
  186. package/dist/types/pineapple_fiber/DialogDetail.d.ts +6 -0
  187. package/dist/types/pineapple_fiber/DialogDetail.js +1 -0
  188. package/dist/types/pineapple_fiber/DialogState.d.ts +5 -0
  189. package/dist/types/pineapple_fiber/DialogState.js +6 -0
  190. package/dist/types/pineapple_fiber/DialogVariableStore.d.ts +2 -0
  191. package/dist/types/pineapple_fiber/DialogVariableStore.js +20 -0
  192. package/dist/types/pineapple_fiber/PortraitType.d.ts +11 -0
  193. package/dist/types/pineapple_fiber/PortraitType.js +12 -0
  194. package/dist/util/stable_random.d.ts +2 -0
  195. package/dist/util/stable_random.js +15 -0
  196. package/package.json +67 -0
  197. package/src/app.html +13 -0
  198. package/src/lib/app.postcss +94 -0
  199. package/src/lib/assets/bg_tiled/bg_tiled_ares.png +0 -0
  200. package/src/lib/assets/bg_tiled/bg_tiled_corn.png +0 -0
  201. package/src/lib/assets/bg_tiled/bg_tiled_pineapple.png +0 -0
  202. package/src/lib/assets/bg_tiled/bg_tiled_reinhard.png +0 -0
  203. package/src/lib/assets/bg_tiled/bg_tiled_tomato.png +0 -0
  204. package/src/lib/assets/bg_tiled/bg_tiled_turnip.png +0 -0
  205. package/src/lib/assets/characters/ares/ares_blushing.webp +0 -0
  206. package/src/lib/assets/characters/ares/ares_disappointed.webp +0 -0
  207. package/src/lib/assets/characters/ares/ares_happy.webp +0 -0
  208. package/src/lib/assets/characters/ares/ares_lets_go.webp +0 -0
  209. package/src/lib/assets/characters/ares/ares_logo.webp +0 -0
  210. package/src/lib/assets/characters/ares/ares_mad.webp +0 -0
  211. package/src/lib/assets/characters/ares/ares_neutral.webp +0 -0
  212. package/src/lib/assets/characters/ares/ares_slightly_mad.webp +0 -0
  213. package/src/lib/assets/characters/ares/ares_surprised.webp +0 -0
  214. package/src/lib/assets/characters/ares/ares_yay.webp +0 -0
  215. package/src/lib/assets/game_dev/footage-chef-wings.gif +0 -0
  216. package/src/lib/assets/game_dev/footage-depreciation.webm +0 -0
  217. package/src/lib/assets/game_dev/footage-thinking-of-flowers.webm +0 -0
  218. package/src/lib/assets/game_dev/screenshot-game-jam-mama.png +0 -0
  219. package/src/lib/assets/game_dev/screenshot-string-hop.png +0 -0
  220. package/src/lib/assets/game_dev/screenshot-wet-ass-road.png +0 -0
  221. package/src/lib/assets/icons/chat_cursor.svg +47 -0
  222. package/src/lib/assets/icons/external_link.svg +50 -0
  223. package/src/lib/assets/temp/background-image.jpg +0 -0
  224. package/src/lib/assets/temp/bitbucket-logo.png +0 -0
  225. package/src/lib/assets/temp/github-logo.png +0 -0
  226. package/src/lib/assets/temp/header-hep-cat.mp4 +0 -0
  227. package/src/lib/assets/temp/header-hep-cat.ogg +0 -0
  228. package/src/lib/assets/temp/header-hep-cat.webm +0 -0
  229. package/src/lib/assets/temp/header-pengi.mp4 +0 -0
  230. package/src/lib/assets/temp/header-pengi.webm +0 -0
  231. package/src/lib/assets/temp/header-soulwork.mp4 +0 -0
  232. package/src/lib/assets/temp/header-soulwork.ogg +0 -0
  233. package/src/lib/assets/temp/header-soulwork.webm +0 -0
  234. package/src/lib/components/DialogOverlay.svelte +100 -0
  235. package/src/lib/components/LazyAsset.svelte +114 -0
  236. package/src/lib/components/LazyAssetType.ts +11 -0
  237. package/src/lib/components/PineappleBaseLayout.svelte +165 -0
  238. package/src/lib/components/RandomizedBackground.svelte +77 -0
  239. package/src/lib/components/RandomizedImage.svelte +31 -0
  240. package/src/lib/components/dialog_manager/DialogManager.ts +282 -0
  241. package/src/lib/components/dialog_manager/DialogManagerStore.ts +52 -0
  242. package/src/lib/components/dialog_manager/DialogProcessor.ts +68 -0
  243. package/src/lib/components/dialog_manager/DialogUtils.ts +10 -0
  244. package/src/lib/components/dialog_manager/behavior_tree/core/BTreeUtils.ts +40 -0
  245. package/src/lib/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.ts +5 -0
  246. package/src/lib/components/dialog_manager/behavior_tree/core/BehaviorNode.ts +3 -0
  247. package/src/lib/components/dialog_manager/behavior_tree/core/BehaviorStatus.ts +5 -0
  248. package/src/lib/components/dialog_manager/behavior_tree/core/SelectorNode.ts +32 -0
  249. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments.ts +6 -0
  250. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.ts +5 -0
  251. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.ts +236 -0
  252. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionResult.ts +6 -0
  253. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.ts +20 -0
  254. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionState.ts +3 -0
  255. package/src/lib/components/dialog_manager/behavior_tree/expression/OperandNode.ts +19 -0
  256. package/src/lib/components/dialog_manager/behavior_tree/expression/OperatorNode.ts +37 -0
  257. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.ts +28 -0
  258. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.ts +34 -0
  259. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandMap.ts +26 -0
  260. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.ts +31 -0
  261. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.ts +38 -0
  262. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.ts +28 -0
  263. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/AndOperator.ts +24 -0
  264. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.ts +21 -0
  265. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.ts +21 -0
  266. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.ts +21 -0
  267. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.ts +19 -0
  268. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.ts +21 -0
  269. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.ts +21 -0
  270. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.ts +20 -0
  271. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.ts +42 -0
  272. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.ts +53 -0
  273. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OrOperator.ts +22 -0
  274. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/XorOperator.ts +24 -0
  275. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.ts +23 -0
  276. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.ts +23 -0
  277. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.ts +21 -0
  278. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.ts +23 -0
  279. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.ts +23 -0
  280. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.ts +5 -0
  281. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.ts +7 -0
  282. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.ts +7 -0
  283. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.ts +20 -0
  284. package/src/lib/components/dialog_manager/behavior_tree/line_processors/BehaviorState.ts +6 -0
  285. package/src/lib/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.ts +59 -0
  286. package/src/lib/components/dialog_manager/behavior_tree/line_processors/ElseNode.ts +55 -0
  287. package/src/lib/components/dialog_manager/behavior_tree/line_processors/EndIfNode.ts +28 -0
  288. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IfMode.ts +7 -0
  289. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IfNode.ts +49 -0
  290. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.ts +30 -0
  291. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.ts +24 -0
  292. package/src/lib/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.ts +22 -0
  293. package/src/lib/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.ts +48 -0
  294. package/src/lib/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.ts +37 -0
  295. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.ts +48 -0
  296. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.ts +51 -0
  297. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.ts +34 -0
  298. package/src/lib/index.ts +9 -0
  299. package/src/lib/scripts/SetDefaultEnvironment.ts +45 -0
  300. package/src/lib/scripts/pineapple_fiber/PineappleWeaver.ts +252 -0
  301. package/src/lib/scripts/util/FileManagement.ts +38 -0
  302. package/src/lib/scripts/util/ManualCheck.ts +32 -0
  303. package/src/lib/scripts/util/ManualCheckRun.ts +7 -0
  304. package/src/lib/store.ts +18 -0
  305. package/src/lib/styles/DefaultGridContainer.css +61 -0
  306. package/src/lib/theme.postcss +107 -0
  307. package/src/lib/types/BlogBlurbMeta.ts +16 -0
  308. package/src/lib/types/BreadcrumbData.ts +4 -0
  309. package/src/lib/types/pineapple_fiber/DialogDetail.ts +7 -0
  310. package/src/lib/types/pineapple_fiber/DialogState.ts +5 -0
  311. package/src/lib/types/pineapple_fiber/DialogVariableStore.ts +24 -0
  312. package/src/lib/types/pineapple_fiber/PortraitType.ts +11 -0
  313. package/src/lib/util/stable_random.ts +16 -0
  314. package/src/routes/+error.svelte +26 -0
  315. package/src/routes/+layout.svelte +23 -0
  316. package/src/routes/+page.svelte +41 -0
  317. package/src/routes/Error.yarn +7 -0
  318. package/src/routes/ErrorYarn.ts +24 -0
  319. package/src/routes/portfolio/+page.svelte +0 -0
  320. package/src/types.d.ts +8 -0
  321. package/static/default-card.png +0 -0
  322. package/static/favicon.png +0 -0
@@ -0,0 +1,186 @@
1
+ <script>import "../theme.postcss";
2
+ import "@skeletonlabs/skeleton/styles/all.css";
3
+ import "../app.postcss";
4
+ import { AppBar, AppShell, autoModeWatcher, LightSwitch } from "@skeletonlabs/skeleton";
5
+ import RandomizedBackground from "./RandomizedBackground.svelte";
6
+ import { page } from "$app/stores";
7
+ import { enableBackground } from "../store";
8
+ import DialogOverlay from "./DialogOverlay.svelte";
9
+ import AresLogo from "../assets/characters/ares/ares_logo.webp";
10
+ import { enableDialogueOverlay } from "./dialog_manager/DialogManagerStore";
11
+ let pages = [];
12
+ const updateBreadcrumb = (pathname) => {
13
+ pages = [];
14
+ let basePath = "";
15
+ pathname.split("/").forEach((value, index) => {
16
+ if (index === 0) {
17
+ basePath = "/";
18
+ pages.push({
19
+ path: "/",
20
+ name: "Home"
21
+ });
22
+ return;
23
+ }
24
+ if (value === "") {
25
+ return;
26
+ }
27
+ basePath += value + "/";
28
+ pages.push({
29
+ path: basePath,
30
+ name: value
31
+ });
32
+ });
33
+ pages = pages;
34
+ };
35
+ $:
36
+ updateBreadcrumb($page.url.pathname);
37
+ let enableBackgroundValue = true;
38
+ enableBackground.subscribe((value) => {
39
+ enableBackgroundValue = value;
40
+ });
41
+ let enableDialogueOverlayValue = true;
42
+ enableDialogueOverlay.subscribe((value) => {
43
+ enableDialogueOverlayValue = value;
44
+ });
45
+ </script>
46
+
47
+ <!-- App Shell -->
48
+ <svelte:head>
49
+ {@html `<script>${autoModeWatcher.toString()} autoModeWatcher();</script>`}
50
+ </svelte:head>
51
+
52
+ <AppShell>
53
+ <svelte:fragment slot="header">
54
+ <!-- App Bar -->
55
+ <AppBar slotDefault="place-content-start" slotTrail="place-content-end">
56
+ <svelte:fragment slot="lead">
57
+ <!--TODO: add logo or something for the lead in layout-->
58
+ <img
59
+ alt="Ares's head titled towards the left with his tongue out and winking"
60
+ class="ares-logo"
61
+ src={AresLogo}
62
+ />
63
+ <span class="mr-2" />
64
+ <ol class="breadcrumb">
65
+ {#each pages as crumb, i}
66
+ {#if i < pages.length - 1}
67
+ <li class="crumb">
68
+ <a href={crumb.path}>{crumb.name.charAt(0).toUpperCase() + crumb.name.slice(1)}</a>
69
+ </li>
70
+ <li class="crumb-separator" aria-hidden="true">&rsaquo;</li>
71
+ {:else}
72
+ <li class="crumb">{crumb.name.charAt(0).toUpperCase() + crumb.name.slice(1)}</li>
73
+ {/if}
74
+ {/each}
75
+ </ol>
76
+ </svelte:fragment>
77
+ <svelte:fragment slot="trail">
78
+ <LightSwitch bgLight="bg-surface-400" />
79
+ </svelte:fragment>
80
+ </AppBar>
81
+ </svelte:fragment>
82
+
83
+ <RandomizedBackground enable={enableBackgroundValue} />
84
+
85
+ {#if enableDialogueOverlayValue}
86
+ <!-- Page Route Content -->
87
+ <div class="default-page-container">
88
+ <slot />
89
+ <div class="footer-space" />
90
+ </div>
91
+ <DialogOverlay />
92
+ {:else}
93
+ <DialogOverlay />
94
+ <slot />
95
+ {/if}
96
+ </AppShell>
97
+
98
+ <style>
99
+ :root {
100
+ --dialog-left-pad: clamp(0em, 5vw, 2em);
101
+ --dialog-box-width: min(calc(50em + 4em), calc(100vw - var(--dialog-left-pad) - var(--theme-border-base)));
102
+ --dialog-box-height: clamp(15em, 50vw, 18em);
103
+ }
104
+
105
+ .default-page-container {
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ margin-top: 4em;
110
+ margin-left: clamp(1em, 15vw, 10em);
111
+ margin-right: 1em;
112
+ flex-direction: column;
113
+ z-index: 0;
114
+ }
115
+
116
+ .ares-logo {
117
+ -o-object-fit: contain;
118
+ object-fit: contain;
119
+ height: 2em;
120
+ margin-inline-end: 0.5em;
121
+ }
122
+
123
+ /* breadcrumb does not work due to a lot of magic stuff i do
124
+ the code below is from skeleton's tailwind css:
125
+ https://github.com/skeletonlabs/skeleton/blob/54f4ecedabf2be6d94a670b56dc8821095ca3fc9/packages/plugin/src/styles/components/breadcrumbs.css
126
+
127
+ it likely disappeared due to code gen shenanigans and package magic */
128
+ .breadcrumb,
129
+ .breadcrumb-nonresponsive {
130
+ display: flex;
131
+ width: 100%;
132
+ align-items: center;
133
+ }
134
+ .breadcrumb > :not([hidden]) ~ :not([hidden]),
135
+ .breadcrumb-nonresponsive > :not([hidden]) ~ :not([hidden]) {
136
+ --tw-space-x-reverse: 0;
137
+ margin-right: calc(1rem * var(--tw-space-x-reverse));
138
+ margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
139
+ }
140
+ .breadcrumb,
141
+ .breadcrumb-nonresponsive {
142
+ overflow-x: auto;
143
+ /*@apply flex items-center space-x-4 w-full hide-scrollbar overflow-x-auto;*/
144
+ }
145
+
146
+ .crumb {
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ }
151
+
152
+ .crumb > :not([hidden]) ~ :not([hidden]) {
153
+ --tw-space-x-reverse: 0;
154
+ margin-right: calc(0.5rem * var(--tw-space-x-reverse));
155
+ margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
156
+ }
157
+ .dark .crumb-separator {
158
+ color: rgb(var(--color-surface-200));
159
+ }
160
+ .crumb-separator {
161
+ display: flex;
162
+ opacity: 0.5;
163
+ color: rgb(var(--color-surface-700));
164
+ }
165
+ .dark .crumb-separator {
166
+ color: rgb(var(--color-surface-200));
167
+ }
168
+
169
+ /* === Auto-Responsive === */
170
+
171
+ .breadcrumb li {
172
+ display: none;
173
+ }
174
+
175
+ @media (min-width: 768px) {
176
+
177
+ .breadcrumb li {
178
+ display: block;
179
+ }
180
+ }
181
+ .breadcrumb li:nth-last-child(3),
182
+ .breadcrumb li:nth-last-child(2),
183
+ .breadcrumb li:nth-last-child(1) {
184
+ display: block;
185
+ }
186
+ </style>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import "../theme.postcss";
3
+ import "@skeletonlabs/skeleton/styles/all.css";
4
+ import "../app.postcss";
5
+ declare const __propDef: {
6
+ props: Record<string, never>;
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {
11
+ default: {};
12
+ };
13
+ };
14
+ export type PineappleBaseLayoutProps = typeof __propDef.props;
15
+ export type PineappleBaseLayoutEvents = typeof __propDef.events;
16
+ export type PineappleBaseLayoutSlots = typeof __propDef.slots;
17
+ export default class PineappleBaseLayout extends SvelteComponent<PineappleBaseLayoutProps, PineappleBaseLayoutEvents, PineappleBaseLayoutSlots> {
18
+ }
19
+ export {};
@@ -0,0 +1,62 @@
1
+ <script>import { generatedDailySeed, mulberry32Generator } from "../util/stable_random";
2
+ import BgTiledAres from "../assets/bg_tiled/bg_tiled_ares.png";
3
+ import BgTiledCorn from "../assets/bg_tiled/bg_tiled_corn.png";
4
+ import BgTiledPineapple from "../assets/bg_tiled/bg_tiled_pineapple.png";
5
+ import BgTiledReinhard from "../assets/bg_tiled/bg_tiled_reinhard.png";
6
+ import BgTiledTomato from "../assets/bg_tiled/bg_tiled_tomato.png";
7
+ import BgTiledTurnip from "../assets/bg_tiled/bg_tiled_turnip.png";
8
+ import RandomizedImage from "./RandomizedImage.svelte";
9
+ export let enable;
10
+ const imageList = [BgTiledAres, BgTiledCorn, BgTiledPineapple, BgTiledReinhard, BgTiledTomato, BgTiledTurnip];
11
+ const seed = generatedDailySeed();
12
+ const rng = mulberry32Generator(seed);
13
+ const shuffle = (array) => {
14
+ let currentIndex = array.length, randomIndex;
15
+ while (currentIndex != 0) {
16
+ randomIndex = Math.floor(rng() * currentIndex);
17
+ currentIndex--;
18
+ [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
19
+ }
20
+ return array;
21
+ };
22
+ let generatedImageList = [];
23
+ let component;
24
+ for (let i = 0; i < 20; i++) {
25
+ shuffle(imageList);
26
+ generatedImageList = generatedImageList.concat(imageList);
27
+ }
28
+ </script>
29
+
30
+ <svelte:head>
31
+ <!-- from: https://dev.to/khromov/preloading-images-in-svelte-465h -->
32
+ {#each imageList as image}
33
+ <link rel="preload" as="image" href={image} />
34
+ {/each}
35
+ <link
36
+ as="video"
37
+ href="https://video.twimg.com/ext_tw_video/1318728494256410624/pu/vid/640x360/TMklz6hiTkQu3xhn.mp4"
38
+ rel="preload"
39
+ />
40
+ </svelte:head>
41
+
42
+ {#if enable}
43
+ <div class="default-background" aria-hidden="true">
44
+ {#each generatedImageList as imageItem}
45
+ <svelte:component this={RandomizedImage} src={imageItem} {rng} />
46
+ {/each}
47
+ </div>
48
+ {/if}
49
+
50
+ <style>
51
+ .default-background {
52
+ position: fixed;
53
+ display: flex;
54
+ margin-top: -8rem;
55
+ margin-left: -8rem;
56
+ width: calc(100vw + 16rem);
57
+ height: calc(100vh + 16rem);
58
+ flex-wrap: wrap;
59
+ overflow: hidden;
60
+ z-index: -10;
61
+ }
62
+ </style>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ enable: any;
5
+ };
6
+ events: {
7
+ [evt: string]: CustomEvent<any>;
8
+ };
9
+ slots: {};
10
+ };
11
+ export type RandomizedBackgroundProps = typeof __propDef.props;
12
+ export type RandomizedBackgroundEvents = typeof __propDef.events;
13
+ export type RandomizedBackgroundSlots = typeof __propDef.slots;
14
+ export default class RandomizedBackground extends SvelteComponent<RandomizedBackgroundProps, RandomizedBackgroundEvents, RandomizedBackgroundSlots> {
15
+ }
16
+ export {};
@@ -0,0 +1,29 @@
1
+ <script>export let src;
2
+ export let rng;
3
+ let rotateRandom = rng() * 90 - 45;
4
+ const paddingLeft = 1 + rng() * 5;
5
+ const paddingRight = 1 + rng() * 5;
6
+ const paddingTop = 1 + rng() * 7;
7
+ </script>
8
+
9
+ <div
10
+ style="--paddingTop: {paddingTop}rem;
11
+ --paddingLeft: {paddingLeft}rem;
12
+ --paddingRight: {paddingRight}rem;"
13
+ >
14
+ <img {src} aria-hidden="true" style="--rotateRandom:{rotateRandom}deg;" alt="" />
15
+ </div>
16
+
17
+ <style>
18
+ div {
19
+ padding-top: var(--paddingTop);
20
+ padding-left: var(--paddingLeft);
21
+ padding-right: var(--paddingRight);
22
+ }
23
+
24
+ img {
25
+ width: 8rem;
26
+ height: 8rem;
27
+ transform: rotate(var(--rotateRandom));
28
+ }
29
+ </style>
@@ -0,0 +1,17 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ src: URL;
5
+ rng: () => number;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ };
12
+ export type RandomizedImageProps = typeof __propDef.props;
13
+ export type RandomizedImageEvents = typeof __propDef.events;
14
+ export type RandomizedImageSlots = typeof __propDef.slots;
15
+ export default class RandomizedImage extends SvelteComponent<RandomizedImageProps, RandomizedImageEvents, RandomizedImageSlots> {
16
+ }
17
+ export {};
@@ -0,0 +1,77 @@
1
+ /**
2
+ * DialogManager is the object we want to interact with in Svelte
3
+ */
4
+ /// <reference types="svelte" />
5
+ import type { DialogDetail } from "../../types/pineapple_fiber/DialogDetail";
6
+ import { DialogState } from "../../types/pineapple_fiber/DialogState";
7
+ import { DialogProcessor } from "./DialogProcessor";
8
+ export type OnSetDialogChoiceCallback = (newMessage: DialogDetail) => void;
9
+ export declare class DialogManager {
10
+ dialogMessageMap: Map<string, DialogDetail>;
11
+ dialogMessageList: DialogDetail[];
12
+ fullCurrentMessage: string;
13
+ currentMessageMeta: DialogDetail;
14
+ currentMessage: import("svelte/store").Writable<string>;
15
+ currentIndex: number;
16
+ previousTimestamp: number;
17
+ isDoneTransition: boolean;
18
+ currentPortrait: import("svelte/store").Writable<unknown>;
19
+ portraitMap: Map<string, any>;
20
+ currentState: DialogState;
21
+ hidePercent: import("svelte/motion").Tweened<number>;
22
+ skipNextActiveTime: number;
23
+ dialogProcessor: DialogProcessor;
24
+ _setDialogChoiceQueue: DialogDetail[];
25
+ _setDialogChoiceMutex: boolean;
26
+ onSetDialogListeners: OnSetDialogChoiceCallback[];
27
+ constructor();
28
+ /**
29
+ * when users interact with the dialog, they can skip the transition like in a game
30
+ * note that there is a cool down to this, check out skipNextActiveTime
31
+ */
32
+ skipAnimation: () => void;
33
+ /**
34
+ * hides or shows the dialog UI
35
+ * @param shouldEnable
36
+ */
37
+ enableDialog: (shouldEnable: boolean) => void;
38
+ /**
39
+ * sets the possible dialog that might appear on the Dialog UI
40
+ * note that it overwrites the previous tree and does not append on it due to the possibility
41
+ * of node name conflicts
42
+ * @param newMessageList
43
+ */
44
+ setDialogTree: (newMessageList: DialogDetail[]) => void;
45
+ /**
46
+ * Remember to call this before SetDialogTree
47
+ * and unsubscribe during onDestroy
48
+ * @param callback
49
+ */
50
+ subscribeToSetDialogChoice: (callback: OnSetDialogChoiceCallback) => void;
51
+ /**
52
+ * Remember to call this during onDestroy
53
+ * @param callback
54
+ * todo: double check if this works???
55
+ */
56
+ unsubscribeToSetDialogChoice: (callback: OnSetDialogChoiceCallback) => void;
57
+ /**
58
+ * Sets the next dialog to show depending on which special choice a href link the user
59
+ * has interacted with
60
+ * @param newMessage
61
+ *
62
+ * you can listen to this!
63
+ */
64
+ setDialogChoice: (newMessage: DialogDetail | undefined) => void;
65
+ _setDialogChoice: () => void;
66
+ setDialogToDefault: () => void;
67
+ /**
68
+ * updates the information and detail frame by frame
69
+ * you can think of this like the main game loop
70
+ *
71
+ * @param timestamp
72
+ *
73
+ * todo: this might be too big we might want to refactor this method for better readability
74
+ * ISSUE #81 https://github.com/TurnipXenon/pineapple/issues/81
75
+ */
76
+ update: (timestamp: number) => void;
77
+ }
@@ -0,0 +1,239 @@
1
+ /**
2
+ * DialogManager is the object we want to interact with in Svelte
3
+ */
4
+ import { writable } from "svelte/store";
5
+ import { DialogState } from "../../types/pineapple_fiber/DialogState";
6
+ import { tweened } from "svelte/motion";
7
+ import { cubicOut } from "svelte/easing";
8
+ import { PortraitType } from "../../types/pineapple_fiber/PortraitType";
9
+ import AresHappy from "../../assets/characters/ares/ares_happy.webp";
10
+ import AresBlushing from "../../assets/characters/ares/ares_blushing.webp";
11
+ import AresDisappointed from "../../assets/characters/ares/ares_disappointed.webp";
12
+ import AresLetsGo from "../../assets/characters/ares/ares_lets_go.webp";
13
+ import AresMad from "../../assets/characters/ares/ares_mad.webp";
14
+ import AresNeutral from "../../assets/characters/ares/ares_neutral.webp";
15
+ import AresSlightlyMad from "../../assets/characters/ares/ares_slightly_mad.webp";
16
+ import AresSurprised from "../../assets/characters/ares/ares_surprised.webp";
17
+ import AresYay from "../../assets/characters/ares/ares_yay.webp";
18
+ import { defaultDialogMessage, dialogVariableStore, enableDialogueOverlay, updateRate } from "./DialogManagerStore";
19
+ import { DialogProcessor } from "./DialogProcessor";
20
+ const shouldDebugYarn = false;
21
+ export class DialogManager {
22
+ dialogMessageMap = new Map();
23
+ dialogMessageList = [];
24
+ fullCurrentMessage = defaultDialogMessage[0].textContent;
25
+ currentMessageMeta = defaultDialogMessage[0];
26
+ currentMessage = writable("");
27
+ currentIndex = 0;
28
+ previousTimestamp = 0;
29
+ isDoneTransition = false;
30
+ currentPortrait = writable();
31
+ portraitMap = new Map();
32
+ currentState = DialogState.Visible;
33
+ hidePercent = tweened(100, {
34
+ duration: 400,
35
+ easing: cubicOut
36
+ }); // 100 = 100%
37
+ skipNextActiveTime = 0;
38
+ dialogProcessor = new DialogProcessor();
39
+ // for queueing actions
40
+ _setDialogChoiceQueue = [];
41
+ _setDialogChoiceMutex = false;
42
+ onSetDialogListeners = [];
43
+ constructor() {
44
+ enableDialogueOverlay.subscribe((value) => {
45
+ // todo: investigate why we cant put setDialogDefault inside the then clause
46
+ // ISSUE #82 https://github.com/TurnipXenon/pineapple/issues/82
47
+ if (value) {
48
+ this.hidePercent.set(0);
49
+ this.setDialogToDefault();
50
+ }
51
+ else {
52
+ this.hidePercent.set(100);
53
+ this.setDialogTree([{ textContent: "" }]);
54
+ }
55
+ });
56
+ }
57
+ /**
58
+ * when users interact with the dialog, they can skip the transition like in a game
59
+ * note that there is a cool down to this, check out skipNextActiveTime
60
+ */
61
+ skipAnimation = () => {
62
+ if (this.previousTimestamp > this.skipNextActiveTime &&
63
+ this.currentState == DialogState.Visible &&
64
+ !this.isDoneTransition // crucial for dynamic links!
65
+ ) {
66
+ this.currentIndex = this.fullCurrentMessage.length - 1;
67
+ this.currentMessage.update(() => this.fullCurrentMessage.slice(0, this.currentIndex));
68
+ }
69
+ };
70
+ /**
71
+ * hides or shows the dialog UI
72
+ * @param shouldEnable
73
+ */
74
+ enableDialog = (shouldEnable) => {
75
+ enableDialogueOverlay.update(() => shouldEnable);
76
+ };
77
+ /**
78
+ * sets the possible dialog that might appear on the Dialog UI
79
+ * note that it overwrites the previous tree and does not append on it due to the possibility
80
+ * of node name conflicts
81
+ * @param newMessageList
82
+ */
83
+ setDialogTree = (newMessageList) => {
84
+ this.dialogMessageList = newMessageList;
85
+ this.dialogMessageMap.clear();
86
+ newMessageList.map((value) => {
87
+ if (value.dialogId) {
88
+ this.dialogMessageMap.set(value.dialogId, value);
89
+ }
90
+ });
91
+ // lazy load map
92
+ if (this.portraitMap.size == 0) {
93
+ this.portraitMap.set(PortraitType.AresHappy.toString(), AresHappy);
94
+ this.portraitMap.set(PortraitType.AresBlushing.toString(), AresBlushing);
95
+ this.portraitMap.set(PortraitType.AresDisappointed.toString(), AresDisappointed);
96
+ this.portraitMap.set(PortraitType.AresLetsGo.toString(), AresLetsGo);
97
+ this.portraitMap.set(PortraitType.AresMad.toString(), AresMad);
98
+ this.portraitMap.set(PortraitType.AresNeutral.toString(), AresNeutral);
99
+ this.portraitMap.set(PortraitType.AresSlightlyMad.toString(), AresSlightlyMad);
100
+ this.portraitMap.set(PortraitType.AresSurprised.toString(), AresSurprised);
101
+ this.portraitMap.set(PortraitType.AresYay.toString(), AresYay);
102
+ }
103
+ this.setDialogChoice(newMessageList[0]);
104
+ };
105
+ /**
106
+ * Remember to call this before SetDialogTree
107
+ * and unsubscribe during onDestroy
108
+ * @param callback
109
+ */
110
+ subscribeToSetDialogChoice = (callback) => {
111
+ this.onSetDialogListeners.push(callback);
112
+ };
113
+ /**
114
+ * Remember to call this during onDestroy
115
+ * @param callback
116
+ * todo: double check if this works???
117
+ */
118
+ unsubscribeToSetDialogChoice = (callback) => {
119
+ // from: https://stackoverflow.com/a/5767357/17836168
120
+ const index = this.onSetDialogListeners.indexOf(callback);
121
+ if (index > -1) {
122
+ // only splice array when item is found
123
+ this.onSetDialogListeners.splice(index, 1); // 2nd parameter means remove one item only
124
+ }
125
+ };
126
+ /**
127
+ * Sets the next dialog to show depending on which special choice a href link the user
128
+ * has interacted with
129
+ * @param newMessage
130
+ *
131
+ * you can listen to this!
132
+ */
133
+ setDialogChoice = (newMessage) => {
134
+ if (!newMessage || !newMessage.textContent) {
135
+ return;
136
+ }
137
+ this._setDialogChoiceQueue.push(newMessage);
138
+ if (!this._setDialogChoiceMutex) {
139
+ this._setDialogChoiceMutex = true; // not a true mutex but this will do
140
+ this._setDialogChoice();
141
+ }
142
+ };
143
+ _setDialogChoice = () => {
144
+ const newMessage = this._setDialogChoiceQueue.shift();
145
+ if (newMessage === undefined) {
146
+ this._setDialogChoiceMutex = false; // set it free!
147
+ this.onSetDialogListeners.forEach((listener) => {
148
+ listener(this.currentMessageMeta);
149
+ });
150
+ return;
151
+ }
152
+ this.currentMessageMeta = newMessage;
153
+ // set the portrait
154
+ let portraitValue = AresHappy;
155
+ if (this.currentMessageMeta.portraitType) {
156
+ portraitValue = this.portraitMap.get(this.currentMessageMeta.portraitType);
157
+ }
158
+ if (portraitValue) {
159
+ this.currentPortrait.update(() => portraitValue);
160
+ }
161
+ // process the dialogue here line-by-line
162
+ this.fullCurrentMessage = this.dialogProcessor.processDialog(this.currentMessageMeta);
163
+ this.currentMessage.update(() => "");
164
+ this.currentIndex = 0;
165
+ this.skipNextActiveTime = this.previousTimestamp + 1000; // guard
166
+ this.isDoneTransition = false; // must be after the guard
167
+ if (shouldDebugYarn) {
168
+ console.info(`Currently processing node: ${this.currentMessageMeta.dialogId}`);
169
+ }
170
+ // save that we visited AND processed the node
171
+ if (this.currentMessageMeta.dialogId) {
172
+ const key = `+${this.currentMessageMeta.dialogId}`;
173
+ const value = Number(dialogVariableStore.getItem(key));
174
+ if (isNaN(value)) {
175
+ dialogVariableStore.setItem(key, "1");
176
+ }
177
+ else {
178
+ dialogVariableStore.setItem(key, `${value + 1}`);
179
+ }
180
+ }
181
+ // reloop this to process all messages
182
+ this._setDialogChoice();
183
+ };
184
+ setDialogToDefault = () => {
185
+ this.setDialogTree(defaultDialogMessage);
186
+ };
187
+ /**
188
+ * updates the information and detail frame by frame
189
+ * you can think of this like the main game loop
190
+ *
191
+ * @param timestamp
192
+ *
193
+ * todo: this might be too big we might want to refactor this method for better readability
194
+ * ISSUE #81 https://github.com/TurnipXenon/pineapple/issues/81
195
+ */
196
+ update = (timestamp) => {
197
+ if (this.currentState == DialogState.Invisible || this.currentState == DialogState.Busy) {
198
+ window.requestAnimationFrame(this.update);
199
+ return;
200
+ }
201
+ // if visible
202
+ // text transition loop
203
+ if (!this.isDoneTransition && this.currentIndex > this.fullCurrentMessage.length) {
204
+ const elementList = document.getElementsByClassName("dialog-choice");
205
+ for (const el of elementList) {
206
+ el.addEventListener("click", (event) => {
207
+ // todo: make more robust; for now we're assuming first class is our choice
208
+ const choice = el.classList[0].split("-")[1];
209
+ this.setDialogChoice(this.dialogMessageMap.get(choice));
210
+ });
211
+ }
212
+ this.isDoneTransition = true;
213
+ }
214
+ // guard: skip if done or if not yet time to update
215
+ if (this.currentIndex > this.fullCurrentMessage.length ||
216
+ this.previousTimestamp + updateRate > timestamp) {
217
+ window.requestAnimationFrame(this.update);
218
+ return;
219
+ }
220
+ this.previousTimestamp = timestamp;
221
+ // check if valid text
222
+ // there is an assumption that previous character is valid
223
+ // let validCharacterIndex = this.currentLength - 1;
224
+ // validCharacterIndex++;
225
+ // the code above is just to show you how it looks like but let's assume
226
+ // that currentLength = validCharacter + 1
227
+ while (this.fullCurrentMessage[this.currentIndex] == "<" &&
228
+ this.currentIndex + 1 < this.fullCurrentMessage.length) {
229
+ // find valid character, trap with closing
230
+ this.currentIndex = this.fullCurrentMessage.indexOf(">", this.currentIndex) + 1;
231
+ // normalize
232
+ this.currentIndex = Math.min(this.currentIndex, this.fullCurrentMessage.length - 1);
233
+ }
234
+ this.currentMessage.update(() => this.fullCurrentMessage.slice(0, this.currentIndex));
235
+ // increment
236
+ ++this.currentIndex;
237
+ window.requestAnimationFrame(this.update);
238
+ };
239
+ }