@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,52 @@
1
+ /**
2
+ * DialogManagerStore is for variables that will be used as a Svelte store
3
+ * or is saved in local storage
4
+ */
5
+
6
+ import type { DialogMapStore } from "$lib/types/pineapple_fiber/DialogVariableStore";
7
+ import { createNewMapStore } from "$lib/types/pineapple_fiber/DialogVariableStore";
8
+ import { writable } from "svelte/store";
9
+ import type { DialogDetail } from "$lib/types/pineapple_fiber/DialogDetail";
10
+ import { DialogManager } from "$lib/components/dialog_manager/DialogManager";
11
+
12
+ /**
13
+ * Enables the dialogue overlay
14
+ *
15
+ * @example
16
+ * When updating to false, remember to restore the value to true, our default value, onDestroy.
17
+ * Avoid async to prevent weird flashes of updates!
18
+ * ```
19
+ * import {enableDialogueOverlay} from "$lib/store.ts";
20
+ * enableDialogueOverlay.update(() => false);
21
+ *
22
+ * onDestroy(() => {
23
+ * enableDialogueOverlay.update(() => true);
24
+ * });
25
+ * ```
26
+ */
27
+ export const enableDialogueOverlay = writable(true);
28
+
29
+ export const dialogVariableStore: DialogMapStore = createNewMapStore();
30
+ export const updateRate: number = 40 / 1000; // *at least* 40ms per letter
31
+
32
+ // todo: if we go through doing yarn to typescript, move this!
33
+ export const defaultDialogMessage: DialogDetail[] = [
34
+ {
35
+ textContent: `<p>Have you drank water? Or perhaps, you've checked out <a target="_blank" class="external-link" href="http://crouton.net">one of the best webpages</a> out there?`
36
+ }
37
+ ];
38
+
39
+ /**
40
+ * strictly must be declared last! or you might receive a weird error that looks like:
41
+ *
42
+ * 2:04:21 AM [vite] Error when evaluating SSR module /src/lib/components/dialog_manager/DialogManagerStore.ts:
43
+ * |- TypeError: Cannot read properties of undefined (reading '0')
44
+ * at <instance_members_initializer> (/src/lib/components/dialog_manager/DialogManager.ts:38:67)
45
+ * at new DialogManager (/src/lib/components/dialog_manager/DialogManager.ts:53:14)
46
+ * at eval (/src/lib/components/dialog_manager/DialogManagerStore.ts:15:23)
47
+ * at async instantiateModule (file:///C:/Users/Pumpkin/Projects/Web/pineapple/node_modules/vite/dist/node/chunks/dep-934dbc7c.js:54360:9)
48
+ *
49
+ * what this means is that one member of dialogManager cannot be initialized. in our case, it was the
50
+ * defaultDialogMessage not yet being initialized
51
+ */
52
+ export const dialogManager = new DialogManager();
@@ -0,0 +1,68 @@
1
+ import type { DialogDetail } from "$lib/types/pineapple_fiber/DialogDetail";
2
+ import { BehaviorState } from "$lib/components/dialog_manager/behavior_tree/line_processors/BehaviorState";
3
+ import { IfNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/IfNode";
4
+ import { EndIfNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/EndIfNode";
5
+ import { ElseNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/ElseNode";
6
+ import { ElseIfNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/ElseIfNode";
7
+ import { SetVariableNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/SetVariableNode";
8
+ import { IgnoreGuardNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode";
9
+ import { NormalLineProcessorNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode";
10
+ import { LineSelectorNode } from "$lib/components/dialog_manager/behavior_tree/line_core/LineSelectorNode";
11
+ import { browser } from "$app/environment";
12
+ import { LineCommentNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/LineCommentNode";
13
+ import { DeclareCommand } from "$lib/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand";
14
+ import { JumpCommand } from "$lib/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand";
15
+ import { IgnoreJumpNode } from "$lib/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode";
16
+ import { UnvisitCommand } from "$lib/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand";
17
+
18
+ /**
19
+ * DialogProcessor processes dialogs
20
+ */
21
+ export class DialogProcessor {
22
+ processingTree = new LineSelectorNode([
23
+ /*region comment based formats*/
24
+ new IgnoreJumpNode(), // must be prioritized above line comment node
25
+ new LineCommentNode(),
26
+ /*endregion commend based formats*/
27
+ new EndIfNode(),
28
+ new ElseIfNode(),
29
+ new ElseNode(),
30
+ new IfNode(),
31
+ new IgnoreGuardNode(),
32
+ /*region commands*/
33
+ new SetVariableNode(),
34
+ new DeclareCommand(),
35
+ new JumpCommand(),
36
+ new UnvisitCommand(),
37
+ /*endregion commands*/
38
+ new NormalLineProcessorNode()
39
+ ]);
40
+
41
+ /**
42
+ * process the dialog line by line and return a presentable string
43
+ * @param dialogDetail
44
+ */
45
+ processDialog = (dialogDetail: DialogDetail): string => {
46
+ if (!browser) {
47
+ return ""; // don't process any line in the server
48
+ }
49
+
50
+ let currentState = new BehaviorState();
51
+
52
+ // split each yarn line
53
+ return dialogDetail.textContent
54
+ .trim()
55
+ .split("\n")
56
+ .map((line_, index) => {
57
+ const result = this.processingTree.process({
58
+ initState: currentState,
59
+ line: line_.trim(),
60
+ lineIndex: index
61
+ });
62
+ currentState = result.nextState;
63
+
64
+ return result.renderedLine;
65
+ })
66
+ .join("\n"); // combine all processed lines
67
+ };
68
+ }
@@ -0,0 +1,10 @@
1
+ import { dialogVariableStore } from "$lib/components/dialog_manager/DialogManagerStore";
2
+
3
+ class _DialogUtils {
4
+ isNodeVisited = (dialogId: string): boolean => {
5
+ const value = Number(dialogVariableStore.getItem(`+${dialogId}`));
6
+ return !isNaN(value) && value > 0;
7
+ };
8
+ }
9
+
10
+ export const DialogUtils = new _DialogUtils();
@@ -0,0 +1,40 @@
1
+ class BTreeUtils {
2
+ /**
3
+ * peek the top of a stack object with the assumption it's not an empty stack
4
+ * todo: add possible protection like an assertion
5
+ * @param stack
6
+ * @return top of the stack
7
+ */
8
+ peek = <T>(stack: T[]): T => {
9
+ return stack[stack.length - 1];
10
+ };
11
+
12
+ removeQuotes = (value: string): string => {
13
+ return value
14
+ .replace(/^"/, "") // remove possible " at the start: https://stackoverflow.com/a/2182602
15
+ .replace(/"$/, ""); // remove possible " at the end: https://stackoverflow.com/a/12249011
16
+ };
17
+
18
+ simplifyToken = (oldToken: string): string => {
19
+ if (oldToken[0] == "$") {
20
+ const value = localStorage.getItem(oldToken);
21
+ if (value) {
22
+ return value;
23
+ }
24
+ console.error(`Value obtained in local storage false: ${oldToken}`);
25
+ return "";
26
+ }
27
+
28
+ return btreeUtils.removeQuotes(oldToken);
29
+ };
30
+
31
+ isTrue = (value: string): boolean => {
32
+ return value.trim().toLowerCase() === "true";
33
+ };
34
+
35
+ isFalse = (value: string): boolean => {
36
+ return value.trim().toLowerCase() === "false";
37
+ };
38
+ }
39
+
40
+ export const btreeUtils = new BTreeUtils();
@@ -0,0 +1,5 @@
1
+ import type { BehaviorStatus } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorStatus";
2
+
3
+ export interface BaseBehaviorResult {
4
+ status: BehaviorStatus;
5
+ }
@@ -0,0 +1,3 @@
1
+ export interface BehaviorNode<Argument, Result> {
2
+ process: (nodeArgs: Argument) => Result;
3
+ }
@@ -0,0 +1,5 @@
1
+ export enum BehaviorStatus {
2
+ Running,
3
+ Success,
4
+ Failure
5
+ }
@@ -0,0 +1,32 @@
1
+ import type { BehaviorNode } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorNode";
2
+ import { BehaviorStatus } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorStatus";
3
+ import type { BaseBehaviorResult } from "$lib/components/dialog_manager/behavior_tree/core/BaseBehaviorResult";
4
+
5
+ /**
6
+ * Selector is a composite behavior node where it tries to process everything until it
7
+ * finds a non-failing node
8
+ */
9
+ export abstract class SelectorNode<Argument, Result extends BaseBehaviorResult>
10
+ implements BehaviorNode<Argument, Result>
11
+ {
12
+ nodeList: BehaviorNode<Argument, Result>[];
13
+ abstract defaultResult: () => Result;
14
+
15
+ protected constructor(nodeList: BehaviorNode<Argument, Result>[]) {
16
+ this.nodeList = nodeList;
17
+ }
18
+
19
+ process(nodeArgs: Argument): Result {
20
+ let finalResult: Result = this.defaultResult();
21
+
22
+ for (const node of this.nodeList) {
23
+ const currentResult = node.process(nodeArgs);
24
+ if (currentResult.status !== BehaviorStatus.Failure) {
25
+ finalResult = currentResult;
26
+ break;
27
+ }
28
+ }
29
+
30
+ return finalResult;
31
+ }
32
+ }
@@ -0,0 +1,6 @@
1
+ import type { ExpressionState } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionState";
2
+
3
+ export interface ExpressionArguments {
4
+ token: string;
5
+ initState: ExpressionState;
6
+ }
@@ -0,0 +1,5 @@
1
+ import type { BehaviorNode } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorNode";
2
+ import type { ExpressionArguments } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments";
3
+ import type { ExpressionResult } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionResult";
4
+
5
+ export type ExpressionBehaviorNode = BehaviorNode<ExpressionArguments, ExpressionResult>;
@@ -0,0 +1,236 @@
1
+ import { browser } from "$app/environment";
2
+ import { OperatorNode } from "$lib/components/dialog_manager/behavior_tree/expression/OperatorNode";
3
+ import { OperandNode } from "$lib/components/dialog_manager/behavior_tree/expression/OperandNode";
4
+ import { ExpressionSelectorNode } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode";
5
+ import type { ExpressionState } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionState";
6
+ import { btreeUtils } from "$lib/components/dialog_manager/behavior_tree/core/BTreeUtils";
7
+ import { CommandExpressionNode } from "$lib/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode";
8
+
9
+ class ExpressionEvaluator {
10
+ evaluatorTree = new ExpressionSelectorNode([
11
+ new OperatorNode(),
12
+ new CommandExpressionNode(),
13
+ new OperandNode()
14
+ ]);
15
+
16
+ // from https://stackoverflow.com/a/175787/17836168
17
+ isNumeric = (str: string): boolean => {
18
+ return (
19
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
20
+ // @ts-ignore
21
+ !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
22
+ !isNaN(parseFloat(str))
23
+ ); // ...and ensure strings of whitespace fail
24
+ };
25
+
26
+ getPrecedence = (token: string): number => {
27
+ switch (token) {
28
+ case "&&":
29
+ case "||":
30
+ case "^":
31
+ return 1;
32
+ case "==":
33
+ case "!=":
34
+ return 2;
35
+ case "<":
36
+ case ">":
37
+ case ">=":
38
+ case "<=":
39
+ return 3;
40
+ case "+":
41
+ case "-":
42
+ return 4;
43
+ case "*":
44
+ case "/":
45
+ case "%":
46
+ return 3;
47
+ case "!":
48
+ return 4;
49
+ case "(":
50
+ case ")":
51
+ return 0; // hack lol
52
+ default:
53
+ // usable to test if operator lol
54
+ // console.error(`Unknown token: ${token}`);
55
+ return -1;
56
+ }
57
+ };
58
+
59
+ evaluateFreeform = (line: string, prefix: string): string[] => {
60
+ if (!browser) {
61
+ return []; // do not process when not in browser
62
+ }
63
+
64
+ // tokenize first!
65
+ const infixTokens: string[] = [];
66
+ const expression = line
67
+ .split("//")[0]
68
+ .trim()
69
+ .slice(prefix === "" ? 0 : prefix.trim().length + 1, line.length - 2);
70
+
71
+ // region tokenizer
72
+ // console.log("Tokenizing:", expression);
73
+ const operators = "+-*/%!<>=&|^";
74
+ let currentToken = "";
75
+ let escapeToggle = false;
76
+ let quoteToggle = false;
77
+ let operatorFound = false;
78
+ for (const character of expression) {
79
+ if (escapeToggle) {
80
+ currentToken += character;
81
+ escapeToggle = false;
82
+ } else if (quoteToggle) {
83
+ currentToken += character;
84
+ if (character === '"') {
85
+ infixTokens.push(currentToken);
86
+ currentToken = "";
87
+ quoteToggle = false;
88
+ }
89
+ } else if (operatorFound) {
90
+ if (operators.includes(character)) {
91
+ currentToken += character;
92
+ } else if ("()".includes(character)) {
93
+ if (currentToken !== "") {
94
+ infixTokens.push(currentToken);
95
+ }
96
+ infixTokens.push(character);
97
+ currentToken = "";
98
+ operatorFound = false;
99
+ } else {
100
+ operatorFound = false;
101
+ infixTokens.push(currentToken);
102
+ if (character !== " ") {
103
+ currentToken = character;
104
+ } else {
105
+ currentToken = "";
106
+ }
107
+ }
108
+ } else if (character === "," || character === " ") {
109
+ if (currentToken !== "") {
110
+ infixTokens.push(currentToken);
111
+ currentToken = "";
112
+ }
113
+ } else if (character === '"') {
114
+ // do quote stuff unless we had an escape toggle
115
+ currentToken += character;
116
+ quoteToggle = true;
117
+ } else if (operators.includes(character)) {
118
+ if (currentToken !== "") {
119
+ infixTokens.push(currentToken);
120
+ }
121
+ currentToken = character;
122
+ operatorFound = true;
123
+ } else if ("()".includes(character)) {
124
+ if (currentToken !== "") {
125
+ // determine if function
126
+ if (
127
+ currentToken[0] !== "$" && // should not be a variable stand-in
128
+ currentToken[0] !== '"' && // should not be a string literal
129
+ !this.isNumeric(currentToken[0]) // should not be a number literal
130
+ ) {
131
+ currentToken = `#${currentToken}`;
132
+ }
133
+
134
+ infixTokens.push(currentToken);
135
+ }
136
+ infixTokens.push(character);
137
+ currentToken = "";
138
+ } else {
139
+ currentToken += character;
140
+ }
141
+ }
142
+
143
+ if (currentToken !== "") {
144
+ infixTokens.push(currentToken);
145
+ }
146
+
147
+ // console.log(infixTokens);
148
+ // endregion tokenizer
149
+
150
+ // region infix to postfix
151
+
152
+ // convert from infix to postfix
153
+ // algo from https://www.geeksforgeeks.org/convert-infix-expression-to-postfix-expression/
154
+ // console.log(infixTokens);
155
+ const postfixTokens: string[] = [];
156
+ const stack: string[] = [];
157
+
158
+ infixTokens.forEach((token) => {
159
+ if (token.startsWith("#")) {
160
+ stack.push(token);
161
+ } else if (token === "(") {
162
+ stack.push("(");
163
+ } else if (token === ")") {
164
+ while (btreeUtils.peek(stack) !== "(") {
165
+ // just for safety
166
+ if (stack.length === 0) {
167
+ console.error(
168
+ "Assumption was made in postfix conversion that stack will not be empty! It was wrong!"
169
+ );
170
+ throw new Error("Wrong postfix conversion!");
171
+ }
172
+
173
+ postfixTokens.push(<string>stack.pop());
174
+ }
175
+
176
+ stack.pop(); // remove "("
177
+
178
+ if (stack.length > 0 && btreeUtils.peek(stack).startsWith("#")) {
179
+ postfixTokens.push(<string>stack.pop());
180
+ }
181
+ } else if (![-1, 5].includes(this.getPrecedence(token))) {
182
+ while (
183
+ stack.length > 0 &&
184
+ this.getPrecedence(btreeUtils.peek(stack)) >= this.getPrecedence(token)
185
+ ) {
186
+ postfixTokens.push(<string>stack.pop());
187
+ }
188
+ stack.push(token);
189
+ } else {
190
+ // operand
191
+ postfixTokens.push(token);
192
+ }
193
+ });
194
+
195
+ // pop all remaining elements from the stack
196
+ while (stack.length > 0) {
197
+ postfixTokens.push(<string>stack.pop());
198
+ }
199
+
200
+ // console.log("Finished postfix", postfixTokens);
201
+ // endregion infix to postfix
202
+
203
+ // evaluate
204
+ let currentState: ExpressionState = {
205
+ operandStack: []
206
+ };
207
+
208
+ postfixTokens.forEach((token) => {
209
+ // console.log("Current token", token);
210
+ const result = this.evaluatorTree.process({
211
+ initState: currentState,
212
+ token: token
213
+ });
214
+ // console.log("Token evaluated with result", result.nextState.operandStack.toString());
215
+ currentState = result.nextState;
216
+ });
217
+
218
+ // console.log("Result", currentState.operandStack);
219
+ return currentState.operandStack;
220
+ };
221
+
222
+ /**
223
+ * evaluates a yarn if or elseif statement
224
+ * @param line is the current line being evaluated
225
+ * @param prefix is either "<<if" or "<<elseif"
226
+ */
227
+ evaluate = (line: string, prefix: string): boolean => {
228
+ if (!browser) {
229
+ return false; // do not process when not in browser
230
+ }
231
+
232
+ return String(btreeUtils.peek(this.evaluateFreeform(line, prefix))) === "true";
233
+ };
234
+ }
235
+
236
+ export const expressionEvaluator = new ExpressionEvaluator();
@@ -0,0 +1,6 @@
1
+ import type { BaseBehaviorResult } from "$lib/components/dialog_manager/behavior_tree/core/BaseBehaviorResult";
2
+ import type { ExpressionState } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionState";
3
+
4
+ export interface ExpressionResult extends BaseBehaviorResult {
5
+ nextState: ExpressionState;
6
+ }
@@ -0,0 +1,20 @@
1
+ import { SelectorNode } from "$lib/components/dialog_manager/behavior_tree/core/SelectorNode";
2
+ import type { ExpressionArguments } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments";
3
+ import type { ExpressionResult } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionResult";
4
+ import { BehaviorStatus } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorStatus";
5
+ import type { ExpressionBehaviorNode } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode";
6
+
7
+ export class ExpressionSelectorNode extends SelectorNode<ExpressionArguments, ExpressionResult> {
8
+ constructor(nodeList: ExpressionBehaviorNode[]) {
9
+ super(nodeList);
10
+ }
11
+
12
+ defaultResult = (): ExpressionResult => {
13
+ return {
14
+ nextState: {
15
+ operandStack: []
16
+ },
17
+ status: BehaviorStatus.Failure
18
+ };
19
+ };
20
+ }
@@ -0,0 +1,3 @@
1
+ export interface ExpressionState {
2
+ operandStack: string[];
3
+ }
@@ -0,0 +1,19 @@
1
+ import type { ExpressionBehaviorNode } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments";
3
+ import type { ExpressionResult } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionResult";
4
+ import { BehaviorStatus } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorStatus";
5
+ import { btreeUtils } from "$lib/components/dialog_manager/behavior_tree/core/BTreeUtils";
6
+
7
+ /**
8
+ * Puts the token as an operand
9
+ * It's always successful
10
+ */
11
+ export class OperandNode implements ExpressionBehaviorNode {
12
+ process(nodeArgs: ExpressionArguments): ExpressionResult {
13
+ nodeArgs.initState.operandStack.push(btreeUtils.simplifyToken(nodeArgs.token));
14
+ return {
15
+ nextState: nodeArgs.initState,
16
+ status: BehaviorStatus.Success
17
+ };
18
+ }
19
+ }
@@ -0,0 +1,37 @@
1
+ import type { ExpressionBehaviorNode } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments";
3
+ import type { ExpressionResult } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionResult";
4
+ import { BehaviorStatus } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorStatus";
5
+ import { operatorMap } from "$lib/components/dialog_manager/behavior_tree/expression/operators/OperatorMap";
6
+
7
+ /**
8
+ * A leaf node that returns:
9
+ * - Success if the current token is an operator, and does its associated logic
10
+ * - Failure if it is not an operator
11
+ */
12
+ export class OperatorNode implements ExpressionBehaviorNode {
13
+ process(nodeArgs: ExpressionArguments): ExpressionResult {
14
+ if (!operatorMap.exists(nodeArgs.token)) {
15
+ return {
16
+ nextState: nodeArgs.initState,
17
+ status: BehaviorStatus.Failure
18
+ };
19
+ }
20
+
21
+ const logic = operatorMap.get(nodeArgs.token);
22
+ if (logic === undefined) {
23
+ console.error(`Unimplemented operator: ${nodeArgs.token}`);
24
+ return {
25
+ nextState: nodeArgs.initState,
26
+ status: BehaviorStatus.Failure
27
+ };
28
+ }
29
+
30
+ logic.process(nodeArgs);
31
+
32
+ return {
33
+ nextState: nodeArgs.initState,
34
+ status: BehaviorStatus.Success
35
+ };
36
+ }
37
+ }
@@ -0,0 +1,28 @@
1
+ import type { ExpressionBehaviorNode } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments";
3
+ import type { ExpressionResult } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionResult";
4
+ import { commandMap } from "$lib/components/dialog_manager/behavior_tree/expression/commands/CommandMap";
5
+ import { BehaviorStatus } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorStatus";
6
+
7
+ export class CommandExpressionNode implements ExpressionBehaviorNode {
8
+ process(nodeArgs: ExpressionArguments): ExpressionResult {
9
+ const commandNode = commandMap.get(nodeArgs.token);
10
+ if (commandNode === undefined) {
11
+ if (nodeArgs.token.startsWith("#")) {
12
+ console.error(`Unimplemented command: ${nodeArgs.token}`);
13
+ }
14
+
15
+ return {
16
+ nextState: nodeArgs.initState,
17
+ status: BehaviorStatus.Failure
18
+ };
19
+ }
20
+
21
+ commandNode.process(nodeArgs);
22
+
23
+ return {
24
+ nextState: nodeArgs.initState,
25
+ status: BehaviorStatus.Success
26
+ };
27
+ }
28
+ }
@@ -0,0 +1,34 @@
1
+ import type { ExpressionBehaviorNode } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments";
3
+ import type { ExpressionResult } from "$lib/components/dialog_manager/behavior_tree/expression/ExpressionResult";
4
+ import { BehaviorStatus } from "$lib/components/dialog_manager/behavior_tree/core/BehaviorStatus";
5
+
6
+ export abstract class CommandLogicNode implements ExpressionBehaviorNode {
7
+ abstract getToken: () => string;
8
+ abstract getArgumentCount: () => number;
9
+ abstract doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void; // do side effects on to the result instead
10
+
11
+ process(nodeArgs: ExpressionArguments): ExpressionResult {
12
+ const currentOperands = nodeArgs.initState.operandStack.slice(
13
+ nodeArgs.initState.operandStack.length - this.getArgumentCount(),
14
+ nodeArgs.initState.operandStack.length
15
+ );
16
+ nodeArgs.initState.operandStack = nodeArgs.initState.operandStack.slice(
17
+ 0,
18
+ nodeArgs.initState.operandStack.length - this.getArgumentCount()
19
+ );
20
+
21
+ if (currentOperands.length !== this.getArgumentCount()) {
22
+ console.error(`Insufficient operands/arguments found for command ${this.getToken()}`);
23
+ console.error(`Arguments found instead: ${currentOperands}`);
24
+ console.error(`Error occurred at token: ${nodeArgs.token}`);
25
+ } else {
26
+ this.doOperation(currentOperands, nodeArgs);
27
+ }
28
+
29
+ return {
30
+ nextState: nodeArgs.initState,
31
+ status: BehaviorStatus.Success
32
+ };
33
+ }
34
+ }
@@ -0,0 +1,26 @@
1
+ import type { CommandLogicNode } from "$lib/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode";
2
+ import { RandomRangeCommand } from "$lib/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand";
3
+ import { VisitedCountCommand } from "$lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand";
4
+ import { VisitedCommand } from "$lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand";
5
+
6
+ class CommandMap {
7
+ _commandMap: Map<string, CommandLogicNode> = new Map();
8
+
9
+ constructor() {
10
+ [new RandomRangeCommand(), new VisitedCountCommand(), new VisitedCommand()].forEach(
11
+ (commandLogic) => {
12
+ this._commandMap.set(commandLogic.getToken(), commandLogic);
13
+ }
14
+ );
15
+ }
16
+
17
+ get = (command: string): CommandLogicNode | undefined => {
18
+ return this._commandMap.get(command);
19
+ };
20
+
21
+ exists = (command: string): boolean => {
22
+ return this.get(command) !== undefined;
23
+ };
24
+ }
25
+
26
+ export const commandMap = new CommandMap();