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.
- checksums.yaml +7 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +84 -0
- data/LICENSE +7 -0
- data/README.md +3 -0
- data/Rakefile +16 -0
- data/bin/console +15 -0
- data/bin/setup +10 -0
- data/bin/tapioca +29 -0
- data/ext/inkcpp_rb/extconf.rb +19 -0
- data/ext/inkcpp_rb/inkcpp/.clang-format +99 -0
- data/ext/inkcpp_rb/inkcpp/.github/FUNDING.yml +1 -0
- data/ext/inkcpp_rb/inkcpp/.github/workflows/build.yml +344 -0
- data/ext/inkcpp_rb/inkcpp/.github/workflows/release.yml +49 -0
- data/ext/inkcpp_rb/inkcpp/.gitignore +25 -0
- data/ext/inkcpp_rb/inkcpp/.gitmodules +9 -0
- data/ext/inkcpp_rb/inkcpp/CMakeLists.txt +170 -0
- data/ext/inkcpp_rb/inkcpp/CODE_OF_CONDUCT.md +76 -0
- data/ext/inkcpp_rb/inkcpp/CONTRIBUTING.md +55 -0
- data/ext/inkcpp_rb/inkcpp/Config.cmake.in +2 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/CMakeLists.txt +13 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.c +38 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/main.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example/test.ink.json +1 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/cmake_example.zip +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/InkCPP_DEMO.zip +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/CreateThread.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/HandleChoice.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ListElementOf.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalRuntime.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/MinimalThread.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/ObseverChange.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/TagListGetValue.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Documentation/unreal/imgs/YieldResume.png +0 -0
- data/ext/inkcpp_rb/inkcpp/Doxyfile +2825 -0
- data/ext/inkcpp_rb/inkcpp/LICENSE.txt +22 -0
- data/ext/inkcpp_rb/inkcpp/Minimal.runsettings +8 -0
- data/ext/inkcpp_rb/inkcpp/README.md +192 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/CMakeLists.txt +67 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/array.h +481 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/avl_array.h +833 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/casting.h +93 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/choice.cpp +54 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.cpp +124 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/collections/restorable.h +406 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.cpp +52 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/container_operations.h +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/executioner.h +179 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functional.cpp +86 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functions.cpp +54 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/functions.h +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.cpp +289 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/globals_impl.h +149 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/header.cpp +44 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/choice.h +106 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/functional.h +327 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/globals.h +196 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/list.h +187 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/runner.h +291 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/snapshot.h +61 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/story.h +219 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/story_ptr.h +233 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/traits.h +270 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/include/types.h +169 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.cpp +79 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_impl.h +39 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.cpp +276 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_operations.h +356 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.cpp +841 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/list_table.h +450 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/numeric_operations.h +529 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/operation_bases.h +164 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/operations.h +100 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/output.cpp +528 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/output.h +153 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/platform.h +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/random.h +38 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.cpp +1396 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/runner_impl.h +336 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/simple_restorable_stack.h +335 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.cpp +182 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_impl.h +91 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/snapshot_interface.h +57 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/stack.cpp +618 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/stack.h +243 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.cpp +361 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_impl.h +92 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/story_ptr.cpp +75 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.cpp +125 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_operations.h +67 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.cpp +149 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_table.h +47 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/string_utils.h +207 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/system.cpp +39 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/tuple.hpp +151 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/value.cpp +279 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp/value.h +666 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/CMakeLists.txt +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/include/inkcpp.h +393 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp.cpp +344 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/inkcpp_c.pc.in +10 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/ExternalFunction.c +56 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Globals.c +98 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Lists.c +73 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Observer.c +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_c/tests/Snapshot.c +65 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/CMakeLists.txt +49 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/inkcpp_cl.cpp +215 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.cpp +209 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_cl/test.h +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/CMakeLists.txt +37 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.cpp +446 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_emitter.h +70 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.cpp +166 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/binary_stream.h +79 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/command.cpp +107 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/compiler.cpp +96 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.cpp +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/emitter.h +104 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compilation_results.h +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/include/compiler.h +44 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json.hpp +24596 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.cpp +411 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/json_compiler.h +62 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.cpp +47 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/list_data.h +70 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.cpp +107 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_compiler/reporter.h +55 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/CMakeLists.txt +19 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/example.py +78 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/src/module.cpp +317 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/conftest.py +53 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_ExternalFunctions.py +35 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Globals.py +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Lists.py +43 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Observer.py +27 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/tests/test_Snapshot.py +57 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_py/unreal_example.ink +71 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Array.cpp +115 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/CMakeLists.txt +117 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Callstack.cpp +392 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/EmptyStringForDivert.cpp +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ExternalFunctionsExecuteProperly.cpp +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/FallbackFunction.cpp +77 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Globals.cpp +73 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/InkyJson.cpp +34 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/LabelCondition.cpp +60 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Lists.cpp +144 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/LookaheadSafe.cpp +46 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Main.cpp +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/MoveTo.cpp +95 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/NewLines.cpp +76 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/NoEarlyTags.cpp +33 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Observer.cpp +245 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Pointer.cpp +191 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Restorable.cpp +294 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/SpaceAfterBracketChoice.cpp +45 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Stack.cpp +224 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Tags.cpp +131 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ThirdTierChoiceAfterBrackets.cpp +38 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/UTF8.cpp +56 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/Value.cpp +210 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/catch.hpp +17970 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/AHF.ink +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ChoiceBracketStory.ink +7 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/EmptyStringForDivert.ink +13 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ExternalFunctionsExecuteProperly.ink +11 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/FallBack.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/GlobalStory.ink +9 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LabelConditionStory.ink +5 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LinesStory.ink +42 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListLogicStory.ink +40 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ListStory.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/LookaheadSafe.ink +14 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/MoveTo.ink +36 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/NoEarlyTags.ink +19 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ObserverStory.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/SimpleStoryFlow.ink +65 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TagsStory.ink +22 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/TheIntercept.ink +1686 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/ThirdTierChoiceAfterBracketsStory.ink +13 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF-8-demo.txt +212 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/UTF8Story.ink +218 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inklecate.json +154 -0
- data/ext/inkcpp_rb/inkcpp/inkcpp_test/ink/simple-1.1.1-inky.json +160 -0
- data/ext/inkcpp_rb/inkcpp/notes/ArchitectureNotes.md +54 -0
- data/ext/inkcpp_rb/inkcpp/notes/ListNotes.md +69 -0
- data/ext/inkcpp_rb/inkcpp/notes/OperationNotes.md +35 -0
- data/ext/inkcpp_rb/inkcpp/notes/TagsNotes.md +24 -0
- data/ext/inkcpp_rb/inkcpp/notes/WhitespaceNotes.md +28 -0
- data/ext/inkcpp_rb/inkcpp/proofing/README.md +3 -0
- data/ext/inkcpp_rb/inkcpp/proofing/inkcpp_runtime_driver +12 -0
- data/ext/inkcpp_rb/inkcpp/pyproject.toml +63 -0
- data/ext/inkcpp_rb/inkcpp/setup.py +166 -0
- data/ext/inkcpp_rb/inkcpp/shared/CMakeLists.txt +14 -0
- data/ext/inkcpp_rb/inkcpp/shared/private/command.h +172 -0
- data/ext/inkcpp_rb/inkcpp/shared/private/header.h +46 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/config.h +53 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/system.h +307 -0
- data/ext/inkcpp_rb/inkcpp/shared/public/version.h +14 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestAllSequenceTypes.ink +59 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestArithmetic.ink +17 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBasicStringLiterals.ink +8 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBasicTunnel.ink +10 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestBlanksInInlineSequences.ink +51 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestCallStackEvaluation.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceCount.ink +15 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceDivertsToDone.ink +6 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestChoiceWithBracketsOnly.ink +9 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestCompareDivertTargets.ink +26 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestComplexTunnels.ink +22 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestConditionalChoiceInWeave.ink +19 -0
- data/ext/inkcpp_rb/inkcpp/tests/TestTunnelOnwardsAfterTunnel.ink +17 -0
- data/ext/inkcpp_rb/inkcpp/unreal/CMakeLists.txt +51 -0
- data/ext/inkcpp_rb/inkcpp/unreal/UE_example.ink +92 -0
- data/ext/inkcpp_rb/inkcpp/unreal/blueprint_filter.js +377 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Resources/Icon128.png +0 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkAsset.cpp +47 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkChoice.cpp +40 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkList.cpp +86 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkRuntime.cpp +265 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkThread.cpp +239 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/InkVar.cpp +143 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/TagList.cpp +95 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Private/inkcpp.cpp +13 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkAsset.h +50 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkChoice.h +58 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkDelegates.h +139 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkList.h +102 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkRuntime.h +177 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkSnapshot.h +30 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkThread.h +215 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/InkVar.h +245 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/TagList.h +77 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/Public/inkcpp.h +217 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp/inkcpp.Build.cs +62 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.cpp +237 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/InkAssetFactory.h +43 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inkcpp_editor.cpp +13 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Private/inklecate_cmd.cpp.in +24 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/Public/inkcpp_editor.h +9 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/Source/inkcpp_editor/inkcpp_editor.Build.cs +61 -0
- data/ext/inkcpp_rb/inkcpp/unreal/inkcpp/inkcpp.uplugin +44 -0
- data/ext/inkcpp_rb/inkcpp/unreal/render.css +1 -0
- data/ext/inkcpp_rb/inkcpp_rb.cpp +321 -0
- data/inkcpp_rb.gemspec +54 -0
- data/rbi/inkcpp_rb.rbi +211 -0
- data/sorbet/config +4 -0
- data/sorbet/rbi/annotations/.gitattributes +1 -0
- data/sorbet/rbi/annotations/minitest.rbi +119 -0
- data/sorbet/rbi/gems/.gitattributes +1 -0
- data/sorbet/rbi/gems/benchmark@0.4.0.rbi +618 -0
- data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
- data/sorbet/rbi/gems/minitest@5.25.4.rbi +1547 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
- data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
- data/sorbet/rbi/gems/prism@1.3.0.rbi +40040 -0
- data/sorbet/rbi/gems/rake-compiler@1.2.8.rbi +9 -0
- data/sorbet/rbi/gems/rake@13.2.1.rbi +3033 -0
- data/sorbet/rbi/gems/rbi@0.2.2.rbi +4527 -0
- data/sorbet/rbi/gems/rice@4.3.3.rbi +44 -0
- data/sorbet/rbi/gems/spoom@1.5.0.rbi +4932 -0
- data/sorbet/rbi/gems/tapioca@0.16.7.rbi +3611 -0
- data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
- data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
- data/sorbet/rbi/gems/yard@0.9.37.rbi +18379 -0
- data/sorbet/tapioca/config.yml +13 -0
- data/sorbet/tapioca/require.rb +4 -0
- 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
|
+
};
|