inkcpp_rb 0.1.0

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 (273) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +1 -0
  4. data/Gemfile +10 -0
  5. data/Gemfile.lock +84 -0
  6. data/LICENSE +7 -0
  7. data/README.md +3 -0
  8. data/Rakefile +16 -0
  9. data/bin/console +15 -0
  10. data/bin/setup +10 -0
  11. data/bin/tapioca +29 -0
  12. data/ext/inkcpp_rb/extconf.rb +19 -0
  13. data/ext/inkcpp_rb/inkcpp/.clang-format +99 -0
  14. data/ext/inkcpp_rb/inkcpp/.github/FUNDING.yml +1 -0
  15. data/ext/inkcpp_rb/inkcpp/.github/workflows/build.yml +344 -0
  16. data/ext/inkcpp_rb/inkcpp/.github/workflows/release.yml +49 -0
  17. data/ext/inkcpp_rb/inkcpp/.gitignore +25 -0
  18. data/ext/inkcpp_rb/inkcpp/.gitmodules +9 -0
  19. data/ext/inkcpp_rb/inkcpp/CMakeLists.txt +170 -0
  20. data/ext/inkcpp_rb/inkcpp/CODE_OF_CONDUCT.md +76 -0
  21. data/ext/inkcpp_rb/inkcpp/CONTRIBUTING.md +55 -0
  22. data/ext/inkcpp_rb/inkcpp/Config.cmake.in +2 -0
  23. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/CMakeLists.txt +13 -0
  24. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.c +38 -0
  25. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.cpp +40 -0
  26. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink +8 -0
  27. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink.json +1 -0
  28. data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example.zip +0 -0
  29. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/InkCPP_DEMO.zip +0 -0
  30. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/CreateThread.png +0 -0
  31. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/HandleChoice.png +0 -0
  32. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ListElementOf.png +0 -0
  33. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalRuntime.png +0 -0
  34. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalThread.png +0 -0
  35. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ObseverChange.png +0 -0
  36. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/TagListGetValue.png +0 -0
  37. data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/YieldResume.png +0 -0
  38. data/ext/inkcpp_rb/inkcpp/Doxyfile +2825 -0
  39. data/ext/inkcpp_rb/inkcpp/LICENSE.txt +22 -0
  40. data/ext/inkcpp_rb/inkcpp/Minimal.runsettings +8 -0
  41. data/ext/inkcpp_rb/inkcpp/README.md +192 -0
  42. data/ext/inkcpp_rb/inkcpp/inkcpp/CMakeLists.txt +67 -0
  43. data/ext/inkcpp_rb/inkcpp/inkcpp/array.h +481 -0
  44. data/ext/inkcpp_rb/inkcpp/inkcpp/avl_array.h +833 -0
  45. data/ext/inkcpp_rb/inkcpp/inkcpp/casting.h +93 -0
  46. data/ext/inkcpp_rb/inkcpp/inkcpp/choice.cpp +54 -0
  47. data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.cpp +124 -0
  48. data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.h +406 -0
  49. data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.cpp +52 -0
  50. data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.h +34 -0
  51. data/ext/inkcpp_rb/inkcpp/inkcpp/executioner.h +179 -0
  52. data/ext/inkcpp_rb/inkcpp/inkcpp/functional.cpp +86 -0
  53. data/ext/inkcpp_rb/inkcpp/inkcpp/functions.cpp +54 -0
  54. data/ext/inkcpp_rb/inkcpp/inkcpp/functions.h +40 -0
  55. data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.cpp +289 -0
  56. data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.h +149 -0
  57. data/ext/inkcpp_rb/inkcpp/inkcpp/header.cpp +44 -0
  58. data/ext/inkcpp_rb/inkcpp/inkcpp/include/choice.h +106 -0
  59. data/ext/inkcpp_rb/inkcpp/inkcpp/include/functional.h +327 -0
  60. data/ext/inkcpp_rb/inkcpp/inkcpp/include/globals.h +196 -0
  61. data/ext/inkcpp_rb/inkcpp/inkcpp/include/list.h +187 -0
  62. data/ext/inkcpp_rb/inkcpp/inkcpp/include/runner.h +291 -0
  63. data/ext/inkcpp_rb/inkcpp/inkcpp/include/snapshot.h +61 -0
  64. data/ext/inkcpp_rb/inkcpp/inkcpp/include/story.h +219 -0
  65. data/ext/inkcpp_rb/inkcpp/inkcpp/include/story_ptr.h +233 -0
  66. data/ext/inkcpp_rb/inkcpp/inkcpp/include/traits.h +270 -0
  67. data/ext/inkcpp_rb/inkcpp/inkcpp/include/types.h +169 -0
  68. data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.cpp +79 -0
  69. data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.h +39 -0
  70. data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.cpp +276 -0
  71. data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.h +356 -0
  72. data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.cpp +841 -0
  73. data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.h +450 -0
  74. data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp +40 -0
  75. data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.h +529 -0
  76. data/ext/inkcpp_rb/inkcpp/inkcpp/operation_bases.h +164 -0
  77. data/ext/inkcpp_rb/inkcpp/inkcpp/operations.h +100 -0
  78. data/ext/inkcpp_rb/inkcpp/inkcpp/output.cpp +528 -0
  79. data/ext/inkcpp_rb/inkcpp/inkcpp/output.h +153 -0
  80. data/ext/inkcpp_rb/inkcpp/inkcpp/platform.h +22 -0
  81. data/ext/inkcpp_rb/inkcpp/inkcpp/random.h +38 -0
  82. data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.cpp +1396 -0
  83. data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.h +336 -0
  84. data/ext/inkcpp_rb/inkcpp/inkcpp/simple_restorable_stack.h +335 -0
  85. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.cpp +182 -0
  86. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.h +91 -0
  87. data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_interface.h +57 -0
  88. data/ext/inkcpp_rb/inkcpp/inkcpp/stack.cpp +618 -0
  89. data/ext/inkcpp_rb/inkcpp/inkcpp/stack.h +243 -0
  90. data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.cpp +361 -0
  91. data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.h +92 -0
  92. data/ext/inkcpp_rb/inkcpp/inkcpp/story_ptr.cpp +75 -0
  93. data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.cpp +125 -0
  94. data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.h +67 -0
  95. data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.cpp +149 -0
  96. data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.h +47 -0
  97. data/ext/inkcpp_rb/inkcpp/inkcpp/string_utils.h +207 -0
  98. data/ext/inkcpp_rb/inkcpp/inkcpp/system.cpp +39 -0
  99. data/ext/inkcpp_rb/inkcpp/inkcpp/tuple.hpp +151 -0
  100. data/ext/inkcpp_rb/inkcpp/inkcpp/value.cpp +279 -0
  101. data/ext/inkcpp_rb/inkcpp/inkcpp/value.h +666 -0
  102. data/ext/inkcpp_rb/inkcpp/inkcpp_c/CMakeLists.txt +62 -0
  103. data/ext/inkcpp_rb/inkcpp/inkcpp_c/include/inkcpp.h +393 -0
  104. data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp.cpp +344 -0
  105. data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp_c.pc.in +10 -0
  106. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/ExternalFunction.c +56 -0
  107. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Globals.c +98 -0
  108. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Lists.c +73 -0
  109. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Observer.c +36 -0
  110. data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Snapshot.c +65 -0
  111. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/CMakeLists.txt +49 -0
  112. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/inkcpp_cl.cpp +215 -0
  113. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.cpp +209 -0
  114. data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.h +8 -0
  115. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/CMakeLists.txt +37 -0
  116. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.cpp +446 -0
  117. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.h +70 -0
  118. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.cpp +166 -0
  119. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.h +79 -0
  120. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/command.cpp +107 -0
  121. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/compiler.cpp +96 -0
  122. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.cpp +62 -0
  123. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.h +104 -0
  124. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compilation_results.h +22 -0
  125. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compiler.h +44 -0
  126. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json.hpp +24596 -0
  127. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.cpp +411 -0
  128. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.h +62 -0
  129. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.cpp +47 -0
  130. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.h +70 -0
  131. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.cpp +107 -0
  132. data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.h +55 -0
  133. data/ext/inkcpp_rb/inkcpp/inkcpp_py/CMakeLists.txt +19 -0
  134. data/ext/inkcpp_rb/inkcpp/inkcpp_py/example.py +78 -0
  135. data/ext/inkcpp_rb/inkcpp/inkcpp_py/src/module.cpp +317 -0
  136. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/conftest.py +53 -0
  137. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_ExternalFunctions.py +35 -0
  138. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Globals.py +40 -0
  139. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Lists.py +43 -0
  140. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Observer.py +27 -0
  141. data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Snapshot.py +57 -0
  142. data/ext/inkcpp_rb/inkcpp/inkcpp_py/unreal_example.ink +71 -0
  143. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Array.cpp +115 -0
  144. data/ext/inkcpp_rb/inkcpp/inkcpp_test/CMakeLists.txt +117 -0
  145. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Callstack.cpp +392 -0
  146. data/ext/inkcpp_rb/inkcpp/inkcpp_test/EmptyStringForDivert.cpp +36 -0
  147. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ExternalFunctionsExecuteProperly.cpp +34 -0
  148. data/ext/inkcpp_rb/inkcpp/inkcpp_test/FallbackFunction.cpp +77 -0
  149. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Globals.cpp +73 -0
  150. data/ext/inkcpp_rb/inkcpp/inkcpp_test/InkyJson.cpp +34 -0
  151. data/ext/inkcpp_rb/inkcpp/inkcpp_test/LabelCondition.cpp +60 -0
  152. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Lists.cpp +144 -0
  153. data/ext/inkcpp_rb/inkcpp/inkcpp_test/LookaheadSafe.cpp +46 -0
  154. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Main.cpp +7 -0
  155. data/ext/inkcpp_rb/inkcpp/inkcpp_test/MoveTo.cpp +95 -0
  156. data/ext/inkcpp_rb/inkcpp/inkcpp_test/NewLines.cpp +76 -0
  157. data/ext/inkcpp_rb/inkcpp/inkcpp_test/NoEarlyTags.cpp +33 -0
  158. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Observer.cpp +245 -0
  159. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Pointer.cpp +191 -0
  160. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Restorable.cpp +294 -0
  161. data/ext/inkcpp_rb/inkcpp/inkcpp_test/SpaceAfterBracketChoice.cpp +45 -0
  162. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Stack.cpp +224 -0
  163. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Tags.cpp +131 -0
  164. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ThirdTierChoiceAfterBrackets.cpp +38 -0
  165. data/ext/inkcpp_rb/inkcpp/inkcpp_test/UTF8.cpp +56 -0
  166. data/ext/inkcpp_rb/inkcpp/inkcpp_test/Value.cpp +210 -0
  167. data/ext/inkcpp_rb/inkcpp/inkcpp_test/catch.hpp +17970 -0
  168. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/AHF.ink +7 -0
  169. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ChoiceBracketStory.ink +7 -0
  170. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/EmptyStringForDivert.ink +13 -0
  171. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ExternalFunctionsExecuteProperly.ink +11 -0
  172. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/FallBack.ink +15 -0
  173. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/GlobalStory.ink +9 -0
  174. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LabelConditionStory.ink +5 -0
  175. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LinesStory.ink +42 -0
  176. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListLogicStory.ink +40 -0
  177. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListStory.ink +8 -0
  178. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LookaheadSafe.ink +14 -0
  179. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/MoveTo.ink +36 -0
  180. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/NoEarlyTags.ink +19 -0
  181. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ObserverStory.ink +8 -0
  182. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/SimpleStoryFlow.ink +65 -0
  183. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TagsStory.ink +22 -0
  184. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TheIntercept.ink +1686 -0
  185. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ThirdTierChoiceAfterBracketsStory.ink +13 -0
  186. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF-8-demo.txt +212 -0
  187. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF8Story.ink +218 -0
  188. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inklecate.json +154 -0
  189. data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inky.json +160 -0
  190. data/ext/inkcpp_rb/inkcpp/notes/ArchitectureNotes.md +54 -0
  191. data/ext/inkcpp_rb/inkcpp/notes/ListNotes.md +69 -0
  192. data/ext/inkcpp_rb/inkcpp/notes/OperationNotes.md +35 -0
  193. data/ext/inkcpp_rb/inkcpp/notes/TagsNotes.md +24 -0
  194. data/ext/inkcpp_rb/inkcpp/notes/WhitespaceNotes.md +28 -0
  195. data/ext/inkcpp_rb/inkcpp/proofing/README.md +3 -0
  196. data/ext/inkcpp_rb/inkcpp/proofing/inkcpp_runtime_driver +12 -0
  197. data/ext/inkcpp_rb/inkcpp/pyproject.toml +63 -0
  198. data/ext/inkcpp_rb/inkcpp/setup.py +166 -0
  199. data/ext/inkcpp_rb/inkcpp/shared/CMakeLists.txt +14 -0
  200. data/ext/inkcpp_rb/inkcpp/shared/private/command.h +172 -0
  201. data/ext/inkcpp_rb/inkcpp/shared/private/header.h +46 -0
  202. data/ext/inkcpp_rb/inkcpp/shared/public/config.h +53 -0
  203. data/ext/inkcpp_rb/inkcpp/shared/public/system.h +307 -0
  204. data/ext/inkcpp_rb/inkcpp/shared/public/version.h +14 -0
  205. data/ext/inkcpp_rb/inkcpp/tests/TestAllSequenceTypes.ink +59 -0
  206. data/ext/inkcpp_rb/inkcpp/tests/TestArithmetic.ink +17 -0
  207. data/ext/inkcpp_rb/inkcpp/tests/TestBasicStringLiterals.ink +8 -0
  208. data/ext/inkcpp_rb/inkcpp/tests/TestBasicTunnel.ink +10 -0
  209. data/ext/inkcpp_rb/inkcpp/tests/TestBlanksInInlineSequences.ink +51 -0
  210. data/ext/inkcpp_rb/inkcpp/tests/TestCallStackEvaluation.ink +15 -0
  211. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceCount.ink +15 -0
  212. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceDivertsToDone.ink +6 -0
  213. data/ext/inkcpp_rb/inkcpp/tests/TestChoiceWithBracketsOnly.ink +9 -0
  214. data/ext/inkcpp_rb/inkcpp/tests/TestCompareDivertTargets.ink +26 -0
  215. data/ext/inkcpp_rb/inkcpp/tests/TestComplexTunnels.ink +22 -0
  216. data/ext/inkcpp_rb/inkcpp/tests/TestConditionalChoiceInWeave.ink +19 -0
  217. data/ext/inkcpp_rb/inkcpp/tests/TestTunnelOnwardsAfterTunnel.ink +17 -0
  218. data/ext/inkcpp_rb/inkcpp/unreal/CMakeLists.txt +51 -0
  219. data/ext/inkcpp_rb/inkcpp/unreal/UE_example.ink +92 -0
  220. data/ext/inkcpp_rb/inkcpp/unreal/blueprint_filter.js +377 -0
  221. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Resources/Icon128.png +0 -0
  222. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkAsset.cpp +47 -0
  223. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkChoice.cpp +40 -0
  224. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkList.cpp +86 -0
  225. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkRuntime.cpp +265 -0
  226. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkThread.cpp +239 -0
  227. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkVar.cpp +143 -0
  228. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/TagList.cpp +95 -0
  229. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/inkcpp.cpp +13 -0
  230. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkAsset.h +50 -0
  231. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkChoice.h +58 -0
  232. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkDelegates.h +139 -0
  233. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkList.h +102 -0
  234. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkRuntime.h +177 -0
  235. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkSnapshot.h +30 -0
  236. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkThread.h +215 -0
  237. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkVar.h +245 -0
  238. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/TagList.h +77 -0
  239. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/inkcpp.h +217 -0
  240. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/inkcpp.Build.cs +62 -0
  241. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.cpp +237 -0
  242. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.h +43 -0
  243. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inkcpp_editor.cpp +13 -0
  244. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inklecate_cmd.cpp.in +24 -0
  245. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Public/inkcpp_editor.h +9 -0
  246. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/inkcpp_editor.Build.cs +61 -0
  247. data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/inkcpp.uplugin +44 -0
  248. data/ext/inkcpp_rb/inkcpp/unreal/render.css +1 -0
  249. data/ext/inkcpp_rb/inkcpp_rb.cpp +321 -0
  250. data/inkcpp_rb.gemspec +54 -0
  251. data/rbi/inkcpp_rb.rbi +211 -0
  252. data/sorbet/config +4 -0
  253. data/sorbet/rbi/annotations/.gitattributes +1 -0
  254. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  255. data/sorbet/rbi/gems/.gitattributes +1 -0
  256. data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
  257. data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  258. data/sorbet/rbi/gems/minitest@5.25.4.rbi +1547 -0
  259. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  260. data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
  261. data/sorbet/rbi/gems/prism@1.3.0.rbi +40040 -0
  262. data/sorbet/rbi/gems/rake-compiler@1.2.8.rbi +9 -0
  263. data/sorbet/rbi/gems/rake@13.2.1.rbi +3033 -0
  264. data/sorbet/rbi/gems/rbi@0.2.2.rbi +4527 -0
  265. data/sorbet/rbi/gems/rice@4.3.3.rbi +44 -0
  266. data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
  267. data/sorbet/rbi/gems/tapioca@0.16.7.rbi +3611 -0
  268. data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
  269. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  270. data/sorbet/rbi/gems/yard@0.9.37.rbi +18379 -0
  271. data/sorbet/tapioca/config.yml +13 -0
  272. data/sorbet/tapioca/require.rb +4 -0
  273. metadata +400 -0
