@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,30 @@
1
+ import { BehaviorStatus } from "../core/BehaviorStatus";
2
+ import { operatorMap } from "./operators/OperatorMap";
3
+ /**
4
+ * A leaf node that returns:
5
+ * - Success if the current token is an operator, and does its associated logic
6
+ * - Failure if it is not an operator
7
+ */
8
+ export class OperatorNode {
9
+ process(nodeArgs) {
10
+ if (!operatorMap.exists(nodeArgs.token)) {
11
+ return {
12
+ nextState: nodeArgs.initState,
13
+ status: BehaviorStatus.Failure
14
+ };
15
+ }
16
+ const logic = operatorMap.get(nodeArgs.token);
17
+ if (logic === undefined) {
18
+ console.error(`Unimplemented operator: ${nodeArgs.token}`);
19
+ return {
20
+ nextState: nodeArgs.initState,
21
+ status: BehaviorStatus.Failure
22
+ };
23
+ }
24
+ logic.process(nodeArgs);
25
+ return {
26
+ nextState: nodeArgs.initState,
27
+ status: BehaviorStatus.Success
28
+ };
29
+ }
30
+ }
@@ -0,0 +1,6 @@
1
+ import type { ExpressionBehaviorNode } from "../ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ import type { ExpressionResult } from "../ExpressionResult";
4
+ export declare class CommandExpressionNode implements ExpressionBehaviorNode {
5
+ process(nodeArgs: ExpressionArguments): ExpressionResult;
6
+ }
@@ -0,0 +1,21 @@
1
+ import { commandMap } from "./CommandMap";
2
+ import { BehaviorStatus } from "../../core/BehaviorStatus";
3
+ export class CommandExpressionNode {
4
+ process(nodeArgs) {
5
+ const commandNode = commandMap.get(nodeArgs.token);
6
+ if (commandNode === undefined) {
7
+ if (nodeArgs.token.startsWith("#")) {
8
+ console.error(`Unimplemented command: ${nodeArgs.token}`);
9
+ }
10
+ return {
11
+ nextState: nodeArgs.initState,
12
+ status: BehaviorStatus.Failure
13
+ };
14
+ }
15
+ commandNode.process(nodeArgs);
16
+ return {
17
+ nextState: nodeArgs.initState,
18
+ status: BehaviorStatus.Success
19
+ };
20
+ }
21
+ }
@@ -0,0 +1,9 @@
1
+ import type { ExpressionBehaviorNode } from "../ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ import type { ExpressionResult } from "../ExpressionResult";
4
+ export declare abstract class CommandLogicNode implements ExpressionBehaviorNode {
5
+ abstract getToken: () => string;
6
+ abstract getArgumentCount: () => number;
7
+ abstract doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
8
+ process(nodeArgs: ExpressionArguments): ExpressionResult;
9
+ }
@@ -0,0 +1,19 @@
1
+ import { BehaviorStatus } from "../../core/BehaviorStatus";
2
+ export class CommandLogicNode {
3
+ process(nodeArgs) {
4
+ const currentOperands = nodeArgs.initState.operandStack.slice(nodeArgs.initState.operandStack.length - this.getArgumentCount(), nodeArgs.initState.operandStack.length);
5
+ nodeArgs.initState.operandStack = nodeArgs.initState.operandStack.slice(0, nodeArgs.initState.operandStack.length - this.getArgumentCount());
6
+ if (currentOperands.length !== this.getArgumentCount()) {
7
+ console.error(`Insufficient operands/arguments found for command ${this.getToken()}`);
8
+ console.error(`Arguments found instead: ${currentOperands}`);
9
+ console.error(`Error occurred at token: ${nodeArgs.token}`);
10
+ }
11
+ else {
12
+ this.doOperation(currentOperands, nodeArgs);
13
+ }
14
+ return {
15
+ nextState: nodeArgs.initState,
16
+ status: BehaviorStatus.Success
17
+ };
18
+ }
19
+ }
@@ -0,0 +1,9 @@
1
+ import type { CommandLogicNode } from "./CommandLogicNode";
2
+ declare class CommandMap {
3
+ _commandMap: Map<string, CommandLogicNode>;
4
+ constructor();
5
+ get: (command: string) => CommandLogicNode | undefined;
6
+ exists: (command: string) => boolean;
7
+ }
8
+ export declare const commandMap: CommandMap;
9
+ export {};
@@ -0,0 +1,18 @@
1
+ import { RandomRangeCommand } from "./RandomRangeCommand";
2
+ import { VisitedCountCommand } from "./VisitedCountCommand";
3
+ import { VisitedCommand } from "./VisitedCommand";
4
+ class CommandMap {
5
+ _commandMap = new Map();
6
+ constructor() {
7
+ [new RandomRangeCommand(), new VisitedCountCommand(), new VisitedCommand()].forEach((commandLogic) => {
8
+ this._commandMap.set(commandLogic.getToken(), commandLogic);
9
+ });
10
+ }
11
+ get = (command) => {
12
+ return this._commandMap.get(command);
13
+ };
14
+ exists = (command) => {
15
+ return this.get(command) !== undefined;
16
+ };
17
+ }
18
+ export const commandMap = new CommandMap();
@@ -0,0 +1,15 @@
1
+ import { CommandLogicNode } from "./CommandLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ /**
4
+ * Used for command like
5
+ * random_range(1, 2);
6
+ */
7
+ export declare class RandomRangeCommand extends CommandLogicNode {
8
+ /**
9
+ * From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values
10
+ */
11
+ getRandomInt: (min: number, max: number) => number;
12
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
13
+ getArgumentCount: () => number;
14
+ getToken: () => string;
15
+ }
@@ -0,0 +1,24 @@
1
+ import { CommandLogicNode } from "./CommandLogicNode";
2
+ /**
3
+ * Used for command like
4
+ * random_range(1, 2);
5
+ */
6
+ export class RandomRangeCommand extends CommandLogicNode {
7
+ /**
8
+ * From: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values
9
+ */
10
+ getRandomInt = (min, max) => {
11
+ min = Math.ceil(min);
12
+ max = Math.floor(max);
13
+ return Math.floor(Math.random() * (max - min + 1)) + min;
14
+ };
15
+ doOperation = (currentOperands, nodeArgs) => {
16
+ nodeArgs.initState.operandStack.push(String(this.getRandomInt(Number(currentOperands[0]), Number(currentOperands[1]))));
17
+ };
18
+ getArgumentCount = () => {
19
+ return 2;
20
+ };
21
+ getToken = () => {
22
+ return "#random_range";
23
+ };
24
+ }
@@ -0,0 +1,20 @@
1
+ import { CommandLogicNode } from "./CommandLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ import { VisitedCountCommand } from "./VisitedCountCommand";
4
+ /**
5
+ * Used for command like
6
+ * visited("node name here");
7
+ *
8
+ * Pushes a boolean in the operand stack
9
+ *
10
+ * Some design decision note:
11
+ * I opted for composition over inheritance.
12
+ * This may look like a good case for composition but my philosophy is if they both are equally
13
+ * viable, always prefer composition. It will help in the long run if we do refactoring
14
+ */
15
+ export declare class VisitedCommand extends CommandLogicNode {
16
+ visitedCountCommand: VisitedCountCommand;
17
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
18
+ getArgumentCount: () => number;
19
+ getToken: () => string;
20
+ }
@@ -0,0 +1,32 @@
1
+ import { CommandLogicNode } from "./CommandLogicNode";
2
+ import { VisitedCountCommand } from "./VisitedCountCommand";
3
+ /**
4
+ * Used for command like
5
+ * visited("node name here");
6
+ *
7
+ * Pushes a boolean in the operand stack
8
+ *
9
+ * Some design decision note:
10
+ * I opted for composition over inheritance.
11
+ * This may look like a good case for composition but my philosophy is if they both are equally
12
+ * viable, always prefer composition. It will help in the long run if we do refactoring
13
+ */
14
+ export class VisitedCommand extends CommandLogicNode {
15
+ visitedCountCommand = new VisitedCountCommand();
16
+ doOperation = (currentOperands, nodeArgs) => {
17
+ this.visitedCountCommand.process(nodeArgs);
18
+ const value = Number(nodeArgs.initState.operandStack.pop());
19
+ if (isNaN(value) || value === 0) {
20
+ nodeArgs.initState.operandStack.push("false");
21
+ }
22
+ else {
23
+ nodeArgs.initState.operandStack.push("true");
24
+ }
25
+ };
26
+ getArgumentCount = () => {
27
+ return 0; // let the child work; this is only a decorator
28
+ };
29
+ getToken = () => {
30
+ return "#visited";
31
+ };
32
+ }
@@ -0,0 +1,13 @@
1
+ import { CommandLogicNode } from "./CommandLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ /**
4
+ * Used for command like
5
+ * visited_count("node name here");
6
+ *
7
+ * Pushed a number in the operand stack
8
+ */
9
+ export declare class VisitedCountCommand extends CommandLogicNode {
10
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
11
+ getArgumentCount: () => number;
12
+ getToken: () => string;
13
+ }
@@ -0,0 +1,25 @@
1
+ import { CommandLogicNode } from "./CommandLogicNode";
2
+ import { dialogVariableStore } from "../../../DialogManagerStore";
3
+ /**
4
+ * Used for command like
5
+ * visited_count("node name here");
6
+ *
7
+ * Pushed a number in the operand stack
8
+ */
9
+ export class VisitedCountCommand extends CommandLogicNode {
10
+ doOperation = (currentOperands, nodeArgs) => {
11
+ const value = Number(dialogVariableStore.getItem(`+${currentOperands[0]}`));
12
+ if (isNaN(value) || value === 0) {
13
+ nodeArgs.initState.operandStack.push("0");
14
+ }
15
+ else {
16
+ nodeArgs.initState.operandStack.push(String(value));
17
+ }
18
+ };
19
+ getArgumentCount = () => {
20
+ return 1;
21
+ };
22
+ getToken = () => {
23
+ return "#visited_count";
24
+ };
25
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class AndOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,15 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import { btreeUtils } from "../../core/BTreeUtils";
3
+ export class AndOperator extends OperatorLogicNode {
4
+ doOperation = (currentOperands, nodeArgs) => {
5
+ // todo: evaluate possible weird cases when doing number comparisons
6
+ // ISSUE #88 https://github.com/TurnipXenon/pineapple/issues/88
7
+ nodeArgs.initState.operandStack.push(String(btreeUtils.isTrue(currentOperands[0]) && btreeUtils.isTrue(currentOperands[1])));
8
+ };
9
+ getOperatorType = () => {
10
+ return OperatorType.Binary;
11
+ };
12
+ getToken = () => {
13
+ return "&&";
14
+ };
15
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class EqualityOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,14 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ export class EqualityOperator extends OperatorLogicNode {
3
+ doOperation = (currentOperands, nodeArgs) => {
4
+ // todo: evaluate possible weird cases when doing number comparisons
5
+ // ISSUE #88 https://github.com/TurnipXenon/pineapple/issues/88
6
+ nodeArgs.initState.operandStack.push(String(currentOperands[0] === currentOperands[1]));
7
+ };
8
+ getOperatorType = () => {
9
+ return OperatorType.Binary;
10
+ };
11
+ getToken = () => {
12
+ return "==";
13
+ };
14
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class GreaterThanEqualOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ export class GreaterThanEqualOperator extends OperatorLogicNode {
3
+ doOperation = (currentOperands, nodeArgs) => {
4
+ nodeArgs.initState.operandStack.push(String(Number(currentOperands[0]) >= Number(currentOperands[1])));
5
+ };
6
+ getOperatorType = () => {
7
+ return OperatorType.Binary;
8
+ };
9
+ getToken = () => {
10
+ return ">=";
11
+ };
12
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class GreaterThanOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ export class GreaterThanOperator extends OperatorLogicNode {
3
+ doOperation = (currentOperands, nodeArgs) => {
4
+ nodeArgs.initState.operandStack.push(String(Number(currentOperands[0]) > Number(currentOperands[1])));
5
+ };
6
+ getOperatorType = () => {
7
+ return OperatorType.Binary;
8
+ };
9
+ getToken = () => {
10
+ return ">";
11
+ };
12
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class InequalityOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ export class InequalityOperator extends OperatorLogicNode {
3
+ doOperation = (currentOperands, nodeArgs) => {
4
+ nodeArgs.initState.operandStack.push(String(currentOperands[0] !== currentOperands[1]));
5
+ };
6
+ getOperatorType = () => {
7
+ return OperatorType.Binary;
8
+ };
9
+ getToken = () => {
10
+ return "!=";
11
+ };
12
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class LessThanEqualOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ export class LessThanEqualOperator extends OperatorLogicNode {
3
+ doOperation = (currentOperands, nodeArgs) => {
4
+ nodeArgs.initState.operandStack.push(String(Number(currentOperands[0]) <= Number(currentOperands[1])));
5
+ };
6
+ getOperatorType = () => {
7
+ return OperatorType.Binary;
8
+ };
9
+ getToken = () => {
10
+ return "<=";
11
+ };
12
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class LessThanOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ export class LessThanOperator extends OperatorLogicNode {
3
+ doOperation = (currentOperands, nodeArgs) => {
4
+ nodeArgs.initState.operandStack.push(String(Number(currentOperands[0]) < Number(currentOperands[1])));
5
+ };
6
+ getOperatorType = () => {
7
+ return OperatorType.Binary;
8
+ };
9
+ getToken = () => {
10
+ return "<";
11
+ };
12
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class NegationOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,13 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import { btreeUtils } from "../../core/BTreeUtils";
3
+ export class NegationOperator extends OperatorLogicNode {
4
+ doOperation = (currentOperands, nodeArgs) => {
5
+ nodeArgs.initState.operandStack.push(String(!btreeUtils.isTrue(currentOperands[0])));
6
+ };
7
+ getOperatorType = () => {
8
+ return OperatorType.Unary;
9
+ };
10
+ getToken = () => {
11
+ return "!";
12
+ };
13
+ }
@@ -0,0 +1,17 @@
1
+ import type { ExpressionBehaviorNode } from "../ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ import type { ExpressionResult } from "../ExpressionResult";
4
+ export declare enum OperatorType {
5
+ Unary = 0,
6
+ Binary = 1
7
+ }
8
+ /**
9
+ * a leaf node that will always run success
10
+ * do the processing outside comparing with getToken
11
+ */
12
+ export declare abstract class OperatorLogicNode implements ExpressionBehaviorNode {
13
+ abstract getToken: () => string;
14
+ abstract getOperatorType: () => OperatorType;
15
+ abstract doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
16
+ process(nodeArgs: ExpressionArguments): ExpressionResult;
17
+ }
@@ -0,0 +1,32 @@
1
+ import { BehaviorStatus } from "../../core/BehaviorStatus";
2
+ export var OperatorType;
3
+ (function (OperatorType) {
4
+ OperatorType[OperatorType["Unary"] = 0] = "Unary";
5
+ OperatorType[OperatorType["Binary"] = 1] = "Binary";
6
+ })(OperatorType || (OperatorType = {}));
7
+ /**
8
+ * a leaf node that will always run success
9
+ * do the processing outside comparing with getToken
10
+ */
11
+ export class OperatorLogicNode {
12
+ process(nodeArgs) {
13
+ const currentOperands = [];
14
+ switch (this.getOperatorType()) {
15
+ case OperatorType.Unary:
16
+ currentOperands.unshift(nodeArgs.initState.operandStack.pop());
17
+ break;
18
+ case OperatorType.Binary:
19
+ currentOperands.unshift(nodeArgs.initState.operandStack.pop());
20
+ currentOperands.unshift(nodeArgs.initState.operandStack.pop());
21
+ break;
22
+ default:
23
+ console.error(`Unimplemented operator type: ${this.getOperatorType()}`);
24
+ break;
25
+ }
26
+ this.doOperation(currentOperands, nodeArgs);
27
+ return {
28
+ nextState: nodeArgs.initState,
29
+ status: BehaviorStatus.Success
30
+ };
31
+ }
32
+ }
@@ -0,0 +1,9 @@
1
+ import type { OperatorLogicNode } from "./OperatorLogicNode";
2
+ declare class OperatorMap {
3
+ _operatorLogicMap: Map<string, OperatorLogicNode>;
4
+ constructor();
5
+ get: (operator: string) => OperatorLogicNode | undefined;
6
+ exists: (operator: string) => boolean;
7
+ }
8
+ export declare const operatorMap: OperatorMap;
9
+ export {};
@@ -0,0 +1,47 @@
1
+ import { EqualityOperator } from "./EqualityOperator";
2
+ import { InequalityOperator } from "./InequalityOperator";
3
+ import { GreaterThanOperator } from "./GreaterThanOperator";
4
+ import { GreaterThanEqualOperator } from "./GreaterThanEqualOperator";
5
+ import { LessThanOperator } from "./LessThanOperator";
6
+ import { LessThanEqualOperator } from "./LessThanEqualOperator";
7
+ import { NegationOperator } from "./NegationOperator";
8
+ import { AndOperator } from "./AndOperator";
9
+ import { OrOperator } from "./OrOperator";
10
+ import { XorOperator } from "./XorOperator";
11
+ import { AddOperator } from "./arithmetic/PlusOperator";
12
+ import { MinusOperator } from "./arithmetic/MinusOperator";
13
+ import { MultiplicationOperator } from "./arithmetic/MultiplicationOperator";
14
+ import { DivisionOperator } from "./arithmetic/DivisionOperator";
15
+ import { RemainderDivisionOperator } from "./arithmetic/RemainderDivisionOperator";
16
+ class OperatorMap {
17
+ _operatorLogicMap = new Map();
18
+ constructor() {
19
+ // set up operator logic
20
+ [
21
+ new EqualityOperator(),
22
+ new InequalityOperator(),
23
+ new GreaterThanOperator(),
24
+ new GreaterThanEqualOperator(),
25
+ new LessThanOperator(),
26
+ new LessThanEqualOperator(),
27
+ new NegationOperator(),
28
+ new AndOperator(),
29
+ new OrOperator(),
30
+ new XorOperator(),
31
+ new AddOperator(),
32
+ new MinusOperator(),
33
+ new MultiplicationOperator(),
34
+ new DivisionOperator(),
35
+ new RemainderDivisionOperator()
36
+ ].forEach((operatorLogic) => {
37
+ this._operatorLogicMap.set(operatorLogic.getToken(), operatorLogic);
38
+ });
39
+ }
40
+ get = (operator) => {
41
+ return this._operatorLogicMap.get(operator);
42
+ };
43
+ exists = (operator) => {
44
+ return this.get(operator) !== undefined;
45
+ };
46
+ }
47
+ export const operatorMap = new OperatorMap();
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class OrOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,13 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import { btreeUtils } from "../../core/BTreeUtils";
3
+ export class OrOperator extends OperatorLogicNode {
4
+ doOperation = (currentOperands, nodeArgs) => {
5
+ nodeArgs.initState.operandStack.push(String(btreeUtils.isTrue(currentOperands[0]) || btreeUtils.isTrue(currentOperands[1])));
6
+ };
7
+ getOperatorType = () => {
8
+ return OperatorType.Binary;
9
+ };
10
+ getToken = () => {
11
+ return "||";
12
+ };
13
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../ExpressionArguments";
3
+ export declare class XorOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,17 @@
1
+ import { OperatorLogicNode, OperatorType } from "./OperatorLogicNode";
2
+ import { btreeUtils } from "../../core/BTreeUtils";
3
+ export class XorOperator extends OperatorLogicNode {
4
+ doOperation = (currentOperands, nodeArgs) => {
5
+ // todo: evaluate possible weird cases when doing number comparisons
6
+ // ISSUE #88 https://github.com/TurnipXenon/pineapple/issues/88
7
+ const A = btreeUtils.isTrue(currentOperands[0]);
8
+ const B = btreeUtils.isTrue(currentOperands[1]);
9
+ nodeArgs.initState.operandStack.push(String(!((A && B) || A || B)));
10
+ };
11
+ getOperatorType = () => {
12
+ return OperatorType.Binary;
13
+ };
14
+ getToken = () => {
15
+ return "^";
16
+ };
17
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "../OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../../ExpressionArguments";
3
+ export declare class DivisionOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }
@@ -0,0 +1,14 @@
1
+ import { OperatorLogicNode, OperatorType } from "../OperatorLogicNode";
2
+ export class DivisionOperator extends OperatorLogicNode {
3
+ doOperation = (currentOperands, nodeArgs) => {
4
+ // todo: Add division protection
5
+ // ISSUE #96 https://github.com/TurnipXenon/pineapple/issues/96
6
+ nodeArgs.initState.operandStack.push(String(Number(currentOperands[0]) / Number(currentOperands[1])));
7
+ };
8
+ getOperatorType = () => {
9
+ return OperatorType.Binary;
10
+ };
11
+ getToken = () => {
12
+ return "/";
13
+ };
14
+ }
@@ -0,0 +1,7 @@
1
+ import { OperatorLogicNode, OperatorType } from "../OperatorLogicNode";
2
+ import type { ExpressionArguments } from "../../ExpressionArguments";
3
+ export declare class MinusOperator extends OperatorLogicNode {
4
+ doOperation: (currentOperands: string[], nodeArgs: ExpressionArguments) => void;
5
+ getOperatorType: () => OperatorType;
6
+ getToken: () => string;
7
+ }