@@ -0,0 +1,143 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #include "InkVar.h"
8
+ #include "ink/types.h"
9
+
10
+ #include "Misc/AssertionMacros.h"
11
+
12
+ FInkVar::FInkVar(ink::runtime::value val) : FInkVar() {
13
+ using v_types = ink::runtime::value::Type;
14
+ switch(val.type) {
15
+ case v_types::Bool: value.SetSubtype<bool>(val.get<v_types::Bool>()); break;
16
+ case v_types::Uint32:
17
+ UE_LOG(InkCpp, Warning, TEXT("Converting uint to int, this will cause trouble if writing it back to ink (with SetGlobalVariable)!"));
18
+ value.SetSubtype<int>(val.get<v_types::Uint32>());
19
+ break;
20
+ case v_types::Int32: value.SetSubtype<int>(val.get<v_types::Int32>()); break;
21
+ case v_types::String: value.SetSubtype<FString>(FString(val.get<v_types::String>())); break;
22
+ case v_types::Float: value.SetSubtype<float>(val.get<v_types::Float>()); break;
23
+ case v_types::List: {
24
+ UInkList* list = NewObject<UInkList>();
25
+ list->SetList(val.get<v_types::List>());
26
+ value.SetSubtype<UInkList*>(list);
27
+ break;
28
+ }
29
+ default:
30
+ inkFail("unknown type!, failed to convert ink::value to InkVar");
31
+ }
32
+ }
33
+
34
+ ink::runtime::value FInkVar::to_value() const {
35
+ switch(type()) {
36
+ case EInkVarType::Int:
37
+ return ink::runtime::value(value.GetSubtype<int>());
38
+ case EInkVarType::Float:
39
+ return ink::runtime::value(value.GetSubtype<float>());
40
+ case EInkVarType::String:
41
+ return ink::runtime::value(reinterpret_cast<const char*>(utf8.GetData()));
42
+ case EInkVarType::Bool:
43
+ return ink::runtime::value(value.GetSubtype<bool>());
44
+ case EInkVarType::UInt:
45
+ return ink::runtime::value(value.GetSubtype<unsigned>());
46
+ case EInkVarType::List:
47
+ return ink::runtime::value(value.GetSubtype<UInkList*>()->GetData());
48
+ default:
49
+ inkFail("Unsupported type");
50
+ return ink::runtime::value();
51
+ }
52
+
53
+ }
54
+
55
+ EInkVarType UInkVarLibrary::InkVarType(const FInkVar& InkVar) { return InkVar.type(); }
56
+ FString UInkVarLibrary::Conv_InkVarString(const FInkVar& InkVar)
57
+ {
58
+ if (ensureMsgf(InkVar.type() == EInkVarType::String, TEXT("InkVar is not a String Type!")))
59
+ return InkVar.value.GetSubtype<FString>();
60
+ return FString(TEXT(""));
61
+ }
62
+
63
+ int UInkVarLibrary::Conv_InkVarInt(const FInkVar& InkVar)
64
+ {
65
+ if (ensureMsgf(InkVar.type() == EInkVarType::Int, TEXT("InkVar is not an Int Type!")))
66
+ return InkVar.value.GetSubtype<int>();
67
+ return 0;
68
+ }
69
+
70
+ float UInkVarLibrary::Conv_InkVarFloat(const FInkVar& InkVar)
71
+ {
72
+ if (ensureMsgf(InkVar.type() == EInkVarType::Float, TEXT("InkVar is not a Float Type!")))
73
+ return InkVar.value.GetSubtype<float>();
74
+ return 0.f;
75
+ }
76
+
77
+ FName UInkVarLibrary::Conv_InkVarName(const FInkVar& InkVar)
78
+ {
79
+ if (ensureMsgf(InkVar.type() == EInkVarType::String, TEXT("InkVar is not a String Type!")))
80
+ return FName(*InkVar.value.GetSubtype<FString>());
81
+ return NAME_None;
82
+ }
83
+
84
+ FText UInkVarLibrary::Conv_InkVarText(const FInkVar& InkVar)
85
+ {
86
+ if (ensureMsgf(InkVar.type() == EInkVarType::String, TEXT("InkVar is not a String Type!")))
87
+ return FText::FromString(InkVar.value.GetSubtype<FString>());
88
+ return FText::GetEmpty();
89
+ }
90
+
91
+ bool UInkVarLibrary::Conv_InkVarBool(const FInkVar& InkVar)
92
+ {
93
+ if (ensureMsgf(InkVar.type() == EInkVarType::Bool, TEXT("InkVar is not an Bool Type!")))
94
+ return InkVar.value.GetSubtype<bool>();
95
+ return false;
96
+ }
97
+
98
+ const UInkList* UInkVarLibrary::Conv_InkVarInkList(const FInkVar& InkVar)
99
+ {
100
+ if (ensureMsgf(InkVar.type() == EInkVarType::List, TEXT("InkVar is not an List Type!")))
101
+ return InkVar.value.GetSubtype<UInkList*>();
102
+ return nullptr;
103
+ }
104
+
105
+
106
+
107
+ FInkVar UInkVarLibrary::Conv_StringInkVar(const FString& String)
108
+ {
109
+ return FInkVar(String);
110
+ }
111
+
112
+ FInkVar UInkVarLibrary::Conv_IntInkVar(int Number)
113
+ {
114
+ return FInkVar(Number);
115
+ }
116
+
117
+ FInkVar UInkVarLibrary::Conv_FloatInkVar(float Number)
118
+ {
119
+ return FInkVar(Number);
120
+ }
121
+
122
+ FInkVar UInkVarLibrary::Conv_TextInkVar(const FText& Text)
123
+ {
124
+ return FInkVar(Text.ToString());
125
+ }
126
+
127
+ FInkVar UInkVarLibrary::Conv_NameInkVar(const FName& Name)
128
+ {
129
+ return FInkVar(Name.ToString());
130
+ }
131
+
132
+ FInkVar UInkVarLibrary::Conv_BoolInkVar(bool Boolean)
133
+ {
134
+ return FInkVar(Boolean);
135
+ }
136
+
137
+ FInkVar UInkVarLibrary::Conv_ListInkVar(UInkList* List)
138
+ {
139
+ if (ensureMsgf(List != nullptr, TEXT("Try to set list value from empty object"))) {
140
+ return FInkVar(*List);
141
+ }
142
+ return FInkVar();
143
+ }
@@ -0,0 +1,95 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #include "TagList.h"
8
+
9
+ UTagList::UTagList()
10
+ {
11
+ }
12
+
13
+ void UTagList::Initialize(const TArray<FString>& tags)
14
+ {
15
+ // Copy construct
16
+ Tags = TArray<FString>(tags);
17
+ }
18
+
19
+ bool UTagList::Has(const FString& tag) const
20
+ {
21
+ for (const FString& t : Tags)
22
+ {
23
+ if (t.Equals(tag))
24
+ return true;
25
+ }
26
+
27
+ return false;
28
+ }
29
+
30
+ bool UTagList::HasEnum(const UEnum* Enum, uint8& value) const
31
+ {
32
+ if (!Enum)
33
+ {
34
+ value = 0;
35
+ return false;
36
+ }
37
+
38
+ // Iterate tags
39
+ int num = Enum->NumEnums();
40
+ for (const FString& tag : Tags)
41
+ {
42
+ // Iterate enum values
43
+ for (int i = 0; i < num; i++)
44
+ {
45
+ FString enumStr = Enum->GetDisplayNameTextByIndex(i).ToString();
46
+
47
+ // Instead of string comparison, check if they share a suffix (most enums have weird prefixes)
48
+ if (enumStr.EndsWith(tag))
49
+ {
50
+ value = Enum->GetValueByIndex(i);
51
+ return true;
52
+ }
53
+ }
54
+ }
55
+
56
+ value = 0;
57
+ return false;
58
+ }
59
+
60
+ FString UTagList::GetValue(const FString& name) const
61
+ {
62
+ for (const FString& tag : Tags)
63
+ {
64
+ if (tag.StartsWith(name + ":"))
65
+ {
66
+ return tag.RightChop(name.Len() + 1).TrimStartAndEnd();
67
+ }
68
+ }
69
+
70
+ return FString();
71
+ }
72
+
73
+ bool UTagList::GetEnum(const UEnum* Enum, uint8& value) const
74
+ {
75
+ FString prefix = Enum->GetFName().ToString() + ":";
76
+ for (const FString& tag : Tags) {
77
+ if (tag.StartsWith(prefix)) {
78
+ FString tag_value = tag.RightChop(prefix.Len()).TrimStartAndEnd();
79
+ for (int i = 0; i < Enum->NumEnums(); ++i) {
80
+ FString enumStr = Enum->GetDisplayNameTextByIndex(i).ToString();
81
+ if (enumStr.EndsWith(tag_value)) {
82
+ value = Enum->GetValueByIndex(i);
83
+ return true;
84
+ }
85
+ }
86
+
87
+ value = 0;
88
+ return false;
89
+ }
90
+ }
91
+ value = 0;
92
+ return false;
93
+ }
94
+
95
+ const TArray<FString>& UTagList::GetTags() const { return Tags; }
@@ -0,0 +1,13 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #include "inkcpp.h"
8
+
9
+ #include "CoreMinimal.h"
10
+ #include "Modules/ModuleManager.h"
11
+
12
+ IMPLEMENT_MODULE(FDefaultGameModuleImpl, inkcpp)
13
+ DEFINE_LOG_CATEGORY(InkCpp);
@@ -0,0 +1,50 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+
9
+ #include "UObject/Object.h"
10
+
11
+ #include "InkAsset.generated.h"
12
+
13
+ /** Assets contanining a InkCPP .bin.
14
+ * Asset can be constructed from a `.ink.json` file outputed from inky or inklecate.
15
+ * And generall also directly from a `.ink` file (it may fail if the shipped version of inklecate is
16
+ * incopatible with your system).
17
+ *
18
+ * @todo Please note that reimport does not work properly if your ink file has includes.
19
+ * Since the reimport only watches the main file for changes.
20
+ * @ingroup unreal
21
+ */
22
+ UCLASS(hidecategories=Object)
23
+ class INKCPP_API UInkAsset : public UObject
24
+ {
25
+ GENERATED_BODY()
26
+
27
+ public:
28
+ UInkAsset();
29
+
30
+ // Begin UObject
31
+ /** @private */
32
+ virtual void Serialize(FStructuredArchive::FRecord Record) override;
33
+ // End UObject
34
+
35
+ /** @private */
36
+ TArray<char> CompiledStory;
37
+
38
+ #if WITH_EDITORONLY_DATA
39
+ /** @private */
40
+ UPROPERTY(VisibleAnywhere, Instanced, Category = ImportSettings)
41
+ class UAssetImportData* AssetImportData;
42
+
43
+ // Begin UObject
44
+ /** @private */
45
+ virtual void PostInitProperties() override;
46
+ /** @private */
47
+ virtual void GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const override;
48
+ // End UObject
49
+ #endif
50
+ };
@@ -0,0 +1,58 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+ #include "TagList.h"
9
+
10
+ #include "UObject/Object.h"
11
+
12
+ #include "InkChoice.generated.h"
13
+
14
+ namespace ink::runtime { class choice; }
15
+ class UTagList;
16
+
17
+ /** Representing a Ink Choice in the story flow
18
+ * @ingroup unreal
19
+ */
20
+ UCLASS(BlueprintType)
21
+ class UInkChoice : public UObject
22
+ {
23
+ GENERATED_BODY()
24
+ public:
25
+ UInkChoice();
26
+
27
+ UFUNCTION(BlueprintPure, Category="Ink")
28
+ /** Access context of choice.
29
+ * @return text contained in choice
30
+ * @blueprint
31
+ */
32
+ FString GetText() const;
33
+
34
+ UFUNCTION(BlueprintPure, Category="Ink")
35
+ /** Get idintifcator for @ref UInkThread::PickChoice()
36
+ * @return id used in @ref UInkThread::PickChoice()
37
+ *
38
+ * @blueprint
39
+ */
40
+ int GetIndex() const;
41
+
42
+ UFUNCTION(BlueprintPure, Category="Ink")
43
+ /** Tags asszoiated with the choice.
44
+ * @return with choice assoziated tags
45
+ *
46
+ * @blueprint
47
+ */
48
+ const UTagList* GetTags() const;
49
+
50
+ protected:
51
+ friend class UInkThread;
52
+ /** @private */
53
+ void Initialize(const ink::runtime::choice*);
54
+
55
+ private:
56
+ const ink::runtime::choice* data;
57
+ TObjectPtr<UTagList> tags;
58
+ };
@@ -0,0 +1,139 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+
9
+ #include "CoreMinimal.h"
10
+ #include "Delegates/Delegate.h"
11
+
12
+ #include "InkVar.h"
13
+
14
+ #include "InkDelegates.generated.h"
15
+
16
+ /** @file
17
+ * collection of Delegates typs used for the UE interface
18
+ * @ingroup unreal
19
+ */
20
+
21
+ #ifdef DOXYGEN
22
+ DOC_UF(BlueprintImplementableEvent, )
23
+ /** Delegate for a tag function
24
+ * @see @ref TagFunction
25
+ * @param Caller thread which found encountered this function
26
+ * @param Params an array containing the arguments depending on the function call
27
+ *
28
+ * @blueprint
29
+ */
30
+ void FTagFunctionDelegate(UInkThread* Caller, const TArray<FString>& Params);
31
+ #endif
32
+ /** @cond */
33
+ DECLARE_DYNAMIC_DELEGATE_TwoParams(FTagFunctionDelegate, UInkThread*, Caller, const TArray<FString>&, Params);
34
+ /** @endcond*/
35
+
36
+ /** @private */
37
+ DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FTagFunctionMulticastDelegate, UInkThread*, Caller, const TArray<FString>&, Params);
38
+
39
+ #ifdef DOXYGEN
40
+ DOC_UF(BlueprintImplementableEvent, )
41
+ /** Delegate for external functions.
42
+ * the number of arugments are defined iside the ink story
43
+ * @param Arguments array containing all arguments passed to this function
44
+ * @return value to be put on the stack in the inkruntime
45
+ * @see @ref UInkThread::RegisterExternalEvent
46
+ *
47
+ * @blueprint
48
+ */
49
+ FInkVar FExternalFunctionDelegate(const TArray<FInkVar>& Arguments);
50
+ #endif
51
+ /** @cond */
52
+ DECLARE_DYNAMIC_DELEGATE_RetVal_OneParam(FInkVar, FExternalFunctionDelegate, const TArray<FInkVar>&, Arguments);
53
+ /** @endcond */
54
+
55
+ #ifdef DOXYGEN
56
+ DOC_UF(BlueprintImplementableEvent, )
57
+ /** Delegate for external event.
58
+ * the number of arguments are defined inside the ink story
59
+ * @param Arguments array containing all arguments passed to this function
60
+ * @see @ref UInkThread::RegisterExternalFunction
61
+ *
62
+ * @blueprint
63
+ */
64
+ void FExternalFunctionVoidDelegate(const TArray<FInkVar>& Arguments);
65
+ #endif
66
+ /** @cond */
67
+ DECLARE_DYNAMIC_DELEGATE_OneParam(FExternalFunctionVoidDelegate, const TArray<FInkVar>&, Arguments);
68
+ /** @endcond */
69
+
70
+ /** @private */
71
+ DECLARE_DYNAMIC_DELEGATE_TwoParams(FGlobalTagFunctionDelegate, UInkThread*, Caller, const TArray<FString>&, Params);
72
+
73
+ /** @private */
74
+ DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FGlobalTagFunctionMulticastDelegate, UInkThread*, Caller, const TArray<FString>&, Params);
75
+
76
+
77
+ #ifdef DOXYGEN
78
+ DOC_UF(BlueprintImplementableEvent, )
79
+ /** Notification if variable changes.
80
+ * @see @ref AInkRuntime::ObserverVariable()
81
+ *
82
+ * @blueprint
83
+ */
84
+ void FVariableCallbackDelegate();
85
+ #endif
86
+ /** @cond */
87
+ DECLARE_DYNAMIC_DELEGATE(FVariableCallbackDelegate);
88
+ /** @endcond */
89
+
90
+ #ifdef DOXYGEN
91
+ DOC_UF(BlueprintImplementableEvent, )
92
+ /** Notification containing the new variable value, send on variable change.
93
+ * @param value new value of the variable
94
+ * @see @ref AInkRuntime::ObserverVariableEvent()
95
+ *
96
+ * @blueprint
97
+ */
98
+ void FVariableCallbackDelegateNewValue(const FInkVar& value);
99
+ #endif
100
+ /** @cond */
101
+ DECLARE_DYNAMIC_DELEGATE_OneParam(FVariableCallbackDelegateNewValue, const FInkVar&, value);
102
+ /** @endcond */
103
+
104
+ #ifdef DOXYGEN
105
+ DOC_UF(BlueprintImplementableEvent, )
106
+ /** Notification containing old and new varible, send on variable change.
107
+ * @param value new value of the variable
108
+ * @param old_value previouse value of the variable has value @ref EInkVarType::None "None" if
109
+ * variable is set for the first time
110
+ * @see @ref AInkRuntime::ObserverVariableChange()
111
+ *
112
+ * @blueprint
113
+ */
114
+ void FVariableCallbackDelegateNewOldValue(const FInkVar& value, const FInkVar& old_value);
115
+ #endif
116
+ /** @cond */
117
+ DECLARE_DYNAMIC_DELEGATE_TwoParams(FVariableCallbackDelegateNewOldValue, const FInkVar&, value, const FInkVar&, old_value);
118
+ /** @endcond */
119
+
120
+ UCLASS()
121
+
122
+ /** @private */
123
+ class UDelegateKeepAlive : public UObject
124
+ {
125
+ GENERATED_BODY()
126
+ };
127
+
128
+ /** @page TagFunction TagFunction
129
+ * "tag functions" allowes converting tags or context lines to function calls
130
+ * if a tag in the form `functionName_arg1_arg2` is found for a registered tag function
131
+ * the function will be executed
132
+ *
133
+ * Also if a context line starts with a `>>` the normal processing of tags and context
134
+ * will be ignored the corresponding tag functino will be called
135
+ * the format for this function call is `>> FunctionName(Arg1[, Arg2]*)`
136
+ *
137
+ * @see To bind tag functions use @ref UInkThread::RegisterTagFunction() and @ref
138
+ * AInkRuntime::RegisterTagFunction()
139
+ */
@@ -0,0 +1,102 @@
1
+ /* Copyright (c) 2024 Julian Benda
2
+ *
3
+ * This file is part of inkCPP which is released under MIT license.
4
+ * See file LICENSE.txt or go to
5
+ * https://github.com/JBenda/inkcpp for full license details.
6
+ */
7
+ #pragma once
8
+
9
+ #include "InkList.generated.h"
10
+
11
+ namespace ink::runtime {
12
+ class list_interface;
13
+ using list = list_interface*;
14
+ }
15
+
16
+ /** A single flag of a list.
17
+ * @ingroup unreal
18
+ */
19
+ USTRUCT(BlueprintType)
20
+ struct FListFlag {
21
+ GENERATED_BODY()
22
+ UPROPERTY(BlueprintReadOnly, Category = "Ink")
23
+ /** name of the list, the flag is part of */
24
+ FString list_name;
25
+ UPROPERTY(BlueprintReadOnly, Category = "Ink")
26
+ /** name of the flag */
27
+ FString flag_name;
28
+ };
29
+
30
+ /**
31
+ * Allowes reading ink lists.
32
+ * @ingroup unreal
33
+ */
34
+ UCLASS(Blueprintable, BlueprintType)
35
+ class INKCPP_API UInkList : public UObject
36
+ {
37
+ GENERATED_BODY()
38
+
39
+ public:
40
+ /** @private */
41
+ UInkList() {}
42
+
43
+ /** @private */
44
+ UInkList(ink::runtime::list list) { list_data = list; }
45
+
46
+ /** @private */
47
+ void SetList(ink::runtime::list list) { list_data = list; }
48
+
49
+ UFUNCTION(BlueprintPure, Category = "Ink")
50
+ /** Checks if a flag is contained (by name)
51
+ * @attention If the flag name is not unique please use the full flag name aka
52
+ * `list_name.flag_name`
53
+ *
54
+ * @blueprint
55
+ */
56
+ bool ContainsFlag(const FString& flag_name) const;
57
+
58
+ UFUNCTION(BlueprintPure, Category = "Ink")
59
+ /** checks if flag with the same spelling then the enum `value` is set in the list
60
+ * @retval true if flag is contained in list
61
+ *
62
+ * @blueprint
63
+ */
64
+ bool ContainsEnum(const UEnum* Enum, const uint8& value) const;
65
+
66
+ UFUNCTION(BlueprintPure, Category = "Ink")
67
+ /** returns all values of a list with the same name as the enum
68
+ *
69
+ * @blueprint
70
+ */
71
+ TArray<uint8> ElementsOf(const UEnum* Enum) const;
72
+
73
+ UFUNCTION(BlueprintPure, Category = "Ink")
74
+ /** returns all flag as string contained in the list from a list with the same name as the Enum`
75
+ *
76
+ * @blueprint
77
+ */
78
+ TArray<FString> ElementsOfAsString(const UEnum* Enum) const;
79
+
80
+ UFUNCTION(BlueprintPure, Category = "Ink")
81
+ /** returns all `list_name` `flag_name` tuples
82
+ *
83
+ * @blueprint
84
+ */
85
+ TArray<FListFlag> Elements() const;
86
+
87
+ UFUNCTION(BlueprintPure, Category = "Ink")
88
+ /** check if at least one value of the given list is included, OR the list is empty
89
+ * and assoziatet with the list
90
+ *
91
+ * @blueprint
92
+ */
93
+ bool ContainsList(const FString& ListName) const;
94
+
95
+
96
+ private:
97
+ friend struct FInkVar;
98
+
99
+ ink::runtime::list GetData() const { return list_data; }
100
+
101
+ ink::runtime::list list_data;
102
+ };