From 18e7b2daa840a0d34b687113248a47b15b4d3619 Mon Sep 17 00:00:00 2001 From: yvmou_ Date: Thu, 15 Oct 2026 16:30:44 +0800 Subject: [PATCH] docs\limboai-stable --- docs/limboai-stable/.buildinfo | 4 + .../.workbuddy/memory/2026-10-15.md | 18 + docs/limboai-stable/_i18n/batches/batch01.txt | 87 + docs/limboai-stable/_i18n/batches/batch02.txt | 92 + docs/limboai-stable/_i18n/batches/batch03.txt | 142 + docs/limboai-stable/_i18n/batches/batch04.txt | 138 + docs/limboai-stable/_i18n/batches/batch05.txt | 163 + docs/limboai-stable/_i18n/batches/batch06.txt | 156 + docs/limboai-stable/_i18n/batches/batch07.txt | 164 + docs/limboai-stable/_i18n/batches/batch08.txt | 131 + docs/limboai-stable/_i18n/batches/batch09.txt | 158 + docs/limboai-stable/_i18n/batches/batch10.txt | 159 + docs/limboai-stable/_i18n/batches/batch11.txt | 61 + docs/limboai-stable/_i18n/blocks.json | 22113 ++++++++ docs/limboai-stable/_i18n/build.py | 294 + docs/limboai-stable/_i18n/extract.py | 57 + docs/limboai-stable/_i18n/extract_blocks.py | 83 + docs/limboai-stable/_i18n/gaps.py | 33 + docs/limboai-stable/_i18n/make_batches.py | 42 + docs/limboai-stable/_i18n/serialize.py | 120 + docs/limboai-stable/_i18n/strings.json | 43159 ++++++++++++++++ docs/limboai-stable/_i18n/trans/batch01.json | 89 + docs/limboai-stable/_i18n/trans/batch02.json | 94 + docs/limboai-stable/_i18n/trans/batch03.json | 144 + docs/limboai-stable/_i18n/trans/batch04.json | 140 + docs/limboai-stable/_i18n/trans/batch05.json | 165 + docs/limboai-stable/_i18n/trans/batch06.json | 158 + docs/limboai-stable/_i18n/trans/batch07.json | 166 + docs/limboai-stable/_i18n/trans/batch08.json | 133 + docs/limboai-stable/_i18n/trans/batch09.json | 160 + docs/limboai-stable/_i18n/trans/batch10.json | 161 + docs/limboai-stable/_i18n/trans/batch11.json | 63 + docs/limboai-stable/_i18n/uniq.json | 10663 ++++ .../_sphinx_javascript_frameworks_compat.js | 123 + docs/limboai-stable/_static/base-stemmer.js | 476 + docs/limboai-stable/_static/basic.css | 906 + docs/limboai-stable/_static/check-solid.svg | 4 + .../_static/check-solid.svg.import | 43 + docs/limboai-stable/_static/clipboard.min.js | 7 + docs/limboai-stable/_static/copy-button.svg | 5 + .../_static/copy-button.svg.import | 43 + docs/limboai-stable/_static/copybutton.css | 94 + docs/limboai-stable/_static/copybutton.js | 248 + .../_static/copybutton_funcs.js | 73 + .../limboai-stable/_static/css/badge_only.css | 1 + .../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 0 -> 87624 bytes .../css/fonts/Roboto-Slab-Bold.woff.import | 36 + .../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 0 -> 67312 bytes .../css/fonts/Roboto-Slab-Bold.woff2.import | 36 + .../css/fonts/Roboto-Slab-Regular.woff | Bin 0 -> 86288 bytes .../css/fonts/Roboto-Slab-Regular.woff.import | 36 + .../css/fonts/Roboto-Slab-Regular.woff2 | Bin 0 -> 66444 bytes .../fonts/Roboto-Slab-Regular.woff2.import | 36 + .../_static/css/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../_static/css/fonts/fontawesome-webfont.svg | 2671 + .../css/fonts/fontawesome-webfont.svg.import | 43 + .../_static/css/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../css/fonts/fontawesome-webfont.ttf.import | 36 + .../css/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../css/fonts/fontawesome-webfont.woff.import | 36 + .../css/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../fonts/fontawesome-webfont.woff2.import | 36 + .../_static/css/fonts/lato-bold-italic.woff | Bin 0 -> 323344 bytes .../css/fonts/lato-bold-italic.woff.import | 36 + .../_static/css/fonts/lato-bold-italic.woff2 | Bin 0 -> 193308 bytes .../css/fonts/lato-bold-italic.woff2.import | 36 + .../_static/css/fonts/lato-bold.woff | Bin 0 -> 309728 bytes .../_static/css/fonts/lato-bold.woff.import | 36 + .../_static/css/fonts/lato-bold.woff2 | Bin 0 -> 184912 bytes .../_static/css/fonts/lato-bold.woff2.import | 36 + .../_static/css/fonts/lato-normal-italic.woff | Bin 0 -> 328412 bytes .../css/fonts/lato-normal-italic.woff.import | 36 + .../css/fonts/lato-normal-italic.woff2 | Bin 0 -> 195704 bytes .../css/fonts/lato-normal-italic.woff2.import | 36 + .../_static/css/fonts/lato-normal.woff | Bin 0 -> 309192 bytes .../_static/css/fonts/lato-normal.woff.import | 36 + .../_static/css/fonts/lato-normal.woff2 | Bin 0 -> 182708 bytes .../css/fonts/lato-normal.woff2.import | 36 + docs/limboai-stable/_static/css/theme.css | 4 + .../_static/dark_mode_css/custom.css | 77 + .../_static/dark_mode_css/dark.css | 520 + .../_static/dark_mode_css/general.css | 68 + .../_static/dark_mode_js/default_dark.js | 13 + .../_static/dark_mode_js/default_light.js | 13 + .../_static/dark_mode_js/theme_switcher.js | 39 + docs/limboai-stable/_static/doctools.js | 150 + .../_static/documentation_options.js | 13 + .../limboai-stable/_static/english-stemmer.js | 1066 + docs/limboai-stable/_static/file.png | Bin 0 -> 286 bytes docs/limboai-stable/_static/file.png.import | 40 + .../_static/fonts/Lato/lato-bold.eot | Bin 0 -> 256056 bytes .../_static/fonts/Lato/lato-bold.ttf | Bin 0 -> 600856 bytes .../_static/fonts/Lato/lato-bold.ttf.import | 36 + .../_static/fonts/Lato/lato-bold.woff | Bin 0 -> 309728 bytes .../_static/fonts/Lato/lato-bold.woff.import | 36 + .../_static/fonts/Lato/lato-bold.woff2 | Bin 0 -> 184912 bytes .../_static/fonts/Lato/lato-bold.woff2.import | 36 + .../_static/fonts/Lato/lato-bolditalic.eot | Bin 0 -> 266158 bytes .../_static/fonts/Lato/lato-bolditalic.ttf | Bin 0 -> 622572 bytes .../fonts/Lato/lato-bolditalic.ttf.import | 36 + .../_static/fonts/Lato/lato-bolditalic.woff | Bin 0 -> 323344 bytes .../fonts/Lato/lato-bolditalic.woff.import | 36 + .../_static/fonts/Lato/lato-bolditalic.woff2 | Bin 0 -> 193308 bytes .../fonts/Lato/lato-bolditalic.woff2.import | 36 + .../_static/fonts/Lato/lato-italic.eot | Bin 0 -> 268604 bytes .../_static/fonts/Lato/lato-italic.ttf | Bin 0 -> 639388 bytes .../_static/fonts/Lato/lato-italic.ttf.import | 36 + .../_static/fonts/Lato/lato-italic.woff | Bin 0 -> 328412 bytes .../fonts/Lato/lato-italic.woff.import | 36 + .../_static/fonts/Lato/lato-italic.woff2 | Bin 0 -> 195704 bytes .../fonts/Lato/lato-italic.woff2.import | 36 + .../_static/fonts/Lato/lato-regular.eot | Bin 0 -> 253461 bytes .../_static/fonts/Lato/lato-regular.ttf | Bin 0 -> 607720 bytes .../fonts/Lato/lato-regular.ttf.import | 36 + .../_static/fonts/Lato/lato-regular.woff | Bin 0 -> 309192 bytes .../fonts/Lato/lato-regular.woff.import | 36 + .../_static/fonts/Lato/lato-regular.woff2 | Bin 0 -> 182708 bytes .../fonts/Lato/lato-regular.woff2.import | 36 + .../fonts/RobotoSlab/roboto-slab-v7-bold.eot | Bin 0 -> 79520 bytes .../fonts/RobotoSlab/roboto-slab-v7-bold.ttf | Bin 0 -> 170616 bytes .../RobotoSlab/roboto-slab-v7-bold.ttf.import | 36 + .../fonts/RobotoSlab/roboto-slab-v7-bold.woff | Bin 0 -> 87624 bytes .../roboto-slab-v7-bold.woff.import | 36 + .../RobotoSlab/roboto-slab-v7-bold.woff2 | Bin 0 -> 67312 bytes .../roboto-slab-v7-bold.woff2.import | 36 + .../RobotoSlab/roboto-slab-v7-regular.eot | Bin 0 -> 78331 bytes .../RobotoSlab/roboto-slab-v7-regular.ttf | Bin 0 -> 169064 bytes .../roboto-slab-v7-regular.ttf.import | 36 + .../RobotoSlab/roboto-slab-v7-regular.woff | Bin 0 -> 86288 bytes .../roboto-slab-v7-regular.woff.import | 36 + .../RobotoSlab/roboto-slab-v7-regular.woff2 | Bin 0 -> 66444 bytes .../roboto-slab-v7-regular.woff2.import | 36 + docs/limboai-stable/_static/jquery.js | 2 + docs/limboai-stable/_static/js/badge_only.js | 1 + docs/limboai-stable/_static/js/theme.js | 1 + docs/limboai-stable/_static/js/versions.js | 228 + docs/limboai-stable/_static/language_data.js | 13 + docs/limboai-stable/_static/logo.png | Bin 0 -> 7978 bytes docs/limboai-stable/_static/logo.png.import | 40 + docs/limboai-stable/_static/minus.png | Bin 0 -> 90 bytes docs/limboai-stable/_static/minus.png.import | 40 + docs/limboai-stable/_static/plus.png | Bin 0 -> 90 bytes docs/limboai-stable/_static/plus.png.import | 40 + docs/limboai-stable/_static/pygments.css | 75 + docs/limboai-stable/_static/searchtools.js | 693 + .../_static/sphinx_highlight.js | 159 + docs/limboai-stable/index.html | 4392 ++ docs/limboai-stable/index.zh.html | 4190 ++ docs/limboai-stable/objects.inv | Bin 0 -> 6735 bytes 149 files changed, 97312 insertions(+) create mode 100644 docs/limboai-stable/.buildinfo create mode 100644 docs/limboai-stable/.workbuddy/memory/2026-10-15.md create mode 100644 docs/limboai-stable/_i18n/batches/batch01.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch02.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch03.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch04.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch05.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch06.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch07.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch08.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch09.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch10.txt create mode 100644 docs/limboai-stable/_i18n/batches/batch11.txt create mode 100644 docs/limboai-stable/_i18n/blocks.json create mode 100644 docs/limboai-stable/_i18n/build.py create mode 100644 docs/limboai-stable/_i18n/extract.py create mode 100644 docs/limboai-stable/_i18n/extract_blocks.py create mode 100644 docs/limboai-stable/_i18n/gaps.py create mode 100644 docs/limboai-stable/_i18n/make_batches.py create mode 100644 docs/limboai-stable/_i18n/serialize.py create mode 100644 docs/limboai-stable/_i18n/strings.json create mode 100644 docs/limboai-stable/_i18n/trans/batch01.json create mode 100644 docs/limboai-stable/_i18n/trans/batch02.json create mode 100644 docs/limboai-stable/_i18n/trans/batch03.json create mode 100644 docs/limboai-stable/_i18n/trans/batch04.json create mode 100644 docs/limboai-stable/_i18n/trans/batch05.json create mode 100644 docs/limboai-stable/_i18n/trans/batch06.json create mode 100644 docs/limboai-stable/_i18n/trans/batch07.json create mode 100644 docs/limboai-stable/_i18n/trans/batch08.json create mode 100644 docs/limboai-stable/_i18n/trans/batch09.json create mode 100644 docs/limboai-stable/_i18n/trans/batch10.json create mode 100644 docs/limboai-stable/_i18n/trans/batch11.json create mode 100644 docs/limboai-stable/_i18n/uniq.json create mode 100644 docs/limboai-stable/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 docs/limboai-stable/_static/base-stemmer.js create mode 100644 docs/limboai-stable/_static/basic.css create mode 100644 docs/limboai-stable/_static/check-solid.svg create mode 100644 docs/limboai-stable/_static/check-solid.svg.import create mode 100644 docs/limboai-stable/_static/clipboard.min.js create mode 100644 docs/limboai-stable/_static/copy-button.svg create mode 100644 docs/limboai-stable/_static/copy-button.svg.import create mode 100644 docs/limboai-stable/_static/copybutton.css create mode 100644 docs/limboai-stable/_static/copybutton.js create mode 100644 docs/limboai-stable/_static/copybutton_funcs.js create mode 100644 docs/limboai-stable/_static/css/badge_only.css create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff.import create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2 create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2.import create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff.import create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2 create mode 100644 docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2.import create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.eot create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg.import create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf.import create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff.import create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2 create mode 100644 docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2 create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold.woff create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold.woff.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold.woff2 create mode 100644 docs/limboai-stable/_static/css/fonts/lato-bold.woff2.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2 create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal.woff create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal.woff.import create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal.woff2 create mode 100644 docs/limboai-stable/_static/css/fonts/lato-normal.woff2.import create mode 100644 docs/limboai-stable/_static/css/theme.css create mode 100644 docs/limboai-stable/_static/dark_mode_css/custom.css create mode 100644 docs/limboai-stable/_static/dark_mode_css/dark.css create mode 100644 docs/limboai-stable/_static/dark_mode_css/general.css create mode 100644 docs/limboai-stable/_static/dark_mode_js/default_dark.js create mode 100644 docs/limboai-stable/_static/dark_mode_js/default_light.js create mode 100644 docs/limboai-stable/_static/dark_mode_js/theme_switcher.js create mode 100644 docs/limboai-stable/_static/doctools.js create mode 100644 docs/limboai-stable/_static/documentation_options.js create mode 100644 docs/limboai-stable/_static/english-stemmer.js create mode 100644 docs/limboai-stable/_static/file.png create mode 100644 docs/limboai-stable/_static/file.png.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bold.eot create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bold.woff create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bold.woff.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2 create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.eot create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2 create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-italic.eot create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-italic.woff create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-italic.woff.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2 create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-regular.eot create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-regular.woff create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-regular.woff.import create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2 create mode 100644 docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2.import create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf.import create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff.import create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2.import create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf.import create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff.import create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 create mode 100644 docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2.import create mode 100644 docs/limboai-stable/_static/jquery.js create mode 100644 docs/limboai-stable/_static/js/badge_only.js create mode 100644 docs/limboai-stable/_static/js/theme.js create mode 100644 docs/limboai-stable/_static/js/versions.js create mode 100644 docs/limboai-stable/_static/language_data.js create mode 100644 docs/limboai-stable/_static/logo.png create mode 100644 docs/limboai-stable/_static/logo.png.import create mode 100644 docs/limboai-stable/_static/minus.png create mode 100644 docs/limboai-stable/_static/minus.png.import create mode 100644 docs/limboai-stable/_static/plus.png create mode 100644 docs/limboai-stable/_static/plus.png.import create mode 100644 docs/limboai-stable/_static/pygments.css create mode 100644 docs/limboai-stable/_static/searchtools.js create mode 100644 docs/limboai-stable/_static/sphinx_highlight.js create mode 100644 docs/limboai-stable/index.html create mode 100644 docs/limboai-stable/index.zh.html create mode 100644 docs/limboai-stable/objects.inv diff --git a/docs/limboai-stable/.buildinfo b/docs/limboai-stable/.buildinfo new file mode 100644 index 0000000..9869e85 --- /dev/null +++ b/docs/limboai-stable/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 39b4a2a1961cc11b0ff4f34d2bc00a9a +tags: 33eac41acc08762151beb8f3b7b86c8f diff --git a/docs/limboai-stable/.workbuddy/memory/2026-10-15.md b/docs/limboai-stable/.workbuddy/memory/2026-10-15.md new file mode 100644 index 0000000..a5ffc92 --- /dev/null +++ b/docs/limboai-stable/.workbuddy/memory/2026-10-15.md @@ -0,0 +1,18 @@ +# 2026-10-15 + +## LimboAI 文档汉化(index.html → index.zh.html) + +- 目标:把 readthedocs 离线包(单页 Sphinx 文档,`index.html`,588KB,2190 个可翻译块)汉化为中文。 +- 方案:块级抽取 + 占位符标记 + 批量人工翻译 + 回填重建。 + - `_i18n/serialize.py`:把每个块(p/h1-h6/td/th/dt/dd/li)序列化为紧凑模板: + ``=不译的内联元素(code/img/abbr 等原样保留),`...`=链接,``/``=加粗/斜体,其余内联标签透明化。 + - `_i18n/make_batches.py`:按首次出现顺序去重并分配稳定 uid,切成 `batches/batchNN.txt`(11 批,1451 条唯一模板)。 + - `_i18n/trans/batchNN.json`:uid → 中文模板(全部 11 批已完成)。 + - `_i18n/build.py`:回填重建 + 校验(标记一致性、结构对比)、页脚/面包屑/abbr title/代码注释润色、侧栏汉化徽标。 +- 关键实现坑(后续复用注意): + 1. 片段回填必须用 `html.parser`,`lxml` 会把裸文本包成 `

` 破坏结构。 + 2. `` 内含 `

` 的“容器块”要跳过重建,否则会拍平丢失内层 `

`(280 个,已用容器检测处理)。 + 3. 标题里的 `a.headerlink` 需在 clear() 前取出再回填,否则丢失 303 个标题锚点。 + 4. 校验只强制 ``、``、`` 必须一致,`/` 允许额外配对。 +- 结果:`index.zh.html`(580KB),结构计数与原文件一致(section/p/li/a/code/pre/table/td 全部对齐),无英文残留(仅类名/方法名等标识符保留英文),45 处代码注释已译。 +- 术语约定:Behavior Tree→行为树、State Machine→状态机、Blackboard→黑板(类名保留)、Inherits:→继承:、Inherited By:→被继承:、Properties→属性、Method Descriptions→方法说明;所有 API/类名/节点名/文件名保留英文。 diff --git a/docs/limboai-stable/_i18n/batches/batch01.txt b/docs/limboai-stable/_i18n/batches/batch01.txt new file mode 100644 index 0000000..6b81439 --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch01.txt @@ -0,0 +1,87 @@ +<1> LimboAI Documentation +<2> LimboAI is an open-source C++ module for Godot Engine 4 providing a combination of Behavior Trees and State Machines for crafting your game’s AI. It comes with a behavior tree editor, built-in documentation, visual debugger, and more! While it is implemented in C++, it fully supports GDScript for creating your own tasks and states. The full list of features is available on the LimboAI GitHub page. +<3> Behavior Trees are powerful hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games. To learn more about behavior trees, check out Introduction to Behavior Trees. +<4> Hierarchical State Machines are finite state machines that allow any state to host their own sub-state machine. This allows you to tackle your AI’s state and transition complexity by breaking down one big state machine into multiple smaller ones. +<5> Getting LimboAI +<6> LimboAI can be used as either a C++ module or as a GDExtension shared library. There are some differences between the two. In short, GDExtension version is more convenient to use but somewhat limited in features. The module version provides better editor experience and is slightly more performant, but it requires using custom engine builds including the export templates. Whichever you choose to use, your project will stay compatible with both and you can switch from one to the other any time. +<7> Choose the version you’d like to use. If you’re unsure, start with the GDExtension version. You can change your decision at any time - both versions are fully compatible. +<8> Get GDExtension version +<9> Precompiled builds are available on the official LimboAI GitHub page, and in the Asset Library. +<10> GDExtension is the most convenient way of using the LimboAI plugin, but it comes with certain limitations: +<11> Documentation tooltips are not available. +<12> Handy BBParam property editor is not available in the extension due to dependencies on the engine classes that are not available in the Godot API. +<13> 🛈 See also: What is GDExtension? +<14> Installation instructions: +<15> Make sure you’re using the latest stable version of the Godot editor. +<16> Create a new project for your experiments with LimboAI. +<17> In Godot, click AssetLib tab at the top of the screen and search for LimboAI. Download it. LimboAI plugin will be downloaded with the demo project files. Don’t mind the errors printed at this point, this is due to the extension library not being loaded just yet. +<18> Reload your project with Project -> Reload project. There shouldn’t be any errors printed now. +<19> In the project files, locate a scene file called showcase.tscn and run it. It’s the demo’s entry point. +<20> Get module version +<21> Precompiled builds are available on the official LimboAI GitHub page. +<22> In GitHub releases, download the latest pre-compiled release build for your platform. +<23> Download the demo project archive from the same release. +<24> Extract the pre-compiled editor and the demo project files. +<25> Launch the pre-compiled editor binary, import and open the demo project. +<26> Run the project. +<27> Important: To export your game using the module version of LimboAI, make sure to use the pre-compiled export templates included in the same GitHub release build. +<28> Using LimboAI with C# +<29> Here’s how you can use the module version with C# to write your tasks and states. +<30> Locate LimboAI NuGet package files. +<31> Each provided build comes with a GodotSharp folder, which has packages under “GodotSharp/Tools/nupkgs/”. Note down the directory path; you’ll need it in the next step. +<32> Add a local source for NuGet packages using the following command: +<33> Your C# project should be able to see LimboAI classes and compile. +<34> Regarding GDExtension, I can only confirm success with the module version and C#. Unfortunately, I haven’t had any luck with the GDExtension version yet. If you’ve had success with GDExtension, please let me know via Discord or email. +<35> Contributing +<36> We target the latest stable version of the Godot Engine for development until a third beta or a release candidate of an upcoming Godot release becomes available. If you want to contribute to the project, please ensure that you are using the corresponding Godot version. +<37> We follow the Godot code style guidelines. Please use <2/> to maintain consistent styling. You can install <3/> hooks for Git using <4/> to automate this process. +<38> Please keep the minor versions backward-compatible when submitting pull requests. +<39> We support building LimboAI as a module for the Godot Engine and as a GDExtension library. Make sure your contribution is compatible with both. Our CI workflow will verify that your changes can be compiled in both configurations. +<40> Compiling as module of the Godot Engine +<41> Clone the Godot Engine repository. +<42> Switch to the latest stable tag. +<43> Clone the LimboAI repository into the <1/> directory. +<44> Consult the Godot Engine documentation for detailed instructions on building the engine. +<45> Unit tests can be compiled using the <1/> build option. To execute them, run the compiled Godot binary with the <2/> command-line options. +<46> Building C# Packages +<47> If you want C# Support for LimboAI when building from source, follow Godot’s instructions for building from source with C# Support: Compiling with .NET. LimboAI’s classes will be included in the output from that build process. +<48> Compiling as GDExtension library +<49> You’ll need the SCons build tool and a C++ compiler. See also Compiling. Run <2/> to build the plugin library for your current platform. +<50> SCons will automatically clone the <1/> repository if it doesn’t already exist in the <2/> directory. +<51> By default, built targets are placed in the demo project: <1/>. +<52> Check <1/> for other options and targets. +<53> Contributing to the documentation +<54> Online documentation is created using Sphinx. Source files are located in the <2/> directory in RST format and can be built locally with <3/>. See the Sphinx documentation for more details. +<55> Class documentation resides in XML files within the <1/> directory. If you create a new class or modify an existing one, you can run the compiled Godot binary with the <2/> option in the root of the Godot source code to generate the missing XML files or sections within those files in the class documentation. After editing the XML files, please run the compiled editor binary with the <3/> option again to update and tidy up the XML files. +<56> Sphinx RST files for the class documentation are generated from XML files using the Godot script <1/> and stored in the <2/> directory. This process is performed using our own script <3/>. RST files in <4/> should not be edited manually. +<57> Introduction to Behavior Trees +<58> 🛈 Note: Demo project includes a tutorial that provides an introduction to behavior trees through illustrative examples. +<59> Behavior Trees (BT) are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games. +<60> Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include Sequence, Selector, and Invert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. Such tasks can share data using the Blackboard. +<61> 🛈 Note: To create your own actions, extend the BTAction class. +<62> A Behavior Tree is usually processed each frame. It is traversed from top to bottom, with the control tasks determining the control flow. Each task has a _tick method, which performs the task’s work and returns a status indicating its progress: <2/>, <3/>, or <4/>. <5/> and <6/> indicate the outcome of finished work, while <7/> status is returned when a task requires more than one tick to complete its job. These statuses determine how the tree progresses, with the <8/> status usually meaning that the tree will continue execution during the next frame. +<63> There are four types of tasks: +<64> Actions are leaf tasks that perform the actual work. +<65> Examples: PlayAnimation, Wait. +<66> Conditions are leaf tasks that conduct various checks. +<67> Examples: CheckVar, InRange. +<68> Composites can have one or more child tasks, and dictate the execution flow of their children. +<69> Examples: Sequence, Selector, Parallel. +<70> Decorators can only have a single child and they change how their child task operates. +<71> Examples: AlwaysSucceed, Invert, TimeLimit. +<72> Sequence is one of the core composite tasks. It executes its child tasks sequentially, from first to last, until one of them returns <2/>, or all of them result in <3/>. In other words, if any child task results in <4/>, the Sequence execution will be aborted, and the Sequence itself will return <7/>. +<73> Selector is another essential composite task. It executes its child tasks sequentially, from first to last, until one of them returns <2/> or all of them result in <3/>. In other words, when a child task results in <4/>, it moves on to the next one until it finds the one that returns <5/>. Once a child task results in <6/>, the Selector stops and also returns <8/>. The purpose of the Selector is to find a child that succeeds. +<74> Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with Sequence and Selector to craft your decision-making logic. +<75> 🛈 Note: To create your own conditions, extend the BTCondition class. +<76> Check out the BTTask class documentation, which provides the foundation for various building blocks of Behavior Trees. +<77> Creating Behavior Trees +<78> This chapter describes how to create and debug behavior trees. +<79> Add a Behavior Tree to an agent +<80> Follow these steps to add a behavior tree to a new or existing agent: +<81> Make a scene file for your agent, or open an existing scene. +<82> Add a BTPlayer node to your scene. +<83> Select BTPlayer, and create a new behavior tree in the inspector. +<84> Optionally, you can save the behavior tree to a file using the property’s context menu. +<85> Click the behavior tree property to open it in the LimboAI editor. +<86> Debugging Behavior Trees +<87> In Godot Engine, follow to “Bottom Panel > Debugger > LimboAI” tab. With the LimboAI debugger, you can inspect any currently active behavior tree within the running project. The debugger can be detached from the main editor window, which can be particularly useful if you have a HiDPI or a secondary display. \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch02.txt b/docs/limboai-stable/_i18n/batches/batch02.txt new file mode 100644 index 0000000..9a0be9a --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch02.txt @@ -0,0 +1,92 @@ +<88> Inspecting task properties and blackboard +<89> When you click on a task in the LimboAI debugger, its properties are shown in the remote Inspector panel, including the Blackboard reference. Click the Blackboard to open it and view all variables across the full scope chain, grouped by scope. You can also edit variable values live, which can be useful for testing and debugging your game’s AI. +<90> Creating custom tasks +<91> By default, user tasks should be placed in the <1/> directory. You can set an alternative location for user tasks in the <2/> (To see those options, <3/> should be enabled in the Project Settings). +<92> Each subdirectory within the user tasks directory is treated as a category. Therefore, if you create a subdirectory named “motion_and_physics,” your custom tasks in that directory will automatically be categorized under “Motion And Physics.” +<93> When creating custom tasks, extend one of the following base classes: BTAction, BTCondition, BTDecorator, BTComposite. More on task types you can read in the Introduction to Behavior Trees. +<94> 🛈 Note: To help you write new tasks, you can add a script template to your project using “Misc → Create script template” menu option. +<95> Using the Blackboard is covered in Accessing the Blackboard in a Task. +<96> Task anatomy +<97> Example 1: A simple action +<98> Example 2: InRange condition +<99> Creating tasks in C# +<100> You can use the following script template for custom tasks: +<101> Sharing data using Blackboard +<102> To share data between different tasks and states, we employ a feature known as the Blackboard. The Blackboard serves as a central repository where tasks and states can store and retrieve named variables, allowing for seamless data interchange. Each instance of a behavior tree or a state machine gets its own dedicated Blackboard. It has the capability to store various data types, including objects and resources. +<103> Using the Blackboard, you can easily share data in your behavior trees, making the tasks in the behavior tree more flexible. +<104> Accessing the Blackboard in a Task +<105> Every BTTask has access to the Blackboard, providing a straightforward mechanism for data exchange. Here’s an example of how you can interact with the Blackboard in GDScript: +<106> If you are accessing a variable that holds an object instance, and it is expected that the instance may be null or freed, you can do it like this: +<107> It is recommended to suffix variable name properties with <1/>, like in the example above, which enables the inspector to provide a more convenient property editor for the variable. This editor allows you to select or add the variable to the blackboard plan, and provides a warning icon if the variable does not exist in the blackboard plan. +<108> 🛈 Note: The variable doesn’t need to exist when you set it in code. +<109> Editing the Blackboard Plan +<110> The Blackboard Plan, associated with each BehaviorTree resource, dictates how the Blackboard initializes for each new instance of the BehaviorTree. BlackboardPlan resource stores default values, type information, and data bindings necessary for BehaviorTree initialization. +<111> To add, modify, or remove variables from the Blackboard Plan, follow these steps: +<112> Open the LimboAI editor and load the behavior tree you want to edit. +<113> In the editor, click on the small button located inside the tab. This will open the BlackboardPlan in the Inspector. +<114> In the Inspector, click the “Manage…” button to show the blackboard plan editor. +<115> In the blackboard plan editor, you can add, remove, or reorder variables, and modify their data type and hint. +<116> The hint provides additional information about the variable to the Inspector, such as minimum and maximum values for an integer variable. Learn more about property hints in the official Godot documentation. +<117> You can specify the default values of the variables directly in the Inspector. +<118> Overriding variables in BTPlayer +<119> Each BTPlayer node also has a “Blackboard Plan” property, providing the ability to override values of the BehaviorTree’s blackboard variables. These overrides are specific to the BTPlayer’s scene and do not impact other scenes using the same BehaviorTree. To modify these values: +<120> Select the BTPlayer node in the scene tree. +<121> In the Inspector, locate the “Blackboard Plan” property. +<122> Override the desired values to tailor the blackboard variables for the specific scene. +<123> Task parameters +<124> In some cases, it can be beneficial to allow behavior tree tasks to export parameters that can either be bound to a blackboard variable or specified directly by the user. For this purpose, LimboAI provides special parameter types that begin with “BB”, such as BBInt, BBBool, BBString, BBFloat, BBNode, and more. For a complete list, please refer to the BBParam class reference. +<125> Usage example: +<126> Connecting variables in BTs to HSMs: Variable mapping +<127> Each BTState creates a new blackboard scope for its BehaviorTree instance. Because BehaviorTrees are reusable resources that can run in different contexts or on different agents, they do not automatically see variables defined in the HSM. At runtime, HSM variables are usually accessible inside the BT via the parent scope blackboard, but the recommended way to access them is through mapping. +<128> Note +<129> To learn more about scopes, see Blackboard. +<130> When both the BehaviorTree and the HSM declare variables in their respective BlackboardPlan resources, the editor provides a Mapping section in the BlackboardPlan inspector. Mapping is the intended and recommended way to connect variables between related plans. +<131> Key points about mapping +<132> Mapping connects two variables so they behave as a single logical variable at runtime. +<133> Linked variables are updated immediately in both scopes — they literally share the same state in memory (no polling or copying). +<134> Mapping is explicit: you decide which variables the BT exposes as inputs and outputs. +<135> Linkage is bidirectional — there is no distinction between input and output. +<136> Mapping does not create new variables automatically — the variables must already exist in both blackboard plans before they can be linked. +<137> Inspector workflow +<138> Define the required variables in each BlackboardPlan (HSM plan and BT plan, for example). +<139> Select the BTState node in the scene or a BTSubtree inside a behavior tree. +<140> In the Inspector, select the Blackboard Plan property. +<141> In the BlackboardPlan resource inspector, locate the Mapping section. +<142> Create mappings by pairing variables (<1/>). +<143> On startup the mappings are applied, and the variables are automatically linked for the running instance. +<144> Programmatic alternative: linking variables in code +<145> You can also link variables directly in code using Blackboard.link_var: +<146> Best practices +<147> Declare all BT dependencies in the BT’s BlackboardPlan instead of relying on parent scopes. +<148> Use Mapping to explicitly declare which variables should be shared with the HSM. +<149> Prefer the inspector-based Mapping workflow for clarity and editor support; use <1/> only when runtime or programmatic setup is required. +<150> Avoid writing to <1/> from inside BT tasks unless you have a very specific reason and accept the coupling it introduces. +<151> Advanced topic: Blackboard scopes +<152> The Blackboard in LimboAI can act as a parent scope for another Blackboard. This means that if a specific variable is not found in the active scope, the system will look in the parent Blackboard to find it. This creates a “blackboard scope chain,” where each Blackboard can have its own parent scope, and there is no limit to how many blackboards can be in this chain. It’s important to note that the Blackboard doesn’t modify values in the parent scopes. +<153> Scopes are created automatically to prevent naming collisions between contextually separate environments: +<154> Within BTNewScope. +<155> Under BTSubtree decorators. +<156> With LimboState that have a non-empty blackboard plan defined. +<157> Under LimboHSM nodes: A new scope is created at the root level, and each BTState child also receives its own separate scope. +<158> Sharing data between several agents +<159> The blackboard scope mechanism can also be used for sharing data between several agents. In the following example, we have a group of agents, and we want to share a common target between them: +<160> In this example, blackboard.top() accesses the root scope of the Blackboard chain. We assign that scope to each agent in a group through code: +<161> In conclusion, the Blackboard scope chain not only prevents naming conflicts that can occur between state machines, behavior trees, and sub-trees, but it can also be used to share data between several agents. +<162> Debugging blackboard variables +<163> When debugging a running project, you can inspect Blackboard variables in the remote Inspector. Click on a task in the LimboAI debugger to view its properties, then click the Blackboard reference to see all variables across the full scope chain, grouped by scope. Variables can be edited live to aid in debugging. For state machines, select a LimboState node in the Remote Scene Tree to access its Blackboard in the same way. +<164> Accessing nodes in the scene tree +<165> There are several ways to access nodes in the agent’s scene tree from a BTTask. +<166> 🛈 Note: The root node of the agent’s scene tree can be accessed with the scene_root property. +<167> With <1/> property +<168> With <1/> property +<169> Using blackboard plan +<170> You can create a blackboard variable in the editor with the type <2/> and point it to the proper node in the BTPlayer blackboard plan. By default, any <4/> variable will be replaced with the node instance when the blackboard is instantiated at runtime (see BlackboardPlan.prefetch_nodepath_vars). +<171> The property BTPlayer.prefetch_nodepath_vars should be set to <1/>. +<172> Create State Machines +<173> This guide will show how to set up and use a state machine using LimboHSM. +<174> Initialization +<175> To use the LimboHSM state machine, you first need to initialize it in your code. This is typically done in the <2/> function of your script. Here’s an example of how to do this: +<176> In this example, we first declare the state machine and the states we want to use. Then, in the <1/> function, we add transitions between the states. Finally, we initialize the state machine and set it to active. +<177> State example +<178> You can define the behavior of a state in a script and attach it to the state node. Here’s an example of a state that plays an animation on an <1/> and waits for it to finish: +<179> In this example, the <1/> method is called when the state is entered, and it plays the specified animation. The <2/> method is called every frame, and it checks if the animation is finished. If it is, it dispatches the <3/> event, which can result in a transition to the next state. \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch03.txt b/docs/limboai-stable/_i18n/batches/batch03.txt new file mode 100644 index 0000000..5377f55 --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch03.txt @@ -0,0 +1,142 @@ +<180> Events and transitions +<181> The LimboHSM comes with an event system that helps to decouple transitions from the state implementations. A transition is associated with a specific event, a starting state, and a destination state, and it is performed automatically when such an event is dispatched. +<182> To register a transition and associate it with a specific event, you can use the LimboHSM.add_transition method: +<183> In this example, we’re registering a transition from the <1/> to the <2/> when the <3/> event is dispatched. +<184> A transition can be also associated with no particular starting state: +<185> Events are dispatched with the LimboState.dispatch method. It’s important to note that this method can be called from anywhere in the state machine hierarchy and outside of it. Events are propagated from the leaf to the root state. This means that if an event is consumed by a state, it won’t be propagated to its parent states. +<186> States can also define event handlers, which are methods that react to specific events. These event handlers typically don’t result in a state transition; they are simply a mechanism for states to react to particular events. You can use the LimboState.add_event_handler method to register event handlers in your states: +<187> If the event handler returns <1/>, the event will be considered as consumed, and it won’t propagate further or result in a state transition. +<188> State anatomy +<189> Using behavior trees with state machines +<190> The BTState is a specialized state node in LimboHSM that can host a behavior tree. When a BTState is active, it executes the hosted behavior tree each frame, effectively using the behavior tree as its implementation. +<191> This allows you to combine the power of behavior trees with the structure and control of state machines. Behavior trees are excellent for defining complex, hierarchical behaviors, while state machines are great for managing the flow and transitions between different behaviors. +<192> Once the LimboHSM has been created, a BTState can be created for a given LimboHSM: +<193> Single-file state machine setup +<194> In certain scenarios, such as prototyping or during game jams, it’s practical to keep the state machine code in a single file. For such cases, LimboHSM supports delegation and provides chained methods for easier setup. Let’s illustrate this with a practical code example: +<195> Important classes +<196> There are a lot of classes introduced in LimboAI. Here is a list of the most important ones you should know about: +<197> BTTask +<198> Inherits: BT +<199> Inherited By: BTAction, BTComment, BTComposite, BTCondition, BTDecorator +<200> Base class for all BehaviorTree tasks. +<201> Description +<202> Base class for all BehaviorTree tasks. A task is a basic building block in a BehaviorTree that represents a specific behavior or control flow. Tasks are used to create complex behaviors by combining and nesting them in a hierarchy. +<203> A task can be one of the following types: action, condition, composite, or decorator. Each type of task has its own corresponding subclass: BTAction, BTCondition, BTDecorator, BTComposite. +<204> Tasks perform their work and return their status using the _tick method. Status values are defined in Status. Tasks can be initialized using the _setup method. See also _enter & _exit. +<205> Note: Do not extend BTTask directly for your own tasks. Instead, extend one of the subtypes mentioned above. +<206> Properties +<207> agent +<208> Blackboard +<209> blackboard +<210> custom_name +<211> elapsed_time +<212> scene_root +<213> Status +<214> status +<215> Methods +<216> _enter() <2/> +<217> _exit() <2/> +<218> _generate_name() <2/> <3/> +<219> _get_configuration_warnings() <2/> <3/> +<220> _setup() <2/> +<221> _tick(delta: <2/>) <3/> +<222> abort() +<223> add_child(task: BTTask) +<224> add_child_at_index(task: BTTask, idx: <3/>) +<225> BTTask +<226> clone() <2/> +<227> BehaviorTree +<228> editor_get_behavior_tree() +<229> execute(delta: <2/>) +<230> get_child(idx: <2/>) <3/> +<231> get_child_count() <2/> +<232> get_child_count_excluding_comments() <2/> +<233> get_index() <2/> +<234> get_parent() <2/> +<235> get_root() <2/> +<236> get_task_name() +<237> has_child(task: BTTask) <3/> +<238> initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>) +<239> is_descendant_of(task: BTTask) <3/> +<240> is_root() <2/> +<241> next_sibling() <2/> +<242> print_tree(initial_tabs: <2/> = 0) +<243> remove_child(task: BTTask) +<244> remove_child_at_index(idx: <2/>) +<245> Property Descriptions +<246> <1/> agent 🔗 +<247> <1/> set_agent(value: <2/>) +<248> <1/> get_agent() +<249> The agent is the contextual object for the BehaviorTree instance. This is usually the parent of the BTPlayer node that utilizes the BehaviorTree resource. +<250> Blackboard blackboard 🔗 +<251> Blackboard get_blackboard() +<252> Provides access to the Blackboard. Blackboard is used to share data among tasks of the associated BehaviorTree. +<253> See Blackboard for additional info. +<254> <1/> custom_name = <2/> 🔗 +<255> <1/> set_custom_name(value: <2/>) +<256> <1/> get_custom_name() +<257> User-provided name for the task. If not empty, it is used by the editor to represent the task. See get_task_name. +<258> <1/> elapsed_time 🔗 +<259> <1/> get_elapsed_time() +<260> Elapsed time since the task was “entered”. See _enter. +<261> Returns <1/> when task is not <2/>. +<262> <1/> scene_root 🔗 +<263> <1/> get_scene_root() +<264> Root node of the scene the behavior tree is used in (e.g., the owner of the BTPlayer node). Can be uses to retrieve <2/> references. +<265> Example: +<266> Status status 🔗 +<267> Status get_status() +<268> Last execution Status returned by _tick. +<269> Method Descriptions +<270> <1/> _enter() <2/> 🔗 +<271> Called when task is “entered”, i.e. when task is executed while not having a <1/> status. +<272> It is called before _tick in the execution order. This method is used when preparation is needed before main work begins, usually when it takes more than one tick to finish the task. See also execute. +<273> <1/> _exit() <2/> 🔗 +<274> Called when task is “exited”, i.e. after _tick returns <2/> or <3/> status. See also execute. +<275> <1/> _generate_name() <2/> <3/> 🔗 +<276> Called to generate a display name for the task unless custom_name is set. See get_task_name. +<277> <1/> _get_configuration_warnings() <2/> <3/> 🔗 +<278> The string returned by this method is shown as a warning message in the behavior tree editor. Any task script that overrides this method must include <1/> annotation at the top of the file. +<279> <1/> _setup() <2/> 🔗 +<280> Called to initialize a task during initialization step. It is called only once before the task’s first execution tick. This method allows you to set up any necessary state or configurations for the task before it begins executing. +<281> Status _tick(delta: <2/>) <3/> 🔗 +<282> Called when task is “ticked”, i.e. executed by BTPlayer or BTState during an update. +<283> Returns execution status as defined in Status. +<284> Note: Tasks perform their main function by implementing this method. +<285> <1/> abort() 🔗 +<286> Resets the task and its children recursively. If a task is in the <1/> state, it is exited and its status is reset to <2/>. +<287> <1/> add_child(task: BTTask) 🔗 +<288> Adds a child task. The <1/> is placed at the end of the children list. +<289> <1/> add_child_at_index(task: BTTask, idx: <3/>) 🔗 +<290> Adds a child task. The <1/> is placed at <2/> position in the children list. +<291> BTTask clone() <2/> 🔗 +<292> Duplicates the task and its children, copying the exported members. Sub-resources are shared for efficiency, except for BBParam subtypes, which are always copied. Used by the editor to instantiate BehaviorTree and copy-paste tasks. +<293> BehaviorTree editor_get_behavior_tree() 🔗 +<294> Returns the behavior tree that owns this task. This is only available in the editor. +<295> Status execute(delta: <2/>) 🔗 +<296> Performs task’s execution. The execution follows a specific sequence: +<297> If task’s current status is not <2/>, the _enter method is called first. +<298> Next, the _tick method is called next to perform the task’s work. +<299> If the _tick method returns <2/> or <3/> status, the _exit method will be called next as part of the execution cleanup. +<300> BTTask get_child(idx: <2/>) <3/> 🔗 +<301> Returns a child task by specifying its index. +<302> <1/> get_child_count() <2/> 🔗 +<303> Returns the number of child tasks. +<304> <1/> get_child_count_excluding_comments() <2/> 🔗 +<305> Returns the number of child tasks not counting BTComment tasks. +<306> <1/> get_index() <2/> 🔗 +<307> Returns the task’s position in the behavior tree branch. Returns <1/> if the task doesn’t belong to a task tree, i.e. doesn’t have a parent. +<308> BTTask get_parent() <2/> 🔗 +<309> Returns the task’s parent. +<310> BTTask get_root() <2/> 🔗 +<311> Returns the root task of the behavior tree. +<312> <1/> get_task_name() 🔗 +<313> The string returned by this method is used to represent the task in the editor. +<314> Method _generate_name is called to generate a display name for the task unless custom_name is set. +<315> <1/> has_child(task: BTTask) <3/> 🔗 +<316> Returns <1/> if <2/> is a child of this task. +<317> <1/> initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>) 🔗 +<318> Initilizes the task. Assigns agent and blackboard, and calls _setup for the task and its children. +<319> The method is called recursively for each child task. <1/> should be the root node of the scene the behavior tree is used in (e.g., the owner of the node that contains the behavior tree). +<320> <1/> is_descendant_of(task: BTTask) <3/> 🔗 +<321> Returns <1/> if this task is a descendant of <2/>. In other words, this task must be a child of <3/> or one of its children or grandchildren. \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch04.txt b/docs/limboai-stable/_i18n/batches/batch04.txt new file mode 100644 index 0000000..727843c --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch04.txt @@ -0,0 +1,138 @@ +<322> <1/> is_root() <2/> 🔗 +<323> Returns <1/> if this task is the root task of its behavior tree. A behavior tree can have only one root task. +<324> BTTask next_sibling() <2/> 🔗 +<325> Returns the next task after this task in the parent’s children list. +<326> Returns <1/> if this task has no parent or it is the last child in the parent’s children list. +<327> <1/> print_tree(initial_tabs: <2/> = 0) 🔗 +<328> Prints the subtree that starts with this task to the console. +<329> <1/> remove_child(task: BTTask) 🔗 +<330> Removes <1/> from children. +<331> <1/> remove_child_at_index(idx: <2/>) 🔗 +<332> Removes a child task at a specified index from children. +<333> BTPlayer +<334> Inherits: +<335> Player of BehaviorTree resources. +<336> BTPlayer node is used to instantiate and play BehaviorTree resources at runtime. During initialization, the behavior tree instance is given references to the agent, the blackboard, and the current scene root. The agent can be specified by the agent_node property (defaults to the BTPlayer’s parent node). +<337> For an introduction to behavior trees, see BehaviorTree. +<338> active +<339> agent_node +<340> behavior_tree +<341> blackboard +<342> BlackboardPlan +<343> blackboard_plan +<344> monitor_performance +<345> UpdateMode +<346> update_mode +<347> BTInstance +<348> get_bt_instance() +<349> restart() +<350> set_bt_instance(bt_instance: BTInstance) +<351> set_scene_root_hint(scene_root: <2/>) +<352> update(delta: <2/>) +<353> Signals +<354> behavior_tree_finished(status: <1/>) 🔗 +<355> Deprecated: Use updated signal instead. +<356> Emitted when the behavior tree has finished executing and returned <1/> or <2/>. +<357> Argument <1/> holds the status returned by the behavior tree. See Status. +<358> updated(status: <1/>) 🔗 +<359> Emitted when BTPlayer has finished the behavior tree update. +<360> Enumerations +<361> enum UpdateMode: 🔗 +<362> UpdateMode IDLE = <2/> +<363> Execute behavior tree during the idle process. +<364> UpdateMode PHYSICS = <2/> +<365> Execute behavior tree during the physics process. +<366> UpdateMode MANUAL = <2/> +<367> Behavior tree is executed manually by calling update. +<368> <1/> active = <2/> 🔗 +<369> <1/> set_active(value: <2/>) +<370> <1/> get_active() +<371> If <1/>, the behavior tree will be executed during update. +<372> <1/> agent_node = <2/> 🔗 +<373> <1/> set_agent_node(value: <2/>) +<374> <1/> get_agent_node() +<375> Path to the node that will be used as the agent. Setting it after instantiation will have no effect. +<376> BehaviorTree behavior_tree 🔗 +<377> <1/> set_behavior_tree(value: BehaviorTree) +<378> BehaviorTree get_behavior_tree() +<379> BehaviorTree resource to instantiate and execute at runtime. +<380> Blackboard blackboard 🔗 +<381> <1/> set_blackboard(value: Blackboard) +<382> Holds data shared by the behavior tree tasks. See Blackboard. +<383> BlackboardPlan blackboard_plan 🔗 +<384> <1/> set_blackboard_plan(value: BlackboardPlan) +<385> BlackboardPlan get_blackboard_plan() +<386> Stores and manages variables that will be used in constructing new Blackboard instances. +<387> <1/> monitor_performance = <2/> 🔗 +<388> <1/> set_monitor_performance(value: <2/>) +<389> <1/> get_monitor_performance() +<390> If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTPlayer node. +<391> UpdateMode update_mode = <2/> 🔗 +<392> <1/> set_update_mode(value: UpdateMode) +<393> UpdateMode get_update_mode() +<394> Determines when the behavior tree is executed. See UpdateMode. +<395> BTInstance get_bt_instance() 🔗 +<396> Returns the behavior tree instance. +<397> <1/> restart() 🔗 +<398> Resets the behavior tree’s execution. Each running task will be aborted and the next tree execution will start anew. This method does not reset Blackboard. +<399> <1/> set_bt_instance(bt_instance: BTInstance) 🔗 +<400> Sets the BTInstance to play. This method is useful when you want to switch to a different behavior tree instance at runtime. See also BehaviorTree.instantiate. +<401> <1/> set_scene_root_hint(scene_root: <2/>) 🔗 +<402> Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the BTPlayer is added to the scene tree (before <2/>). This is typically useful when creating BTPlayer nodes dynamically from code. +<403> <1/> update(delta: <2/>) 🔗 +<404> Executes the root task of the behavior tree instance if active is <2/>. Call this method when update_mode is set to MANUAL. When update_mode is not MANUAL, the update will be called automatically. See UpdateMode. +<405> Blackboard +<406> A key/value storage for sharing among LimboHSM states and BehaviorTree tasks. +<407> Blackboard is where data is stored and shared between states in the LimboHSM system and tasks in a BehaviorTree. Each state and task in the BehaviorTree can access this Blackboard, allowing them to read and write data. This makes it easy to share information between different actions and behaviors. +<408> Blackboard can also act as a parent scope for another Blackboard. If a specific variable is not found in the active scope, it looks in the parent Blackboard to find it. A parent Blackboard can itself have its own parent scope, forming what we call a “blackboard scope chain.” Importantly, there is no limit to how many Blackboards can be in this chain, and the Blackboard doesn’t modify values in the parent scopes. +<409> New scopes can be created using the BTNewScope and BTSubtree decorators. Additionally, a new scope is automatically created for any LimboState that has defined non-empty Blackboard data or for any root-level LimboHSM node. +<410> bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false) +<411> clear() +<412> erase_var(var_name: <2/>) +<413> Blackboard +<414> get_parent() <2/> +<415> get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/> +<416> get_vars_as_dict() <2/> +<417> has_var(var_name: <2/>) <3/> +<418> link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false) +<419> Array[<1/>] +<420> list_vars() <2/> +<421> populate_from_dict(dictionary: <2/>) +<422> print_state() <2/> +<423> set_parent(blackboard: Blackboard) +<424> set_var(var_name: <2/>, value: <3/>) +<425> top() <2/> +<426> unbind_var(var_name: <2/>) +<427> <1/> bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false) 🔗 +<428> Establish a binding between a variable and the object’s property specified by <1/> and <2/>. Changes to the variable update the property, and vice versa. If <3/> is <4/>, the variable will be created if it doesn’t exist. +<429> <1/> clear() 🔗 +<430> Removes all variables from the Blackboard. Parent scopes are not affected. +<431> <1/> erase_var(var_name: <2/>) 🔗 +<432> Removes a variable by its name. +<433> Blackboard get_parent() <2/> 🔗 +<434> Returns a Blackboard that serves as the parent scope for this instance. +<435> <1/> get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/> 🔗 +<436> Returns variable value or <1/> if variable doesn’t exist. If <2/> is <3/>, an error will be printed if variable doesn’t exist. If the variable doesn’t exist in the current Blackboard scope, it will look in the parent scope Blackboard to find it. +<437> <1/> get_vars_as_dict() <2/> 🔗 +<438> Returns all variables in the Blackboard as a dictionary. Keys are the variable names, values are the variable values. Parent scopes are not included. +<439> <1/> has_var(var_name: <2/>) <3/> 🔗 +<440> Returns <1/> if the Blackboard contains the <2/> variable, including the parent scopes. +<441> <1/> link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false) 🔗 +<442> Links a variable to another Blackboard variable. If a variable is linked to another variable, their state will always be identical, and any change to one will be reflected in the other. If <1/> is <2/>, the variable will be created if it doesn’t exist. +<443> You can use this method to link a variable in the current scope to a variable in another scope, or in another Blackboard instance. A variable can only be linked to one other variable. Calling this method again will overwrite the previous link. However, it is possible to link to the same variable from multiple different variables. +<444> Array[<1/>] list_vars() <2/> 🔗 +<445> Returns all variable names in the Blackboard. Parent scopes are not included. +<446> <1/> populate_from_dict(dictionary: <2/>) 🔗 +<447> Fills the Blackboard with multiple variables from a dictionary. The dictionary keys must be variable names and the dictionary values must be variable values. Keys must be StringName or String. +<448> <1/> print_state() <2/> 🔗 +<449> Prints the values of all variables in each scope. +<450> <1/> set_parent(blackboard: Blackboard) 🔗 +<451> Assigns the parent scope. If a value isn’t in the current Blackboard scope, it will look in the parent scope Blackboard to find it. +<452> <1/> set_var(var_name: <2/>, value: <3/>) 🔗 +<453> Assigns a value to a variable in the current Blackboard scope. If the variable doesn’t exist, it will be created. If the variable already exists in the parent scope, the parent scope value will NOT be changed. +<454> Blackboard top() <2/> 🔗 +<455> Returns the topmost Blackboard in the scope chain. +<456> <1/> unbind_var(var_name: <2/>) 🔗 +<457> Remove binding from a variable. +<458> BBParam +<459> Inherited By: BBAabb, BBArray, BBBasis, BBBool, BBByteArray, BBColor, BBColorArray, BBDictionary, BBFloat, BBFloat32Array, BBFloat64Array, BBInt, BBInt32Array, BBInt64Array, BBNode, BBPlane, BBProjection, BBQuaternion, BBRect2, BBRect2i, BBString, BBStringArray, BBStringName, BBTransform2D, BBTransform3D, BBVariant, BBVector2, BBVector2Array, BBVector2i, BBVector3, BBVector3Array, BBVector3i, BBVector4, BBVector4i \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch05.txt b/docs/limboai-stable/_i18n/batches/batch05.txt new file mode 100644 index 0000000..457116c --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch05.txt @@ -0,0 +1,163 @@ +<460> A base class for LimboAI typed parameters. +<461> A base class for LimboAI typed parameters, with the ability to reference a Blackboard variable or hold a raw value of a specific Variant.Type. +<462> Note: Don’t instantiate. Use specific subtypes instead. +<463> saved_value +<464> ValueSource +<465> value_source +<466> variable +<467> Variant.Type +<468> get_type() <2/> +<469> get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null) +<470> enum ValueSource: 🔗 +<471> ValueSource SAVED_VALUE = <2/> +<472> The value is stored directly within the BBParam resource. +<473> ValueSource BLACKBOARD_VAR = <2/> +<474> The value is referenced by a variable name and retrieved from the Blackboard. The variable name is stored within the BBParam resource. +<475> <1/> saved_value = <2/> 🔗 +<476> <1/> set_saved_value(value: <2/>) +<477> <1/> get_saved_value() +<478> Stores the parameter value when value_source is set to SAVED_VALUE. The data type of the value is determined by get_type. +<479> ValueSource value_source = <2/> 🔗 +<480> <1/> set_value_source(value: ValueSource) +<481> ValueSource get_value_source() +<482> Specifies the source of the value for BBParam. See ValueSource. +<483> <1/> variable 🔗 +<484> <1/> set_variable(value: <2/>) +<485> <1/> get_variable() +<486> Stores the name of a Blackboard variable when value_source is set to BLACKBOARD_VAR. +<487> Variant.Type get_type() <1/> 🔗 +<488> Returns the expected data type of the parameter. +<489> <1/> get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null) 🔗 +<490> Returns the value of the parameter. +<491> LimboState +<492> Inherited By: BTState, LimboHSM +<493> A state node for Hierarchical State Machines (HSM). +<494> A LimboAI state node for Hierarchical State Machines (HSM). +<495> You can create your state behavior by extending this class. To implement your state logic, you can override _enter, _exit, _setup, and _update. Alternatively, you can delegate state implementation to external methods using the <5/> methods. +<496> For additional details on state machines, refer to LimboHSM. +<497> EVENT_FINISHED +<498> agent +<499> blackboard +<500> blackboard_plan +<501> _enter() <2/> +<502> _exit() <2/> +<503> _setup() <2/> +<504> _update(delta: <2/>) <3/> +<505> add_event_handler(event: <2/>, handler: <3/>) +<506> LimboState +<507> call_on_enter(callable: <2/>) +<508> call_on_exit(callable: <2/>) +<509> call_on_update(callable: <2/>) +<510> clear_guard() +<511> dispatch(event: <2/>, cargo: <3/> = null) +<512> get_root() <2/> +<513> is_active() <2/> +<514> named(name: <2/>) +<515> set_guard(guard_callable: <2/>) +<516> entered() 🔗 +<517> Emitted when the state is entered. +<518> exited() 🔗 +<519> Emitted when the state is exited. +<520> setup() 🔗 +<521> Emitted when the state is initialized. +<522> updated(delta: <1/>) 🔗 +<523> Emitted when the state is updated. +<524> <1/> EVENT_FINISHED 🔗 +<525> <1/> event_finished() +<526> A commonly used event that indicates that the state has finished its work. +<527> <1/> agent 🔗 +<528> An agent associated with the state, assigned during initialization. +<529> Blackboard blackboard 🔗 +<530> A key/value data store shared by states within the state machine to which this state belongs. +<531> BlackboardPlan blackboard_plan 🔗 +<532> <1/> _enter() <2/> 🔗 +<533> Called when the state is entered. +<534> <1/> _exit() <2/> 🔗 +<535> Called when the state is exited. This happens on a transition to another state, and when the state machine is removed from the scene tree (e.g., when the node is freed with Node.queue_free or the scene changes). Due to implementation details, _exit will not be called on Object.free! +<536> <1/> _setup() <2/> 🔗 +<537> Called once during initialization. Use this method to initialize your state. +<538> <1/> _update(delta: <2/>) <3/> 🔗 +<539> Called during the update. Implement your state’s behavior with this method. +<540> <1/> add_event_handler(event: <2/>, handler: <3/>) 🔗 +<541> Registers a <1/> to be called when <2/> is dispatched. The handler function should have the following signature: +<542> If the handler returns <1/>, the event will be consumed. Cargo is an optional parameter that can be passed to the handler. See also dispatch. +<543> LimboState call_on_enter(callable: <2/>) 🔗 +<544> A chained method that connects the entered signal to a <2/>. +<545> LimboState call_on_exit(callable: <2/>) 🔗 +<546> A chained method that connects the exited signal to a <2/>. +<547> LimboState call_on_update(callable: <2/>) 🔗 +<548> A chained method that connects the updated signal to a <2/>. +<549> <1/> clear_guard() 🔗 +<550> Clears the guard function, removing the <1/> previously set by set_guard. +<551> <1/> dispatch(event: <2/>, cargo: <3/> = null) 🔗 +<552> Recursively dispatches a state machine event named <1/> with an optional argument <2/>. Returns <3/> if the event was consumed. +<553> Events propagate from the leaf state to the root state, and propagation stops as soon as any state consumes the event. States will consume the event if they have a related transition or event handler. For more information on event handlers, see add_event_handler. +<554> LimboState get_root() <2/> 🔗 +<555> Returns the root LimboState. +<556> <1/> is_active() <2/> 🔗 +<557> Returns <1/> if it is currently active, meaning it is the active substate of the parent LimboHSM. +<558> LimboState named(name: <2/>) 🔗 +<559> A chained method for setting the name of this state. +<560> <1/> set_guard(guard_callable: <2/>) 🔗 +<561> Sets the guard function, which is a function called each time a transition to this state is considered. If the function returns <1/>, the transition will be disallowed. +<562> LimboHSM +<563> Inherits: LimboState +<564> Event-based Hierarchical State Machine (HSM). +<565> Event-based Hierarchical State Machine (HSM) that manages LimboState instances and facilitates transitions between them. LimboHSM is a LimboState in itself and can also serve as a child of another LimboHSM node. +<566> LimboState +<567> ANYSTATE +<568> initial_state +<569> UpdateMode +<570> update_mode +<571> add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable()) +<572> change_active_state(state: LimboState) +<573> get_active_state() <2/> +<574> get_leaf_state() <2/> +<575> get_previous_active_state() <2/> +<576> has_transition(from_state: LimboState, event: <3/>) <4/> +<577> initialize(agent: <2/>, parent_scope: Blackboard = null) +<578> remove_transition(from_state: LimboState, event: <3/>) +<579> set_active(active: <2/>) +<580> update(delta: <2/>) +<581> active_state_changed(current: LimboState, previous: LimboState) 🔗 +<582> Emitted when the currently active substate is switched to a different substate. +<583> enum UpdateMode: 🔗 +<584> UpdateMode IDLE = <2/> +<585> Update the state machine during the idle process. +<586> UpdateMode PHYSICS = <2/> +<587> Update the state machine during the physics process. +<588> UpdateMode MANUAL = <2/> +<589> Manually update the state machine by calling update from a script. +<590> LimboState ANYSTATE 🔗 +<591> LimboState anystate() +<592> Useful for defining a transition from any state. +<593> LimboState initial_state 🔗 +<594> <1/> set_initial_state(value: LimboState) +<595> LimboState get_initial_state() +<596> The substate that becomes active when the state machine is activated using the set_active method. If not explicitly set, the first child of the LimboHSM will be considered the initial state. +<597> UpdateMode update_mode = <2/> 🔗 +<598> <1/> set_update_mode(value: UpdateMode) +<599> UpdateMode get_update_mode() +<600> Specifies when the state machine should be updated. See UpdateMode. +<601> <1/> add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable()) 🔗 +<602> Establishes a transition from one state to another when <1/> is dispatched. Both <2/> and <3/> must be immediate children of this LimboHSM. +<603> Optionally, a <1/> function can be specified, which must return a boolean value. If the guard function returns <2/>, the transition will not occur. The guard function is called immediately before the transition is considered. For a state-wide guard function, check out LimboState.set_guard. +<604> <1/> change_active_state(state: LimboState) 🔗 +<605> Changes the currently active substate to <1/>. If <2/> is already active, it will be exited and reentered. +<606> <1/> must be a child of this LimboHSM. +<607> LimboState get_active_state() <2/> 🔗 +<608> Returns the currently active substate. +<609> LimboState get_leaf_state() <2/> 🔗 +<610> Returns the currently active leaf state within the state machine. +<611> LimboState get_previous_active_state() <2/> 🔗 +<612> Returns the previously active substate. +<613> <1/> has_transition(from_state: LimboState, event: <3/>) <4/> 🔗 +<614> Returns <1/> if there is a transition from <2/> for a given <3/>. +<615> <1/> initialize(agent: <2/>, parent_scope: Blackboard = null) 🔗 +<616> Initiates the state and calls LimboState._setup for both itself and all substates. +<617> <1/> remove_transition(from_state: LimboState, event: <3/>) 🔗 +<618> Removes a transition from a state associated with specific <1/>. +<619> <1/> set_active(active: <2/>) 🔗 +<620> When set to <1/>, switches the state to initial_state and activates state processing according to update_mode. +<621> <1/> update(delta: <2/>) 🔗 +<622> Calls LimboState._update on itself and the active substate, with the call cascading down to the leaf state. This method is automatically triggered if update_mode is not set to MANUAL. \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch06.txt b/docs/limboai-stable/_i18n/batches/batch06.txt new file mode 100644 index 0000000..8bdeb6b --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch06.txt @@ -0,0 +1,156 @@ +<623> BTState +<624> A state node for LimboHSM that hosts a BehaviorTree. +<625> BTState is a LimboState node that manages a BehaviorTree to provide behavior logic for the state. It instantiates and runs the BehaviorTree resource, dispatching a state machine event upon <4/> or <5/>. Event names are customizable through success_event and failure_event. For further details on state machine events, see LimboState.dispatch. +<626> behavior_tree +<627> failure_event +<628> monitor_performance +<629> success_event +<630> get_bt_instance() <2/> +<631> set_scene_root_hint(scene_root: <2/>) +<632> BehaviorTree behavior_tree 🔗 +<633> A BehaviorTree resource that defines state behavior. +<634> <1/> failure_event = <2/> 🔗 +<635> <1/> set_failure_event(value: <2/>) +<636> <1/> get_failure_event() +<637> HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch. +<638> <1/> monitor_performance = <2/> 🔗 +<639> If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTState node. +<640> <1/> success_event = <2/> 🔗 +<641> <1/> set_success_event(value: <2/>) +<642> <1/> get_success_event() +<643> HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch. +<644> BTInstance get_bt_instance() <2/> 🔗 +<645> <1/> set_scene_root_hint(scene_root: <2/>) 🔗 +<646> Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the state machine is initialized. This is typically useful when creating BTState nodes dynamically from code. +<647> Full class reference is available in the side bar. +<648> BBAabb +<649> Inherits: BBParam +<650> AABB-type parameter for BehaviorTree tasks. See BBParam. +<651> BBArray +<652> Array-type parameter for BehaviorTree tasks. See BBParam. +<653> BBBasis +<654> Basis-type parameter for BehaviorTree tasks. See BBParam. +<655> BBBool +<656> Bool-type parameter for BehaviorTree tasks. See BBParam. +<657> BBByteArray +<658> ByteArray-type parameter for BehaviorTree tasks. See BBParam. +<659> BBColor +<660> Color-type parameter for BehaviorTree tasks. See BBParam. +<661> BBColorArray +<662> ColorArray-type parameter for BehaviorTree tasks. See BBParam. +<663> BBDictionary +<664> Dictionary-type parameter for BehaviorTree tasks. See BBParam. +<665> BBFloat +<666> Float-type parameter for BehaviorTree tasks. See BBParam. +<667> BBFloat32Array +<668> PackedFloat32Array-type parameter for BehaviorTree tasks. See BBParam. +<669> BBFloat64Array +<670> PackedFloat64Array-type parameter for BehaviorTree tasks. See BBParam. +<671> BBInt +<672> Integer-type parameter for BehaviorTree tasks. See BBParam. +<673> BBInt32Array +<674> PackedInt32Array-type parameter for BehaviorTree tasks. See BBParam. +<675> BBInt64Array +<676> PackedInt64Array-type parameter for BehaviorTree tasks. See BBParam. +<677> BBNode +<678> Node-type parameter for BehaviorTree tasks. See BBParam. +<679> Node-type parameter intended for use with BehaviorTree tasks. See BBParam. +<680> If the source is a blackboard variable, it allows any type extended from <1/>. +<681> BBPlane +<682> Plane-type parameter for BehaviorTree tasks. See BBParam. +<683> BBProjection +<684> Projection-type parameter for BehaviorTree tasks. See BBParam. +<685> BBQuaternion +<686> Quaternion-type parameter for BehaviorTree tasks. See BBParam. +<687> BBRect2 +<688> Rect2-type parameter for BehaviorTree tasks. See BBParam. +<689> BBRect2i +<690> Rect2i-type parameter for BehaviorTree tasks. See BBParam. +<691> BBString +<692> String-type parameter for BehaviorTree tasks. See BBParam. +<693> BBStringArray +<694> StringArray-type parameter for BehaviorTree tasks. See BBParam. +<695> BBStringName +<696> StringName-type parameter for BehaviorTree tasks. See BBParam. +<697> BBTransform2D +<698> Transform2D-type parameter for BehaviorTree tasks. See BBParam. +<699> BBTransform3D +<700> Transform3D-type parameter for BehaviorTree tasks. See BBParam. +<701> BBVariant +<702> Variant-type parameter for BehaviorTree tasks. See BBParam. +<703> Variant-type parameter intended for use with BehaviorTree tasks. See BBParam. +<704> The data type is specified by type. +<705> type +<706> Variant.Type type = <1/> 🔗 +<707> <1/> set_type(value: Variant.Type) +<708> Variant.Type get_type() +<709> Specified Variant.Type for the parameter value. +<710> BBVector2 +<711> Vector2-type parameter for BehaviorTree tasks. See BBParam. +<712> BBVector2Array +<713> Vector2Array-type parameter for BehaviorTree tasks. See BBParam. +<714> BBVector2i +<715> Vector2i-type parameter for BehaviorTree tasks. See BBParam. +<716> BBVector3 +<717> Vector3-type parameter for BehaviorTree tasks. See BBParam. +<718> BBVector3Array +<719> Vector3Array-type parameter for BehaviorTree tasks. See BBParam. +<720> BBVector3i +<721> Vector3i-type parameter for BehaviorTree tasks. See BBParam. +<722> BBVector4 +<723> Vector4-type parameter for BehaviorTree tasks. See BBParam. +<724> BBVector4i +<725> Vector4i-type parameter for BehaviorTree tasks. See BBParam. +<726> BehaviorTree +<727> Contains Behavior Tree data. +<728> Behavior Trees are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games. +<729> Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include BTSequence, BTSelector, and BTInvert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of Blackboard. See BTTask.blackboard and Blackboard. +<730> Note: To create your own actions, extend the BTAction class. +<731> The BehaviorTree is executed from the root task and follows the rules specified by the control tasks, all the way down to the leaf tasks, which represent the actual actions that the agent should perform or conditions that should be checked. Each task returns a status when it is executed. It can be <1/>, <2/>, or <3/>. These statuses determine how the tree progresses. They are defined in Status. +<732> Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with BTSequence and BTSelector to craft your decision-making logic. +<733> Note: To create your own conditions, extend the BTCondition class. +<734> Check out the BTTask class, which provides the foundation for various building blocks of Behavior Trees. +<735> blackboard_plan +<736> description +<737> BehaviorTree +<738> clone() <2/> +<739> copy_other(other: BehaviorTree) +<740> BTTask +<741> get_root_task() <2/> +<742> instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/> +<743> set_root_task(task: BTTask) +<744> plan_changed() 🔗 +<745> Emitted when the BlackboardPlan changes. +<746> BlackboardPlan blackboard_plan 🔗 +<747> <1/> description = <2/> 🔗 +<748> <1/> set_description(value: <2/>) +<749> <1/> get_description() +<750> User-provided description of the BehaviorTree. +<751> BehaviorTree clone() <2/> 🔗 +<752> Makes a copy of the BehaviorTree resource. +<753> <1/> copy_other(other: BehaviorTree) 🔗 +<754> Become a copy of another behavior tree. +<755> BTTask get_root_task() <2/> 🔗 +<756> Returns the root task of the BehaviorTree resource. +<757> BTInstance instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/> 🔗 +<758> Instantiates the behavior tree and returns BTInstance. <2/> should be the scene node that will own the behavior tree instance. This is typically a BTPlayer, BTState, or a custom player node that controls the behavior tree execution. Make sure to pass a Blackboard with values populated from blackboard_plan. See also BlackboardPlan.populate_blackboard & BlackboardPlan.create_blackboard. +<759> If <1/> is not <2/>, it will be used as the scene root for the newly instantiated behavior tree; otherwise, the scene root will be set to <3/>. Scene root is essential for BBNode instances to work properly. +<760> <1/> set_root_task(task: BTTask) 🔗 +<761> Assigns a new root task to the BehaviorTree resource. +<762> BehaviorTreeData +<763> Represents current state of a BehaviorTree instance. +<764> This class is used by the LimboAI debugger for the serialization and deserialization of BehaviorTree instance data. +<765> Additionally, it can be used with BehaviorTreeView to visualize the current state of a BehaviorTree instance. It is meant to be utilized in custom in-game tools. +<766> BehaviorTreeData +<767> create_from_bt_instance(bt_instance: BTInstance) <3/> +<768> BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) <3/> 🔗 +<769> Returns current state of the <1/> encoded as a BehaviorTreeData, suitable for use with BehaviorTreeView. +<770> Behavior tree instance can be acquired with BTPlayer.get_bt_instance. +<771> BehaviorTreeView +<772> Visualizes the current state of a BehaviorTree instance. +<773> Visualizes the current state of a BehaviorTree instance. See also BehaviorTreeData. +<774> update_interval_msec +<775> clear() +<776> update_tree(behavior_tree_data: BehaviorTreeData) +<777> task_selected(type_name: <1/>, script_path: <2/>) 🔗 +<778> Emitted when a task item is selected in BehaviorTreeView. \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch07.txt b/docs/limboai-stable/_i18n/batches/batch07.txt new file mode 100644 index 0000000..dcde497 --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch07.txt @@ -0,0 +1,164 @@ +<779> <1/> update_interval_msec = <2/> 🔗 +<780> <1/> set_update_interval_msec(value: <2/>) +<781> <1/> get_update_interval_msec() +<782> Minimum delay between two updates (in milliseconds). Set to higher values for a lower CPU load. +<783> <1/> clear() 🔗 +<784> Clears the tree view. +<785> <1/> update_tree(behavior_tree_data: BehaviorTreeData) 🔗 +<786> Updates the representation of a BehaviorTree instance. See also BehaviorTreeData. +<787> BlackboardPlan +<788> prefetch_nodepath_vars +<789> create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null) +<790> BlackboardPlan +<791> get_base_plan() <2/> +<792> get_parent_scope_plan_provider() <2/> +<793> is_derived() <2/> +<794> populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null) +<795> set_base_plan(blackboard_plan: BlackboardPlan) +<796> set_parent_scope_plan_provider(callable: <2/>) +<797> sync_with_base_plan() +<798> <1/> prefetch_nodepath_vars = <2/> 🔗 +<799> <1/> set_prefetch_nodepath_vars(value: <2/>) +<800> <1/> is_prefetching_nodepath_vars() +<801> Enables or disables <1/> variable prefetching. If <2/>, <3/> values will be replaced with node instances when the Blackboard is created. +<802> Blackboard create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null) 🔗 +<803> Constructs a new instance of a Blackboard using this plan. If <2/> prefetching is enabled, <3/> will be used to retrieve node instances for <4/> variables and substitute their values. +<804> BlackboardPlan get_base_plan() <2/> 🔗 +<805> Returns the base plan. See is_derived. +<806> <1/> get_parent_scope_plan_provider() <2/> 🔗 +<807> Returns the parent scope plan provider - a callable that returns a BlackboardPlan. +<808> <1/> is_derived() <2/> 🔗 +<809> Returns <1/> if this plan is derived from another, i.e., the base plan is not <2/>. A derived plan can only contain variables that are present in the base plan, and only variable values can be different. +<810> <1/> populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null) 🔗 +<811> Populates <1/> with the variables from this plan. If <2/> is <3/>, existing variables with the same names will be overwritten. If <4/> prefetching is enabled, <5/> will be used to retrieve node instances for <6/> variables and substitute their values. +<812> <1/> set_base_plan(blackboard_plan: BlackboardPlan) 🔗 +<813> Sets the base plan. If assigned, this plan will be derived from the base plan. +<814> Use with caution, as it will remove variables not present in the base plan. Only use this for custom tooling. +<815> <1/> set_parent_scope_plan_provider(callable: <2/>) 🔗 +<816> Sets the parent scope plan provider - a callable that returns a BlackboardPlan. Used to provide hints in the inspector. When set, mapping feature becomes available. +<817> <1/> sync_with_base_plan() 🔗 +<818> Synchronizes this plan with the base plan: removes variables not present in the base plan, and updates type information. Only use this for custom tooling. +<819> BT +<820> Inherited By: BTTask +<821> Base of BTTask. +<822> enum Status: 🔗 +<823> Status FRESH = <2/> +<824> Task wasn’t executed yet or it was aborted and reset. +<825> Status RUNNING = <2/> +<826> Task is being performed and hasn’t finished yet. +<827> Status FAILURE = <2/> +<828> Task has finished with failure. +<829> Status SUCCESS = <2/> +<830> Task has finished with success. +<831> BTAction +<832> Inherits: BTTask < BT +<833> Inherited By: BTAwaitAnimation, BTCallMethod, BTConsolePrint, BTEvaluateExpression, BTFail, BTPauseAnimation, BTPlayAnimation, BTRandomWait, BTSetAgentProperty, BTSetVar, BTStopAnimation, BTWait, BTWaitTicks +<834> Base class for all BehaviorTree actions. +<835> Base class for all actions within a BehaviorTree. You can create your own actions by extending the BTAction class. +<836> Represents a specific behavior or action in a BehaviorTree that an agent should execute. Actions are the lowest level of the BehaviorTree hierarchy and are responsible for performing the actual work required to achieve a goal. Actions do not have child tasks. +<837> A single action can perform a task within one or multiple ticks. If it takes more than one tick to complete the task, the action should return <1/> status. When the task is finished, the action returns either <2/> or <3/> to indicate the outcome. +<838> BTAlwaysFail +<839> Inherits: BTDecorator < BTTask < BT +<840> BT decorator that converts <1/> into <2/>. +<841> BTAlwaysSucceed +<842> BT decorator that converts <1/> into <2/>. +<843> BTAwaitAnimation +<844> Inherits: BTAction < BTTask < BT +<845> BT action that waits for an animation to finish playing. +<846> BTAwaitAnimation action waits for an animation on the specified <1/> node to finish playing and returns <2/>. +<847> Returns <1/> if the specified animation has finished playing or if the specified animation is not currently playing. +<848> Returns <1/> if the specified animation doesn’t exist or if the action fails to get the <2/> node. +<849> animation_name +<850> BBNode +<851> animation_player +<852> max_time +<853> <1/> animation_name = <2/> 🔗 +<854> <1/> set_animation_name(value: <2/>) +<855> <1/> get_animation_name() +<856> Animation’s key within the <1/> node. +<857> BBNode animation_player 🔗 +<858> <1/> set_animation_player(value: BBNode) +<859> BBNode get_animation_player() +<860> Parameter that specifies the <1/> node. +<861> <1/> max_time = <2/> 🔗 +<862> <1/> set_max_time(value: <2/>) +<863> <1/> get_max_time() +<864> The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTAwaitAnimation will stop waiting and return <1/>. +<865> BTCallMethod +<866> BT action that calls a method on a specified <1/> or <2/>. +<867> BTCallMethod action calls a method on the specified <2/> or <3/> instance and returns <4/>. +<868> Returns <1/> if the action encounters an issue during the method execution. +<869> Array[BBVariant] +<870> args +<871> args_include_delta +<872> method +<873> node +<874> result_var +<875> Array[BBVariant] args = <2/> 🔗 +<876> <1/> set_args(value: Array[BBVariant]) +<877> Array[BBVariant] get_args() +<878> The arguments to be passed when calling the method. +<879> <1/> args_include_delta = <2/> 🔗 +<880> <1/> set_include_delta(value: <2/>) +<881> <1/> is_delta_included() +<882> Include delta as a first parameter and shift the position of the rest of the arguments if any. +<883> <1/> method = <2/> 🔗 +<884> <1/> set_method(value: <2/>) +<885> <1/> get_method() +<886> The name of the method to be called. +<887> BBNode node 🔗 +<888> <1/> set_node_param(value: BBNode) +<889> BBNode get_node_param() +<890> Specifies the <1/> or <2/> instance containing the method to be called. +<891> <1/> result_var = <2/> 🔗 +<892> <1/> set_result_var(value: <2/>) +<893> <1/> get_result_var() +<894> if non-empty, assign the result of the method call to the blackboard variable specified by this property. +<895> BTCheckAgentProperty +<896> Inherits: BTCondition < BTTask < BT +<897> BT condition that checks agent’s property value. +<898> BTCheckAgentProperty examines the agent’s property value and compares it to value. +<899> Returns <1/> or <2/> based on the check_type. +<900> CheckType +<901> check_type +<902> property +<903> BBVariant +<904> value +<905> CheckType check_type = <2/> 🔗 +<906> <1/> set_check_type(value: CheckType) +<907> CheckType get_check_type() +<908> The type of check to be performed. +<909> <1/> property = <2/> 🔗 +<910> <1/> set_property(value: <2/>) +<911> <1/> get_property() +<912> Parameter that specifies the agent’s property to be compared. +<913> BBVariant value 🔗 +<914> <1/> set_value(value: BBVariant) +<915> BBVariant get_value() +<916> Parameter that specifies the value against which an agent’s property will be compared. +<917> BTCheckTrigger +<918> BT condition that checks a trigger (a boolean variable). +<919> BTCheckTrigger verifies whether the variable is set to <2/>. If it is, the task switches it to <3/> and returns <4/>. Otherwise, it returns <5/>. +<920> BTCheckTrigger can function as a “gate” within a BTSequence: when the trigger variable is set to <2/>, it permits the execution of subsequent tasks and then changes the variable to <3/>. +<921> variable +<922> <1/> variable = <2/> 🔗 +<923> A boolean variable on the blackboard used as a trigger. See also BTTask.blackboard. +<924> If variable’s value is <1/>, BTCheckTrigger will switch it to <2/> and return <3/>. +<925> If variable’s value is <1/>, BTCheckTrigger will return <2/>. +<926> BTCheckVar +<927> BT condition that checks a variable on the blackboard. +<928> BTCheckVar evaluates the variable against value and returns <3/> or <4/> based on the check_type. +<929> check_type +<930> value +<931> variable +<932> CheckType check_type = <2/> 🔗 +<933> BBVariant value 🔗 +<934> A parameter that specifies the value against which the variable will be compared. +<935> <1/> variable = <2/> 🔗 +<936> The name of the variable to check its value. +<937> BTComment +<938> BTComment adds annotations or explanatory notes to a BehaviorTree. +<939> BTComment is used to add annotations or explanatory notes to a BehaviorTree. +<940> Comments are not executed as part of the tree and are removed from runtime instances of the BehaviorTree. +<941> BTComposite +<942> Inherited By: BTDynamicSelector, BTDynamicSequence, BTParallel, BTProbabilitySelector, BTRandomSelector, BTRandomSequence, BTSelector, BTSequence \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch08.txt b/docs/limboai-stable/_i18n/batches/batch08.txt new file mode 100644 index 0000000..51cc38f --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch08.txt @@ -0,0 +1,131 @@ +<943> Base class for BT composite tasks. +<944> Base class for all BehaviorTree composite tasks. You can create your own composite tasks by extending the BTComposite class. +<945> Composite is a control task within a BehaviorTree that contains one or more child tasks. It defines the structure and flow of the BehaviorTree by specifying how child tasks are executed. Composites can be used to group related tasks into a single unit, making it easier to manage and maintain the BehaviorTree. Examples of BehaviorTree composites include BTSelector, BTSequence, and BTParallel. +<946> BTCondition +<947> Inherited By: BTCheckAgentProperty, BTCheckTrigger, BTCheckVar +<948> Base class for BT conditions. +<949> Base class for all BehaviorTree conditions. You can create your own conditions by extending the BTCondition class. +<950> Condition is a task within a BehaviorTree that checks for a specific condition before executing subsequent tasks. It is often used inside composite tasks to control the execution flow. Conditions are used to verify the state of the environment, check for the presence of an enemy, or evaluate the health status of the agent. The use of condition tasks in a BehaviorTree can improve system efficiency and prevent unnecessary actions. However, they may not be suitable for complex decision-making processes, and too many condition tasks can make the BehaviorTree difficult to read. +<951> Conditions typically don’t take multiple ticks to finish and return either <1/> or <2/> immediately. +<952> BTConsolePrint +<953> BT action task that outputs text to the console. +<954> BTConsolePrint action outputs text to the console and returns <1/>. It can include placeholders for format arguments similar to GDScript’s % operator. +<955> bb_format_parameters +<956> text +<957> <1/> bb_format_parameters = <2/> 🔗 +<958> <1/> set_bb_format_parameters(value: <2/>) +<959> <1/> get_bb_format_parameters() +<960> The values of format parameters are used as format arguments for the text that will be printed. +<961> Note: The returned array is copied and any changes to it will not update the original property value. See <1/> for more details. +<962> <1/> text = <2/> 🔗 +<963> <1/> set_text(value: <2/>) +<964> <1/> get_text() +<965> The text to be printed, which can include multiple placeholders to be substituted with format arguments. These placeholders follow the same format as GDScript’s % operator and typically start with ‘%’ followed by a format specifier. For instance: %s for string, %d for integer, %f for real. +<966> BTCooldown +<967> BT decorator that executes its child task only if duration time has passed since the previous execution. +<968> BTCooldown runs its child task only if duration time has passed since the last successful child task execution. It will only consider successful executions unless trigger_on_failure is set to <3/>. +<969> Returns <1/>, if the child task results in <2/>. +<970> Returns <1/>, if the child task results in <2/>, and triggers the cooldown timer. +<971> Returns <1/>, if the child task results in <2/> or if duration time didn’t pass since the previous execution. +<972> cooldown_state_var +<973> duration +<974> process_pause +<975> start_cooled +<976> trigger_on_failure +<977> <1/> cooldown_state_var = <2/> 🔗 +<978> <1/> set_cooldown_state_var(value: <2/>) +<979> <1/> get_cooldown_state_var() +<980> A boolean variable used to store the cooldown state in the Blackboard. If left empty, the variable will be automatically generated and assigned. +<981> If the variable’s value is set to <1/>, it indicates that the cooldown is activated. This feature is useful for checking the cooldown state from other parts of the tree or sharing it among different sections of the BehaviorTree. +<982> <1/> duration = <2/> 🔗 +<983> <1/> set_duration(value: <2/>) +<984> <1/> get_duration() +<985> Time to wait before permitting another child’s execution. +<986> <1/> process_pause = <2/> 🔗 +<987> <1/> set_process_pause(value: <2/>) +<988> <1/> get_process_pause() +<989> If <1/>, process cooldown when the <2/> is paused. +<990> <1/> start_cooled = <2/> 🔗 +<991> <1/> set_start_cooled(value: <2/>) +<992> <1/> get_start_cooled() +<993> If <1/>, initiate a cooldown as if the child had been executed before the first BT tick. +<994> <1/> trigger_on_failure = <2/> 🔗 +<995> <1/> set_trigger_on_failure(value: <2/>) +<996> <1/> get_trigger_on_failure() +<997> If <1/>, the cooldown will be activated if the child task also returns <2/>. Otherwise, the cooldown will only be triggered when the child task returns <3/>. +<998> BTDecorator +<999> Inherited By: BTAlwaysFail, BTAlwaysSucceed, BTCooldown, BTDelay, BTForEach, BTInvert, BTNewScope, BTProbability, BTRepeat, BTRepeatUntilFailure, BTRepeatUntilSuccess, BTRunLimit, BTTimeLimit +<1000> Base class for BT decorators. +<1001> Base class for all BehaviorTree decorators. You can create your own decorators by extending the BTDecorator class. +<1002> A decorator is a task within a BehaviorTree that alters the behavior of its child task. Decorators can have only one child task. +<1003> Decorators can be used to add conditions, limits, or other constraints to the execution of a task. Examples of BehaviorTree decorators include BTInvert, BTRepeat, and BTCooldown. The use of BehaviorTree decorators can simplify the design and implementation of complex behaviors by adding additional logic to existing tasks. +<1004> BTDelay +<1005> BT decorator that introduces a delay before executing its child task. +<1006> BTDelay introduces a delay of seconds before executing its child task. Returns <2/> during the delay period. +<1007> seconds +<1008> <1/> seconds = <2/> 🔗 +<1009> <1/> set_seconds(value: <2/>) +<1010> <1/> get_seconds() +<1011> Delay duration in seconds. +<1012> BTDynamicSelector +<1013> Inherits: BTComposite < BTTask < BT +<1014> BT composite that executes tasks from scratch every tick until first <1/>. +<1015> BTDynamicSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. Unlike BTSelector, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to retry higher-priority behaviors in every tick. +<1016> Returns <1/> if a child task results in <2/>. BTDynamicSelector will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task. +<1017> Returns <1/> if all child tasks result in <2/>. +<1018> Returns <1/> if a child task results in <2/>. +<1019> BTDynamicSequence +<1020> BT composite that executes tasks from scratch every tick as long as they return <1/>. +<1021> BTDynamicSequence executes its child tasks sequentially, from first to last, for as long as they return <1/>. Unlike BTSequence, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to recheck conditions preceding a long-running action during each tick and abort the <3/> action when any condition results in <4/>. +<1022> Returns <1/> if a child task results in <2/>. BTDynamicSequence will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task. +<1023> Returns <1/> if a child task results in <2/>. +<1024> Returns <1/> if all child tasks result in <2/>. +<1025> BTEvaluateExpression +<1026> BT action that evaluates an <1/> against a specified <2/> or <3/>. +<1027> BTEvaluateExpression action evaluates an expression_string on the specified <2/> or <3/> instance and returns <4/> when the <5/> executes successfully. +<1028> Returns <1/> if the action encounters an issue during the <2/> parsing or execution. +<1029> expression_string +<1030> input_include_delta +<1031> input_names +<1032> input_values +<1033> node +<1034> result_var +<1035> Error +<1036> parse() +<1037> <1/> expression_string = <2/> 🔗 +<1038> <1/> set_expression_string(value: <2/>) +<1039> <1/> get_expression_string() +<1040> The expression string to be parsed and executed. +<1041> Warning: Call parse after updating expression_string to update the internal <3/> as it won’t be updated automatically. +<1042> <1/> input_include_delta = <2/> 🔗 +<1043> <1/> set_input_include_delta(value: <2/>) +<1044> <1/> is_input_delta_included() +<1045> If enabled, the input variable <1/> will be added to input_names and input_values. +<1046> Warning: Call parse after toggling input_include_delta to update the internal <3/> as it won’t be updated automatically. +<1047> <1/> input_names = <2/> 🔗 +<1048> <1/> set_input_names(value: <2/>) +<1049> <1/> get_input_names() +<1050> List of variable names within expression_string for which the user will provide values for through input_values. +<1051> Warning: Call parse after updating input_names to update the internal <3/> as it won’t be updated automatically. +<1052> Array[BBVariant] input_values = <2/> 🔗 +<1053> <1/> set_input_values(value: Array[BBVariant]) +<1054> Array[BBVariant] get_input_values() +<1055> List of values for variables specified in input_names. The values are mapped to the variables by their array index. +<1056> BBNode node 🔗 +<1057> <1/> result_var = <2/> 🔗 +<1058> Error parse() 🔗 +<1059> Calls Expression.parse considering input_include_delta and input_names and returns its error code. +<1060> BTFail +<1061> BT action that always returns <1/>. +<1062> BTForEach +<1063> BT decorator that executes its child task for each element of an <1/>. +<1064> BTForEach executes its child task for each element of an <1/>. During each iteration, the next element is stored in the specified Blackboard variable. +<1065> Returns <1/> if the child task results in <2/> or if the child task results in <3/> on a non-last iteration. +<1066> Returns <1/> if the child task results in <2/>. +<1067> Returns <1/> if the child task results in <2/> on the last iteration. +<1068> array_var +<1069> save_var +<1070> <1/> array_var = <2/> 🔗 +<1071> <1/> set_array_var(value: <2/>) +<1072> <1/> get_array_var() +<1073> A variable within the Blackboard that holds an <2/>, which is used for the iteration process. \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch09.txt b/docs/limboai-stable/_i18n/batches/batch09.txt new file mode 100644 index 0000000..eaf356b --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch09.txt @@ -0,0 +1,158 @@ +<1074> <1/> save_var = <2/> 🔗 +<1075> <1/> set_save_var(value: <2/>) +<1076> <1/> get_save_var() +<1077> A Blackboard variable used to store an element of the array referenced by array_var. +<1078> BTInstance +<1079> Represents a runtime instance of a BehaviorTree resource. +<1080> Can be created using the BehaviorTree.instantiate method. +<1081> monitor_performance +<1082> get_agent() <2/> +<1083> get_blackboard() <2/> +<1084> get_last_status() <2/> +<1085> get_owner_node() <2/> +<1086> get_root_task() <2/> +<1087> get_source_bt_path() <2/> +<1088> is_instance_valid() <2/> +<1089> register_with_debugger() +<1090> unregister_with_debugger() +<1091> update(delta: <2/>) +<1092> freed() 🔗 +<1093> Emitted when the behavior tree instance is freed. Used by debugger to unregister. +<1094> updated(status: <1/>) 🔗 +<1095> Emitted when the behavior tree instance has finished updating. +<1096> <1/> monitor_performance = <2/> 🔗 +<1097> If <1/>, adds a performance monitor for this instance to “Debugger->Monitors” in the editor. +<1098> <1/> get_agent() <2/> 🔗 +<1099> Returns the agent of the behavior tree instance. +<1100> Blackboard get_blackboard() <2/> 🔗 +<1101> Returns the blackboard of the behavior tree instance. +<1102> Status get_last_status() <2/> 🔗 +<1103> Returns the execution status of the last update. +<1104> <1/> get_owner_node() <2/> 🔗 +<1105> Returns the scene <1/> that owns this behavior tree instance. +<1106> BTTask get_root_task() <2/> 🔗 +<1107> Returns the root task of the behavior tree instance. +<1108> <1/> get_source_bt_path() <2/> 🔗 +<1109> Returns the file path to the behavior tree resource that was used to create this instance. +<1110> <1/> is_instance_valid() <2/> 🔗 +<1111> Returns <1/> if the behavior tree instance is properly initialized and can be used. +<1112> <1/> register_with_debugger() 🔗 +<1113> Registers the behavior tree instance with the debugger. +<1114> <1/> unregister_with_debugger() 🔗 +<1115> Unregisters the behavior tree instance from the debugger. This is typically not necessary, as the debugger will automatically unregister the instance when it is freed. +<1116> Status update(delta: <2/>) 🔗 +<1117> Ticks the behavior tree instance and returns its status. +<1118> BTInvert +<1119> BT decorator that transforms <1/> into <2/> and <3/> into <4/>. +<1120> BTInvert transforms <1/> into <2/> and <3/> into <4/>. +<1121> BTNewScope +<1122> Inherited By: BTSubtree +<1123> BT decorator that creates a new Blackboard scope. +<1124> BTNewScope creates a new Blackboard scope during initialization and populates it with data. See Blackboard. +<1125> Returns the status of the child task execution. +<1126> blackboard_plan +<1127> BlackboardPlan blackboard_plan 🔗 +<1128> BTParallel +<1129> BT composite that executes all of its child tasks simultaneously. +<1130> BTParallel executes all of its child tasks simultaneously. Note that BTParallel doesn’t involve multithreading. It processes each task sequentially, from first to last, in the same tick before returning a result. If one of the abort criterea is met, any tasks currently <1/> will be terminated, and the result will be either <2/> or <3/>. The num_failures_required determines when BTParallel fails and num_successes_required when it succeeds. When both are fullfilled, it gives priority to num_failures_required. +<1131> If set to repeat, all child tasks will be re-executed each tick, regardless of whether they previously resulted in <2/> or <3/>. +<1132> Returns <1/> when the required number of child tasks result in <2/>. When repeat is set to <4/>, if none of the criteria were met and all child tasks resulted in either <5/> or <6/>, BTParallel will return <7/>. +<1133> Returns <1/> when the required number of child tasks result in <2/>. +<1134> Returns <1/> if none of the criterea were fulfilled, and either repeat is set to <3/> or a child task resulted in <4/>. +<1135> num_failures_required +<1136> num_successes_required +<1137> repeat +<1138> <1/> num_failures_required = <2/> 🔗 +<1139> <1/> set_num_failures_required(value: <2/>) +<1140> <1/> get_num_failures_required() +<1141> If the specified number of child tasks return <1/>, BTParallel will also return <2/>. +<1142> <1/> num_successes_required = <2/> 🔗 +<1143> <1/> set_num_successes_required(value: <2/>) +<1144> <1/> get_num_successes_required() +<1145> If the specified number of child tasks return <1/>, BTParallel will also return <2/>. +<1146> <1/> repeat = <2/> 🔗 +<1147> <1/> set_repeat(value: <2/>) +<1148> <1/> get_repeat() +<1149> When <1/>, the child tasks will be executed again, regardless of whether they previously resulted in a <2/> or <3/>. +<1150> When <1/>, if none of the criteria were met, and all child tasks resulted in a <2/> or <3/>, BTParallel will return <4/>. +<1151> BTPauseAnimation +<1152> BT action that pauses the playback of an animation on the specified <1/> node. +<1153> BTPauseAnimation action pauses the playback of an animation on the specified <1/> node and returns <2/>. +<1154> Returns <1/> if the action fails to get the <2/> node. +<1155> animation_player +<1156> BBNode animation_player 🔗 +<1157> BTPlayAnimation +<1158> BT action that plays an animation on the specified <1/> node. +<1159> BTPlayAnimation action plays an animation on the specified <1/> node. If the await_completion is greater than <3/>, the action will wait for the animation to complete, with the maximum waiting time equal to await_completion. +<1160> Returns <1/> if the animation finishes playing or if the elapsed time exceeds await_completion. When await_completion is set to <4/>, BTPlayAnimation doesn’t wait for the animation to finish and immediately returns <5/>. +<1161> Returns <1/> if the animation is still playing and the elapsed time is less than await_completion. +<1162> Returns <1/> if the action fails to play the requested animation. +<1163> animation_name +<1164> animation_player +<1165> await_completion +<1166> blend +<1167> from_end +<1168> speed +<1169> <1/> animation_name = <2/> 🔗 +<1170> Animation’s key within the <1/> node. If empty, BTPlayAnimation will resume the last played animation if the <2/> was previously paused. +<1171> BBNode animation_player 🔗 +<1172> <1/> await_completion = <2/> 🔗 +<1173> <1/> set_await_completion(value: <2/>) +<1174> <1/> get_await_completion() +<1175> The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTPlayAnimation will stop waiting and return <1/>. +<1176> <1/> blend = <2/> 🔗 +<1177> <1/> set_blend(value: <2/>) +<1178> <1/> get_blend() +<1179> Custom blend time (in seconds). See AnimationPlayer.play. +<1180> <1/> from_end = <2/> 🔗 +<1181> <1/> set_from_end(value: <2/>) +<1182> <1/> get_from_end() +<1183> Play animation from the end. Used in combination with negative speed to play animation in reverse. See AnimationPlayer.play. +<1184> <1/> speed = <2/> 🔗 +<1185> <1/> set_speed(value: <2/>) +<1186> <1/> get_speed() +<1187> Custom playback speed scaling ratio. See AnimationPlayer.play. +<1188> BTProbability +<1189> BT decorator that executes its child task with a given probability. +<1190> BTProbability executes its child task with a given probability defined by run_chance. +<1191> Returns the result of the child task if it was executed; otherwise, it returns <1/>. +<1192> run_chance +<1193> <1/> run_chance = <2/> 🔗 +<1194> <1/> set_run_chance(value: <2/>) +<1195> <1/> get_run_chance() +<1196> Probability that defines how likely the child task will be executed. +<1197> BTProbabilitySelector +<1198> BT composite that chooses a child task to execute based on attached probabilities. +<1199> BTProbabilitySelector chooses a child task to execute based on attached probabilities. It is typically used for decision-making purposes. Probability distribution is calculated based on weights assigned to each child task. +<1200> Returns <1/> when a child task results in <2/>. +<1201> Returns <1/> when a child task results in <2/>. +<1202> The behavior of BTProbabilitySelector when a child task results in <1/> depends on the abort_on_failure value: +<1203> If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will normalize the probability distribution over the remaining children and choose a new child task to be executed. If all child tasks fail, the composite will return <4/>. +<1204> If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will not choose another child task to be executed and will immediately return <4/>. +<1205> abort_on_failure +<1206> get_probability(child_idx: <2/>) <3/> +<1207> get_total_weight() <2/> +<1208> get_weight(child_idx: <2/>) <3/> +<1209> has_probability(child_idx: <2/>) <3/> +<1210> set_probability(child_idx: <2/>, probability: <3/>) +<1211> set_weight(child_idx: <2/>, weight: <3/>) +<1212> <1/> abort_on_failure = <2/> 🔗 +<1213> <1/> set_abort_on_failure(value: <2/>) +<1214> <1/> get_abort_on_failure() +<1215> If <1/>, BTProbabilitySelector will not choose another child to execute and will return <2/> when a child task results in <3/>. +<1216> <1/> get_probability(child_idx: <2/>) <3/> 🔗 +<1217> Returns the child task’s selection probability. +<1218> <1/> get_total_weight() <2/> 🔗 +<1219> Returns the total weight of all child tasks. +<1220> <1/> get_weight(child_idx: <2/>) <3/> 🔗 +<1221> Returns the child task’s weight within the weighted probability selection algorithm. +<1222> <1/> has_probability(child_idx: <2/>) <3/> 🔗 +<1223> Returns whether the child task at index <1/> participates within the weighted probability selection algorithm and has a probability assigned to it. Returns <2/> for BTComment tasks. +<1224> <1/> set_probability(child_idx: <2/>, probability: <3/>) 🔗 +<1225> Sets the child task’s weight calculated based on the desired probability. +<1226> <1/> set_weight(child_idx: <2/>, weight: <3/>) 🔗 +<1227> Sets the child task’s weight for the weighted probability selection algorithm. +<1228> BTRandomSelector +<1229> BT composite that executes tasks in random order until first <1/>. +<1230> BTRandomSelector executes its child tasks in a random order until any child returns <1/>. If a child task results in <2/>, BTRandomSelector will immediately execute another child task until one of them returns <3/> or all of them result in <4/>. +<1231> Returns <1/> if a child task results in <2/>. BTRandomSelector will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick. \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch10.txt b/docs/limboai-stable/_i18n/batches/batch10.txt new file mode 100644 index 0000000..f333ef5 --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch10.txt @@ -0,0 +1,159 @@ +<1232> BTRandomSequence +<1233> BT composite that executes tasks in random order as long as they return <1/>. +<1234> BTRandomSequence executes its child tasks in a random order as long as they return <1/>. If a child task results in <2/>, BTRandomSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. +<1235> Returns <1/> if a child task results in <2/>. BTRandomSequence will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick. +<1236> BTRandomWait +<1237> BT action that waits for a randomized duration to elapse and then returns <1/>. +<1238> BTRandomWait action waits for a randomized duration to elapse and then returns <1/>. The duration is randomized within the specified range, defined by min_duration and max_duration. +<1239> max_duration +<1240> min_duration +<1241> <1/> max_duration = <2/> 🔗 +<1242> <1/> set_max_duration(value: <2/>) +<1243> <1/> get_max_duration() +<1244> Maximum duration for the wait. +<1245> <1/> min_duration = <2/> 🔗 +<1246> <1/> set_min_duration(value: <2/>) +<1247> <1/> get_min_duration() +<1248> Minimum duration for the wait. +<1249> BTRepeat +<1250> BT decorator that repeats its child a specified number of times. +<1251> BTRepeat iterates its child task a specified number of times, as defined by times. If forever is <3/>, the child’s execution will be repeated indefinitely. +<1252> Returns <1/> if the child task results in <2/>. If forever is <4/>, BTRepeat will always return <5/>. +<1253> Returns <1/> if the specified number of successful executions is reached. If abort_on_failure is <3/>, a <4/> status returned by the child is also considered a successful execution. +<1254> Returns <1/> if the child task results in <2/> when abort_on_failure is <4/>. +<1255> abort_on_failure +<1256> forever +<1257> times +<1258> <1/> abort_on_failure = <2/> 🔗 +<1259> If <1/>, <2/> status returned by the child task is also considered as a successful execution. +<1260> <1/> forever = <2/> 🔗 +<1261> <1/> set_forever(value: <2/>) +<1262> <1/> get_forever() +<1263> If <1/>, the child’s execution will be repeated indefinitely, always returning <2/>. +<1264> <1/> times = <2/> 🔗 +<1265> <1/> set_times(value: <2/>) +<1266> <1/> get_times() +<1267> The number of times to repeat execution of the child task. +<1268> BTRepeatUntilFailure +<1269> BT decorator that repeats its child task until <1/>. +<1270> BTRepeatUntilFailure repeats its child task until it results in <1/>. +<1271> Returns <1/> if the child task results in <2/> or <3/>. +<1272> Returns <1/> if the child task results in <2/>. +<1273> BTRepeatUntilSuccess +<1274> BT decorator that repeats its child task until <1/>. +<1275> BTRepeatUntilSuccess repeats its child task until it results in <1/>. +<1276> Returns <1/> if the child task results in <2/> or <3/>. +<1277> Returns <1/> if the child task results in <2/>. +<1278> BTRunLimit +<1279> BT decorator that restricts the execution of its child a limited number of times. +<1280> BTRunLimit restricts the execution of the child task to a maximum number of times, defined by run_limit. +<1281> Returns <1/> if the limit on executions is exceeded; otherwise, it returns the status of the child task. +<1282> CountPolicy +<1283> count_policy +<1284> run_limit +<1285> enum CountPolicy: 🔗 +<1286> CountPolicy COUNT_SUCCESSFUL = <2/> +<1287> Count only successful runs towards the limit. +<1288> CountPolicy COUNT_FAILED = <2/> +<1289> Count only failed runs towards the limit. +<1290> CountPolicy COUNT_ALL = <2/> +<1291> Count successful and failed runs towards the limit. +<1292> CountPolicy count_policy = <2/> 🔗 +<1293> <1/> set_count_policy(value: CountPolicy) +<1294> CountPolicy get_count_policy() +<1295> Which runs should be counted towards the limit: successful, failed, or all? +<1296> <1/> run_limit = <2/> 🔗 +<1297> <1/> set_run_limit(value: <2/>) +<1298> <1/> get_run_limit() +<1299> The maximum number of times the child is permitted to be executed. +<1300> BTSelector +<1301> BT composite that sequentially executes tasks until first <1/>. +<1302> BTSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. If a child task results in <2/>, BTSelector will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSelector and BTSequence are two of the most common building blocks of behavior trees. Essentially, while BTSequence is similar to a boolean AND operation, BTSelector is similar to a boolean OR operation. Selectors enable the behavior tree to respond to changes in the environment and trigger transitions between various fallback behaviors. +<1303> Returns <1/> if a child task results in <2/>. BTSelector will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick. +<1304> BTSequence +<1305> BT composite that sequentially executes tasks as long as they return <1/>. +<1306> BTSequence executes its child tasks sequentially, from first to last, as long as they return <1/>. If a child task results in <2/>, BTSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSequence and BTSelector are two of the most common building blocks of behavior trees. Essentially, while BTSelector is similar to a boolean OR operation, BTSequence is similar to a boolean AND operation. Sequences enable the behavior tree to compose complex behaviors from a chain of simpler tasks. +<1307> Returns <1/> if any child task results in <2/>. BTSequence will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick. +<1308> BTSetAgentProperty +<1309> BT action that assigns a value to the specified agent’s property. +<1310> BTSetAgentProperty assigns the specified value to the agent’s property identified by the property and returns <3/>. Optionally, it can perform a specific operation before assignment. +<1311> Returns <1/> if it fails to set the property. +<1312> Operation +<1313> operation +<1314> property +<1315> value +<1316> Operation operation = <2/> 🔗 +<1317> <1/> set_operation(value: Operation) +<1318> Operation get_operation() +<1319> Specifies the operation to be performed before assignment. Operation is executed as follows: +<1320> <1/> property = <2/> 🔗 +<1321> Parameter that specifies the agent’s property name. +<1322> BBVariant value 🔗 +<1323> Parameter that specifies the value that will be assigned to agent’s property. +<1324> BTSetVar +<1325> BT action that assigns value to the variable and then returns <3/>. +<1326> BTSetVar assigns value to the variable and then returns <3/>. Optionally, it can perform a specific operation before assignment. +<1327> Returns <1/> if it fails to set the variable. +<1328> operation +<1329> value +<1330> variable +<1331> Operation operation = <2/> 🔗 +<1332> BBVariant value 🔗 +<1333> Parameter that specifies the value to be assigned to the variable. +<1334> <1/> variable = <2/> 🔗 +<1335> Name of the variable to which the value will be assigned. +<1336> BTStopAnimation +<1337> BT action that stops the playback of an animation on the specified <1/> node. +<1338> BTStopAnimation action stops the playback of an animation on the specified <1/> node and returns <2/>. If animation_name is set, it will only stop the playback if the specified animation is currently playing. +<1339> animation_name +<1340> animation_player +<1341> keep_state +<1342> <1/> animation_name = <2/> 🔗 +<1343> Animation’s key within the <1/> node. If not empty, BTStopAnimation will only stop the playback if the specified animation is currently playing. +<1344> BBNode animation_player 🔗 +<1345> <1/> keep_state = <2/> 🔗 +<1346> <1/> set_keep_state(value: <2/>) +<1347> <1/> get_keep_state() +<1348> If <1/>, the animation state is not updated visually. +<1349> BTSubtree +<1350> Inherits: BTNewScope < BTDecorator < BTTask < BT +<1351> BT decorator that instantiates and runs a subtree within the larger tree. +<1352> BTSubtree instantiates a BehaviorTree and includes its root task as a child during initialization, while also creating a new Blackboard scope. +<1353> Returns the status of the subtree’s execution. +<1354> Subtree blackboard variables can be mapped to the main tree blackboard plan variables. Check out mapping section in the inspector. +<1355> Note: BTSubTree is designed as a simpler loader, and does not support updating subtree at runtime. A custom subtree decorator is better suited: +<1356> This allows for the BehaviorTree to load a specific behavior tree from a variable in the blackboard, or from some other location, and use that new behavior tree at runtime. +<1357> subtree +<1358> BehaviorTree subtree 🔗 +<1359> <1/> set_subtree(value: BehaviorTree) +<1360> BehaviorTree get_subtree() +<1361> A BehaviorTree resource that will be instantiated as a subtree. +<1362> BTTimeLimit +<1363> BT decorator that sets a time limit for its child’s execution. +<1364> BTTimeLimit allocates a limited time for the child’s execution and aborts it, returning <1/> if the time_limit is exceeded. +<1365> Returns <1/> if the time_limit is exceeded; otherwise, it returns the status of the child task. +<1366> time_limit +<1367> <1/> time_limit = <2/> 🔗 +<1368> <1/> set_time_limit(value: <2/>) +<1369> <1/> get_time_limit() +<1370> Time allocated for the child task’s execution. +<1371> BTWait +<1372> BT action that waits for a specified duration to elapse and then returns <2/>. +<1373> duration +<1374> <1/> duration = <2/> 🔗 +<1375> There is currently no description for this property. Please help us by contributing one! +<1376> BTWaitTicks +<1377> BT action that waits for a specified number of ticks to elapse and then returns <1/>. +<1378> num_ticks +<1379> <1/> num_ticks = <2/> 🔗 +<1380> <1/> set_num_ticks(value: <2/>) +<1381> <1/> get_num_ticks() +<1382> The number of ticks to wait before returning <1/>. +<1383> LimboUtility +<1384> Helper functions for LimboAI. +<1385> decorate_output_var(variable: <2/>) <3/> +<1386> decorate_var(variable: <2/>) <3/> +<1387> get_check_operator_string(check: CheckType) <3/> +<1388> get_operation_string(operation: Operation) <3/> +<1389> get_status_name(status: <2/>) <3/> +<1390> get_task_icon(class_or_script_path: <2/>) <3/> \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/batches/batch11.txt b/docs/limboai-stable/_i18n/batches/batch11.txt new file mode 100644 index 0000000..1ab6845 --- /dev/null +++ b/docs/limboai-stable/_i18n/batches/batch11.txt @@ -0,0 +1,61 @@ +<1391> perform_check(check: CheckType, a: <3/>, b: <4/>) +<1392> perform_operation(operation: Operation, a: <3/>, b: <4/>) +<1393> enum CheckType: 🔗 +<1394> CheckType CHECK_EQUAL = <2/> +<1395> Equality Check. +<1396> CheckType CHECK_LESS_THAN = <2/> +<1397> Less Than Check. +<1398> CheckType CHECK_LESS_THAN_OR_EQUAL = <2/> +<1399> Less Than or Equal To Check. +<1400> CheckType CHECK_GREATER_THAN = <2/> +<1401> Greater Than Check. +<1402> CheckType CHECK_GREATER_THAN_OR_EQUAL = <2/> +<1403> Greater Than or Equal To Check +<1404> CheckType CHECK_NOT_EQUAL = <2/> +<1405> Inequality Check. +<1406> enum Operation: 🔗 +<1407> Operation OPERATION_NONE = <2/> +<1408> No operation. +<1409> Operation OPERATION_ADDITION = <2/> +<1410> Arithmetic addition. +<1411> Operation OPERATION_SUBTRACTION = <2/> +<1412> Arithmetic subtraction. +<1413> Operation OPERATION_MULTIPLICATION = <2/> +<1414> Arithmetic multiplication. +<1415> Operation OPERATION_DIVISION = <2/> +<1416> Arithmetic division. +<1417> Operation OPERATION_MODULO = <2/> +<1418> Produces the remainder of an integer division. +<1419> Operation OPERATION_POWER = <2/> +<1420> Multiply <1/> by itself <2/> times. +<1421> Operation OPERATION_BIT_SHIFT_LEFT = <2/> +<1422> Bitwise left shift. +<1423> Operation OPERATION_BIT_SHIFT_RIGHT = <2/> +<1424> Bitwise right shift. +<1425> Operation OPERATION_BIT_AND = <2/> +<1426> Bitwise AND. +<1427> Operation OPERATION_BIT_OR = <2/> +<1428> Bitwise OR. +<1429> Operation OPERATION_BIT_XOR = <2/> +<1430> Bitwise XOR. +<1431> <1/> decorate_output_var(variable: <2/>) <3/> 🔗 +<1432> Just like decorate_var, produces a string with a Blackboard variable name that is formatted for display, and also adds an additional symbol to indicate that the variable is used as an output. +<1433> <1/> decorate_var(variable: <2/>) <3/> 🔗 +<1434> Produces a string with a Blackboard variable name that is formatted for display or console output. +<1435> <1/> get_check_operator_string(check: CheckType) <3/> 🔗 +<1436> Returns an operator string for a CheckType enum value. For example, CHECK_EQUAL returns “==”. +<1437> <1/> get_operation_string(operation: Operation) <3/> 🔗 +<1438> Returns a string representation of an Operation enum value. +<1439> <1/> get_status_name(status: <2/>) <3/> 🔗 +<1440> Returns a name of a BTTask status code. +<1441> <1/> get_task_icon(class_or_script_path: <2/>) <3/> 🔗 +<1442> Returns the icon texture associated with a task based on its class name or script resource path. +<1443> <1/> perform_check(check: CheckType, a: <3/>, b: <4/>) 🔗 +<1444> Performs a <1/> on two values, <2/> and <3/>, and returns <4/> if the check passes. +<1445> <1/> perform_operation(operation: Operation, a: <3/>, b: <4/>) 🔗 +<1446> Performs an <1/> on two values, <2/> and <3/>, and returns the result. +<1447> Getting started +<1448> Behavior Trees +<1449> Hierarchical State MachineS +<1450> Class reference +<1451> LimboAI 1.0 documentation \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/blocks.json b/docs/limboai-stable/_i18n/blocks.json new file mode 100644 index 0000000..5663175 --- /dev/null +++ b/docs/limboai-stable/_i18n/blocks.json @@ -0,0 +1,22113 @@ +[ + { + "kind": "body", + "tag": "h1", + "path": "", + "html": "LimboAI Documentation", + "text": "LimboAI Documentation", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboAI is an open-source C++ module for Godot Engine 4 providing a combination of Behavior Trees and State Machines for crafting your game’s AI. It comes with a behavior tree editor, built-in documentation, visual debugger, and more! While it is implemented in C++, it fully supports GDScript for creating your own tasks and states. The full list of features is available on the LimboAI GitHub page.", + "text": "LimboAI is an open-source C++ module for Godot Engine 4 providing a combination of Behavior Trees and State Machines for crafting your game’s AI. It comes with a behavior tree editor, built-in documentation, visual debugger, and more! While it is implemented in C++, it fully supports GDScript for creating your own tasks and states. The full list of features is available on the LimboAI GitHub page.", + "markers": { + "1": "creating your own tasks", + "2": "LimboAI GitHub" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior Trees are powerful hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games. To learn more about behavior trees, check out Introduction to Behavior Trees.", + "text": "Behavior Trees are powerful hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games. To learn more about behavior trees, check out Introduction to Behavior Trees.", + "markers": { + "1": "Introduction to Behavior Trees" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Hierarchical State Machines are finite state machines that allow any state to host their own sub-state machine. This allows you to tackle your AI’s state and transition complexity by breaking down one big state machine into multiple smaller ones.", + "text": "Hierarchical State Machines are finite state machines that allow any state to host their own sub-state machine. This allows you to tackle your AI’s state and transition complexity by breaking down one big state machine into multiple smaller ones.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Getting LimboAI", + "text": "Getting LimboAI", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboAI can be used as either a C++ module or as a GDExtension shared library. There are some differences between the two. In short, GDExtension version is more convenient to use but somewhat limited in features. The module version provides better editor experience and is slightly more performant, but it requires using custom engine builds including the export templates. Whichever you choose to use, your project will stay compatible with both and you can switch from one to the other any time.", + "text": "LimboAI can be used as either a C++ module or as a GDExtension shared library. There are some differences between the two. In short, GDExtension version is more convenient to use but somewhat limited in features. The module version provides better editor experience and is slightly more performant, but it requires using custom engine builds including the export templates. Whichever you choose to use, your project will stay compatible with both and you can switch from one to the other any time.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Choose the version you’d like to use. If you’re unsure, start with the GDExtension version. You can change your decision at any time - both versions are fully compatible.", + "text": "Choose the version you’d like to use. If you’re unsure, start with the GDExtension version. You can change your decision at any time - both versions are fully compatible.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Get GDExtension version", + "text": "Get GDExtension version", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Precompiled builds are available on the official LimboAI GitHub page, and in the Asset Library.", + "text": "Precompiled builds are available on the official LimboAI GitHub page, and in the Asset Library.", + "markers": { + "1": "LimboAI GitHub" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "GDExtension is the most convenient way of using the LimboAI plugin, but it comes with certain limitations:", + "text": "GDExtension is the most convenient way of using the LimboAI plugin, but it comes with certain limitations:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Documentation tooltips are not available.", + "text": "Documentation tooltips are not available.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Handy BBParam property editor is not available in the extension due to dependencies on the engine classes that are not available in the Godot API.", + "text": "Handy BBParam property editor is not available in the extension due to dependencies on the engine classes that are not available in the Godot API.", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "🛈 See also: What is GDExtension?", + "text": "🛈 See also: What is GDExtension?", + "markers": { + "1": "What is GDExtension?" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Installation instructions:", + "text": "Installation instructions:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Make sure you’re using the latest stable version of the Godot editor.", + "text": "Make sure you’re using the latest stable version of the Godot editor.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Create a new project for your experiments with LimboAI.", + "text": "Create a new project for your experiments with LimboAI.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In Godot, click AssetLib tab at the top of the screen and search for LimboAI. Download it. LimboAI plugin will be downloaded with the demo project files. Don’t mind the errors printed at this point, this is due to the extension library not being loaded just yet.", + "text": "In Godot, click AssetLib tab at the top of the screen and search for LimboAI. Download it. LimboAI plugin will be downloaded with the demo project files. Don’t mind the errors printed at this point, this is due to the extension library not being loaded just yet.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Reload your project with Project -> Reload project. There shouldn’t be any errors printed now.", + "text": "Reload your project with Project -> Reload project. There shouldn’t be any errors printed now.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In the project files, locate a scene file called showcase.tscn and run it. It’s the demo’s entry point.", + "text": "In the project files, locate a scene file called showcase.tscn and run it. It’s the demo’s entry point.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Get module version", + "text": "Get module version", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Precompiled builds are available on the official LimboAI GitHub page.", + "text": "Precompiled builds are available on the official LimboAI GitHub page.", + "markers": { + "1": "LimboAI GitHub" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Installation instructions:", + "text": "Installation instructions:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In GitHub releases, download the latest pre-compiled release build for your platform.", + "text": "In GitHub releases, download the latest pre-compiled release build for your platform.", + "markers": { + "1": "GitHub releases" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Download the demo project archive from the same release.", + "text": "Download the demo project archive from the same release.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Extract the pre-compiled editor and the demo project files.", + "text": "Extract the pre-compiled editor and the demo project files.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Launch the pre-compiled editor binary, import and open the demo project.", + "text": "Launch the pre-compiled editor binary, import and open the demo project.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Run the project.", + "text": "Run the project.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Important: To export your game using the module version of LimboAI, make sure to use the pre-compiled export templates included in the same GitHub release build.", + "text": "Important: To export your game using the module version of LimboAI, make sure to use the pre-compiled export templates included in the same GitHub release build.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Using LimboAI with C#", + "text": "Using LimboAI with C#", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Here’s how you can use the module version with C# to write your tasks and states.", + "text": "Here’s how you can use the module version with C# to write your tasks and states.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Locate LimboAI NuGet package files.", + "text": "Locate LimboAI NuGet package files.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Each provided build comes with a GodotSharp folder, which has packages under “GodotSharp/Tools/nupkgs/”. Note down the directory path; you’ll need it in the next step.", + "text": "Each provided build comes with a GodotSharp folder, which has packages under “GodotSharp/Tools/nupkgs/”. Note down the directory path; you’ll need it in the next step.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Add a local source for NuGet packages using the following command:", + "text": "Add a local source for NuGet packages using the following command:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Your C# project should be able to see LimboAI classes and compile.", + "text": "Your C# project should be able to see LimboAI classes and compile.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Regarding GDExtension, I can only confirm success with the module version and C#. Unfortunately, I haven’t had any luck with the GDExtension version yet. If you’ve had success with GDExtension, please let me know via Discord or email.", + "text": "Regarding GDExtension, I can only confirm success with the module version and C#. Unfortunately, I haven’t had any luck with the GDExtension version yet. If you’ve had success with GDExtension, please let me know via Discord or email.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Contributing", + "text": "Contributing", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "We target the latest stable version of the Godot Engine for development until a third beta or a release candidate of an upcoming Godot release becomes available. If you want to contribute to the project, please ensure that you are using the corresponding Godot version.", + "text": "We target the latest stable version of the Godot Engine for development until a third beta or a release candidate of an upcoming Godot release becomes available. If you want to contribute to the project, please ensure that you are using the corresponding Godot version.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "We follow the Godot code style guidelines. Please use <2/> to maintain consistent styling. You can install <3/> hooks for Git using <4/> to automate this process.", + "text": "We follow the Godot code style guidelines. Please use to maintain consistent styling. You can install hooks for Git using to automate this process.", + "markers": { + "1": "Godot code style guidelines", + "2": "clang-format", + "3": "pre-commit", + "4": "pre-commit install" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Please keep the minor versions backward-compatible when submitting pull requests.", + "text": "Please keep the minor versions backward-compatible when submitting pull requests.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "We support building LimboAI as a module for the Godot Engine and as a GDExtension library. Make sure your contribution is compatible with both. Our CI workflow will verify that your changes can be compiled in both configurations.", + "text": "We support building LimboAI as a module for the Godot Engine and as a GDExtension library. Make sure your contribution is compatible with both. Our CI workflow will verify that your changes can be compiled in both configurations.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Compiling as module of the Godot Engine", + "text": "Compiling as module of the Godot Engine", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Clone the Godot Engine repository.", + "text": "Clone the Godot Engine repository.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Switch to the latest stable tag.", + "text": "Switch to the latest stable tag.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Clone the LimboAI repository into the <1/> directory.", + "text": "Clone the LimboAI repository into the directory.", + "markers": { + "1": "modules/limboai" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Consult the Godot Engine documentation for detailed instructions on building the engine.", + "text": "Consult the Godot Engine documentation for detailed instructions on building the engine.", + "markers": { + "1": "Godot Engine documentation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Unit tests can be compiled using the <1/> build option. To execute them, run the compiled Godot binary with the <2/> command-line options.", + "text": "Unit tests can be compiled using the build option. To execute them, run the compiled Godot binary with the command-line options.", + "markers": { + "1": "tests=yes", + "2": "--test --tc=\"*[LimboAI]*\"" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Building C# Packages", + "text": "Building C# Packages", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If you want C# Support for LimboAI when building from source, follow Godot’s instructions for building from source with C# Support: Compiling with .NET. LimboAI’s classes will be included in the output from that build process.", + "text": "If you want C# Support for LimboAI when building from source, follow Godot’s instructions for building from source with C# Support: Compiling with .NET. LimboAI’s classes will be included in the output from that build process.", + "markers": { + "1": "Compiling with .NET" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Compiling as GDExtension library", + "text": "Compiling as GDExtension library", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You’ll need the SCons build tool and a C++ compiler. See also Compiling. Run <2/> to build the plugin library for your current platform.", + "text": "You’ll need the SCons build tool and a C++ compiler. See also Compiling. Run to build the plugin library for your current platform.", + "markers": { + "1": "Compiling", + "2": "scons target=editor" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "SCons will automatically clone the <1/> repository if it doesn’t already exist in the <2/> directory.", + "text": "SCons will automatically clone the repository if it doesn’t already exist in the directory.", + "markers": { + "1": "godot-cpp", + "2": "limboai/godot-cpp" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "By default, built targets are placed in the demo project: <1/>.", + "text": "By default, built targets are placed in the demo project: .", + "markers": { + "1": "demo/addons/limboai/bin/" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Check <1/> for other options and targets.", + "text": "Check for other options and targets.", + "markers": { + "1": "scons -h" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Contributing to the documentation", + "text": "Contributing to the documentation", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Online documentation is created using Sphinx. Source files are located in the <2/> directory in RST format and can be built locally with <3/>. See the Sphinx documentation for more details.", + "text": "Online documentation is created using Sphinx. Source files are located in the directory in RST format and can be built locally with . See the Sphinx documentation for more details.", + "markers": { + "1": "Sphinx", + "2": "doc/source", + "3": "sphinx-build", + "4": "Sphinx documentation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Class documentation resides in XML files within the <1/> directory. If you create a new class or modify an existing one, you can run the compiled Godot binary with the <2/> option in the root of the Godot source code to generate the missing XML files or sections within those files in the class documentation. After editing the XML files, please run the compiled editor binary with the <3/> option again to update and tidy up the XML files.", + "text": "Class documentation resides in XML files within the directory. If you create a new class or modify an existing one, you can run the compiled Godot binary with the option in the root of the Godot source code to generate the missing XML files or sections within those files in the class documentation. After editing the XML files, please run the compiled editor binary with the option again to update and tidy up the XML files.", + "markers": { + "1": "doc_classes/", + "2": "--doctool", + "3": "--doctool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sphinx RST files for the class documentation are generated from XML files using the Godot script <1/> and stored in the <2/> directory. This process is performed using our own script <3/>. RST files in <4/> should not be edited manually.", + "text": "Sphinx RST files for the class documentation are generated from XML files using the Godot script and stored in the directory. This process is performed using our own script . RST files in should not be edited manually.", + "markers": { + "1": "make_rst.py", + "2": "doc/source/classes", + "3": "scripts/update_rst.sh", + "4": "doc/source/classes" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Introduction to Behavior Trees", + "text": "Introduction to Behavior Trees", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "🛈 Note: Demo project includes a tutorial that provides an introduction to behavior trees through illustrative examples.", + "text": "🛈 Note: Demo project includes a tutorial that provides an introduction to behavior trees through illustrative examples.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior Trees (BT) are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.", + "text": "Behavior Trees (BT) are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include Sequence, Selector, and Invert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. Such tasks can share data using the Blackboard.", + "text": "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include Sequence, Selector, and Invert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. Such tasks can share data using the Blackboard.", + "markers": { + "1": "Sequence", + "2": "Selector", + "3": "Invert", + "4": "BTTask", + "5": "share data using the Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "🛈 Note: To create your own actions, extend the BTAction class.", + "text": "🛈 Note: To create your own actions, extend the BTAction class.", + "markers": { + "1": "create your own actions", + "2": "BTAction" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A Behavior Tree is usually processed each frame. It is traversed from top to bottom, with the control tasks determining the control flow. Each task has a _tick method, which performs the task’s work and returns a status indicating its progress: <2/>, <3/>, or <4/>. <5/> and <6/> indicate the outcome of finished work, while <7/> status is returned when a task requires more than one tick to complete its job. These statuses determine how the tree progresses, with the <8/> status usually meaning that the tree will continue execution during the next frame.", + "text": "A Behavior Tree is usually processed each frame. It is traversed from top to bottom, with the control tasks determining the control flow. Each task has a _tick method, which performs the task’s work and returns a status indicating its progress: , , or . and indicate the outcome of finished work, while status is returned when a task requires more than one tick to complete its job. These statuses determine how the tree progresses, with the status usually meaning that the tree will continue execution during the next frame.", + "markers": { + "1": "_tick", + "2": "SUCCESS", + "3": "FAILURE", + "4": "RUNNING", + "5": "SUCCESS", + "6": "FAILURE", + "7": "RUNNING", + "8": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "There are four types of tasks:", + "text": "There are four types of tasks:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Actions are leaf tasks that perform the actual work.", + "text": "Actions are leaf tasks that perform the actual work.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Examples: PlayAnimation, Wait.", + "text": "Examples: PlayAnimation, Wait.", + "markers": { + "1": "PlayAnimation", + "2": "Wait" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Conditions are leaf tasks that conduct various checks.", + "text": "Conditions are leaf tasks that conduct various checks.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Examples: CheckVar, InRange.", + "text": "Examples: CheckVar, InRange.", + "markers": { + "1": "CheckVar", + "2": "InRange" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Composites can have one or more child tasks, and dictate the execution flow of their children.", + "text": "Composites can have one or more child tasks, and dictate the execution flow of their children.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Examples: Sequence, Selector, Parallel.", + "text": "Examples: Sequence, Selector, Parallel.", + "markers": { + "1": "Sequence", + "2": "Selector", + "3": "Parallel" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Decorators can only have a single child and they change how their child task operates.", + "text": "Decorators can only have a single child and they change how their child task operates.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Examples: AlwaysSucceed, Invert, TimeLimit.", + "text": "Examples: AlwaysSucceed, Invert, TimeLimit.", + "markers": { + "1": "AlwaysSucceed", + "2": "Invert", + "3": "TimeLimit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sequence is one of the core composite tasks. It executes its child tasks sequentially, from first to last, until one of them returns <2/>, or all of them result in <3/>. In other words, if any child task results in <4/>, the Sequence execution will be aborted, and the Sequence itself will return <7/>.", + "text": "Sequence is one of the core composite tasks. It executes its child tasks sequentially, from first to last, until one of them returns , or all of them result in . In other words, if any child task results in , the Sequence execution will be aborted, and the Sequence itself will return .", + "markers": { + "1": "Sequence", + "2": "FAILURE", + "3": "SUCCESS", + "4": "FAILURE", + "5": "Sequence", + "6": "Sequence", + "7": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Selector is another essential composite task. It executes its child tasks sequentially, from first to last, until one of them returns <2/> or all of them result in <3/>. In other words, when a child task results in <4/>, it moves on to the next one until it finds the one that returns <5/>. Once a child task results in <6/>, the Selector stops and also returns <8/>. The purpose of the Selector is to find a child that succeeds.", + "text": "Selector is another essential composite task. It executes its child tasks sequentially, from first to last, until one of them returns or all of them result in . In other words, when a child task results in , it moves on to the next one until it finds the one that returns . Once a child task results in , the Selector stops and also returns . The purpose of the Selector is to find a child that succeeds.", + "markers": { + "1": "Selector", + "2": "SUCCESS", + "3": "FAILURE", + "4": "FAILURE", + "5": "SUCCESS", + "6": "SUCCESS", + "7": "Selector", + "8": "SUCCESS", + "9": "Selector" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with Sequence and Selector to craft your decision-making logic.", + "text": "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either or based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with Sequence and Selector to craft your decision-making logic.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "Sequence", + "4": "Selector" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "🛈 Note: To create your own conditions, extend the BTCondition class.", + "text": "🛈 Note: To create your own conditions, extend the BTCondition class.", + "markers": { + "1": "create your own conditions", + "2": "BTCondition" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Check out the BTTask class documentation, which provides the foundation for various building blocks of Behavior Trees.", + "text": "Check out the BTTask class documentation, which provides the foundation for various building blocks of Behavior Trees.", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Creating Behavior Trees", + "text": "Creating Behavior Trees", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "This chapter describes how to create and debug behavior trees.", + "text": "This chapter describes how to create and debug behavior trees.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Add a Behavior Tree to an agent", + "text": "Add a Behavior Tree to an agent", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Follow these steps to add a behavior tree to a new or existing agent:", + "text": "Follow these steps to add a behavior tree to a new or existing agent:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Make a scene file for your agent, or open an existing scene.", + "text": "Make a scene file for your agent, or open an existing scene.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Add a BTPlayer node to your scene.", + "text": "Add a BTPlayer node to your scene.", + "markers": { + "1": "BTPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Select BTPlayer, and create a new behavior tree in the inspector.", + "text": "Select BTPlayer, and create a new behavior tree in the inspector.", + "markers": { + "1": "BTPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Optionally, you can save the behavior tree to a file using the property’s context menu.", + "text": "Optionally, you can save the behavior tree to a file using the property’s context menu.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Click the behavior tree property to open it in the LimboAI editor.", + "text": "Click the behavior tree property to open it in the LimboAI editor.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Debugging Behavior Trees", + "text": "Debugging Behavior Trees", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In Godot Engine, follow to “Bottom Panel > Debugger > LimboAI” tab. With the LimboAI debugger, you can inspect any currently active behavior tree within the running project. The debugger can be detached from the main editor window, which can be particularly useful if you have a HiDPI or a secondary display.", + "text": "In Godot Engine, follow to “Bottom Panel > Debugger > LimboAI” tab. With the LimboAI debugger, you can inspect any currently active behavior tree within the running project. The debugger can be detached from the main editor window, which can be particularly useful if you have a HiDPI or a secondary display.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Inspecting task properties and blackboard", + "text": "Inspecting task properties and blackboard", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "When you click on a task in the LimboAI debugger, its properties are shown in the remote Inspector panel, including the Blackboard reference. Click the Blackboard to open it and view all variables across the full scope chain, grouped by scope. You can also edit variable values live, which can be useful for testing and debugging your game’s AI.", + "text": "When you click on a task in the LimboAI debugger, its properties are shown in the remote Inspector panel, including the Blackboard reference. Click the Blackboard to open it and view all variables across the full scope chain, grouped by scope. You can also edit variable values live, which can be useful for testing and debugging your game’s AI.", + "markers": { + "1": "Blackboard", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Creating custom tasks", + "text": "Creating custom tasks", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "By default, user tasks should be placed in the <1/> directory. You can set an alternative location for user tasks in the <2/> (To see those options, <3/> should be enabled in the Project Settings).", + "text": "By default, user tasks should be placed in the directory. You can set an alternative location for user tasks in the (To see those options, should be enabled in the Project Settings).", + "markers": { + "1": "res://ai/tasks", + "2": "Project Settings → Limbo AI", + "3": "Advanced Settings" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Each subdirectory within the user tasks directory is treated as a category. Therefore, if you create a subdirectory named “motion_and_physics,” your custom tasks in that directory will automatically be categorized under “Motion And Physics.”", + "text": "Each subdirectory within the user tasks directory is treated as a category. Therefore, if you create a subdirectory named “motion_and_physics,” your custom tasks in that directory will automatically be categorized under “Motion And Physics.”", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "When creating custom tasks, extend one of the following base classes: BTAction, BTCondition, BTDecorator, BTComposite. More on task types you can read in the Introduction to Behavior Trees.", + "text": "When creating custom tasks, extend one of the following base classes: BTAction, BTCondition, BTDecorator, BTComposite. More on task types you can read in the Introduction to Behavior Trees.", + "markers": { + "1": "BTAction", + "2": "BTCondition", + "3": "BTDecorator", + "4": "BTComposite", + "5": "Introduction to Behavior Trees" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "🛈 Note: To help you write new tasks, you can add a script template to your project using “Misc → Create script template” menu option.", + "text": "🛈 Note: To help you write new tasks, you can add a script template to your project using “Misc → Create script template” menu option.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Using the Blackboard is covered in Accessing the Blackboard in a Task.", + "text": "Using the Blackboard is covered in Accessing the Blackboard in a Task.", + "markers": { + "1": "Blackboard", + "2": "Accessing the Blackboard in a Task" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Task anatomy", + "text": "Task anatomy", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Example 1: A simple action", + "text": "Example 1: A simple action", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Example 2: InRange condition", + "text": "Example 2: InRange condition", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Creating tasks in C#", + "text": "Creating tasks in C#", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You can use the following script template for custom tasks:", + "text": "You can use the following script template for custom tasks:", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Sharing data using Blackboard", + "text": "Sharing data using Blackboard", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "To share data between different tasks and states, we employ a feature known as the Blackboard. The Blackboard serves as a central repository where tasks and states can store and retrieve named variables, allowing for seamless data interchange. Each instance of a behavior tree or a state machine gets its own dedicated Blackboard. It has the capability to store various data types, including objects and resources.", + "text": "To share data between different tasks and states, we employ a feature known as the Blackboard. The Blackboard serves as a central repository where tasks and states can store and retrieve named variables, allowing for seamless data interchange. Each instance of a behavior tree or a state machine gets its own dedicated Blackboard. It has the capability to store various data types, including objects and resources.", + "markers": { + "1": "Blackboard", + "2": "Blackboard", + "3": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Using the Blackboard, you can easily share data in your behavior trees, making the tasks in the behavior tree more flexible.", + "text": "Using the Blackboard, you can easily share data in your behavior trees, making the tasks in the behavior tree more flexible.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Accessing the Blackboard in a Task", + "text": "Accessing the Blackboard in a Task", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Every BTTask has access to the Blackboard, providing a straightforward mechanism for data exchange. Here’s an example of how you can interact with the Blackboard in GDScript:", + "text": "Every BTTask has access to the Blackboard, providing a straightforward mechanism for data exchange. Here’s an example of how you can interact with the Blackboard in GDScript:", + "markers": { + "1": "BTTask", + "2": "Blackboard", + "3": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If you are accessing a variable that holds an object instance, and it is expected that the instance may be null or freed, you can do it like this:", + "text": "If you are accessing a variable that holds an object instance, and it is expected that the instance may be null or freed, you can do it like this:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "It is recommended to suffix variable name properties with <1/>, like in the example above, which enables the inspector to provide a more convenient property editor for the variable. This editor allows you to select or add the variable to the blackboard plan, and provides a warning icon if the variable does not exist in the blackboard plan.", + "text": "It is recommended to suffix variable name properties with , like in the example above, which enables the inspector to provide a more convenient property editor for the variable. This editor allows you to select or add the variable to the blackboard plan, and provides a warning icon if the variable does not exist in the blackboard plan.", + "markers": { + "1": "_var" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "🛈 Note: The variable doesn’t need to exist when you set it in code.", + "text": "🛈 Note: The variable doesn’t need to exist when you set it in code.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Editing the Blackboard Plan", + "text": "Editing the Blackboard Plan", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The Blackboard Plan, associated with each BehaviorTree resource, dictates how the Blackboard initializes for each new instance of the BehaviorTree. BlackboardPlan resource stores default values, type information, and data bindings necessary for BehaviorTree initialization.", + "text": "The Blackboard Plan, associated with each BehaviorTree resource, dictates how the Blackboard initializes for each new instance of the BehaviorTree. BlackboardPlan resource stores default values, type information, and data bindings necessary for BehaviorTree initialization.", + "markers": { + "1": "BehaviorTree", + "2": "Blackboard", + "3": "BehaviorTree", + "4": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "To add, modify, or remove variables from the Blackboard Plan, follow these steps:", + "text": "To add, modify, or remove variables from the Blackboard Plan, follow these steps:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Open the LimboAI editor and load the behavior tree you want to edit.", + "text": "Open the LimboAI editor and load the behavior tree you want to edit.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In the editor, click on the small button located inside the tab. This will open the BlackboardPlan in the Inspector.", + "text": "In the editor, click on the small button located inside the tab. This will open the BlackboardPlan in the Inspector.", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In the Inspector, click the “Manage…” button to show the blackboard plan editor.", + "text": "In the Inspector, click the “Manage…” button to show the blackboard plan editor.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In the blackboard plan editor, you can add, remove, or reorder variables, and modify their data type and hint.", + "text": "In the blackboard plan editor, you can add, remove, or reorder variables, and modify their data type and hint.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The hint provides additional information about the variable to the Inspector, such as minimum and maximum values for an integer variable. Learn more about property hints in the official Godot documentation.", + "text": "The hint provides additional information about the variable to the Inspector, such as minimum and maximum values for an integer variable. Learn more about property hints in the official Godot documentation.", + "markers": { + "1": "property hints in the official Godot documentation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You can specify the default values of the variables directly in the Inspector.", + "text": "You can specify the default values of the variables directly in the Inspector.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Overriding variables in BTPlayer", + "text": "Overriding variables in BTPlayer", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Each BTPlayer node also has a “Blackboard Plan” property, providing the ability to override values of the BehaviorTree’s blackboard variables. These overrides are specific to the BTPlayer’s scene and do not impact other scenes using the same BehaviorTree. To modify these values:", + "text": "Each BTPlayer node also has a “Blackboard Plan” property, providing the ability to override values of the BehaviorTree’s blackboard variables. These overrides are specific to the BTPlayer’s scene and do not impact other scenes using the same BehaviorTree. To modify these values:", + "markers": { + "1": "BTPlayer", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Select the BTPlayer node in the scene tree.", + "text": "Select the BTPlayer node in the scene tree.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In the Inspector, locate the “Blackboard Plan” property.", + "text": "In the Inspector, locate the “Blackboard Plan” property.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Override the desired values to tailor the blackboard variables for the specific scene.", + "text": "Override the desired values to tailor the blackboard variables for the specific scene.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Task parameters", + "text": "Task parameters", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In some cases, it can be beneficial to allow behavior tree tasks to export parameters that can either be bound to a blackboard variable or specified directly by the user. For this purpose, LimboAI provides special parameter types that begin with “BB”, such as BBInt, BBBool, BBString, BBFloat, BBNode, and more. For a complete list, please refer to the BBParam class reference.", + "text": "In some cases, it can be beneficial to allow behavior tree tasks to export parameters that can either be bound to a blackboard variable or specified directly by the user. For this purpose, LimboAI provides special parameter types that begin with “BB”, such as BBInt, BBBool, BBString, BBFloat, BBNode, and more. For a complete list, please refer to the BBParam class reference.", + "markers": { + "1": "BBInt", + "2": "BBBool", + "3": "BBString", + "4": "BBFloat", + "5": "BBNode", + "6": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Usage example:", + "text": "Usage example:", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Connecting variables in BTs to HSMs: Variable mapping", + "text": "Connecting variables in BTs to HSMs: Variable mapping", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Each BTState creates a new blackboard scope for its BehaviorTree instance. Because BehaviorTrees are reusable resources that can run in different contexts or on different agents, they do not automatically see variables defined in the HSM. At runtime, HSM variables are usually accessible inside the BT via the parent scope blackboard, but the recommended way to access them is through mapping.", + "text": "Each BTState creates a new blackboard scope for its BehaviorTree instance. Because BehaviorTrees are reusable resources that can run in different contexts or on different agents, they do not automatically see variables defined in the HSM. At runtime, HSM variables are usually accessible inside the BT via the parent scope blackboard, but the recommended way to access them is through mapping.", + "markers": { + "1": "BTState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note", + "text": "Note", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "To learn more about scopes, see Blackboard.", + "text": "To learn more about scopes, see Blackboard.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "When both the BehaviorTree and the HSM declare variables in their respective BlackboardPlan resources, the editor provides a Mapping section in the BlackboardPlan inspector. Mapping is the intended and recommended way to connect variables between related plans.", + "text": "When both the BehaviorTree and the HSM declare variables in their respective BlackboardPlan resources, the editor provides a Mapping section in the BlackboardPlan inspector. Mapping is the intended and recommended way to connect variables between related plans.", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Key points about mapping", + "text": "Key points about mapping", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Mapping connects two variables so they behave as a single logical variable at runtime.", + "text": "Mapping connects two variables so they behave as a single logical variable at runtime.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Linked variables are updated immediately in both scopes — they literally share the same state in memory (no polling or copying).", + "text": "Linked variables are updated immediately in both scopes — they literally share the same state in memory (no polling or copying).", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Mapping is explicit: you decide which variables the BT exposes as inputs and outputs.", + "text": "Mapping is explicit: you decide which variables the BT exposes as inputs and outputs.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Linkage is bidirectional — there is no distinction between input and output.", + "text": "Linkage is bidirectional — there is no distinction between input and output.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Mapping does not create new variables automatically — the variables must already exist in both blackboard plans before they can be linked.", + "text": "Mapping does not create new variables automatically — the variables must already exist in both blackboard plans before they can be linked.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Inspector workflow", + "text": "Inspector workflow", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Define the required variables in each BlackboardPlan (HSM plan and BT plan, for example).", + "text": "Define the required variables in each BlackboardPlan (HSM plan and BT plan, for example).", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Select the BTState node in the scene or a BTSubtree inside a behavior tree.", + "text": "Select the BTState node in the scene or a BTSubtree inside a behavior tree.", + "markers": { + "1": "BTState", + "2": "BTSubtree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In the Inspector, select the Blackboard Plan property.", + "text": "In the Inspector, select the Blackboard Plan property.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In the BlackboardPlan resource inspector, locate the Mapping section.", + "text": "In the BlackboardPlan resource inspector, locate the Mapping section.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Create mappings by pairing variables (<1/>).", + "text": "Create mappings by pairing variables ().", + "markers": { + "1": "BT variable ↔ parent variable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "On startup the mappings are applied, and the variables are automatically linked for the running instance.", + "text": "On startup the mappings are applied, and the variables are automatically linked for the running instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Programmatic alternative: linking variables in code", + "text": "Programmatic alternative: linking variables in code", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You can also link variables directly in code using Blackboard.link_var:", + "text": "You can also link variables directly in code using Blackboard.link_var:", + "markers": { + "1": "Blackboard.link_var" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Best practices", + "text": "Best practices", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Declare all BT dependencies in the BT’s BlackboardPlan instead of relying on parent scopes.", + "text": "Declare all BT dependencies in the BT’s BlackboardPlan instead of relying on parent scopes.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Use Mapping to explicitly declare which variables should be shared with the HSM.", + "text": "Use Mapping to explicitly declare which variables should be shared with the HSM.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Prefer the inspector-based Mapping workflow for clarity and editor support; use <1/> only when runtime or programmatic setup is required.", + "text": "Prefer the inspector-based Mapping workflow for clarity and editor support; use only when runtime or programmatic setup is required.", + "markers": { + "1": "link_var" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Avoid writing to <1/> from inside BT tasks unless you have a very specific reason and accept the coupling it introduces.", + "text": "Avoid writing to from inside BT tasks unless you have a very specific reason and accept the coupling it introduces.", + "markers": { + "1": "blackboard.get_parent()" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Advanced topic: Blackboard scopes", + "text": "Advanced topic: Blackboard scopes", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The Blackboard in LimboAI can act as a parent scope for another Blackboard. This means that if a specific variable is not found in the active scope, the system will look in the parent Blackboard to find it. This creates a “blackboard scope chain,” where each Blackboard can have its own parent scope, and there is no limit to how many blackboards can be in this chain. It’s important to note that the Blackboard doesn’t modify values in the parent scopes.", + "text": "The Blackboard in LimboAI can act as a parent scope for another Blackboard. This means that if a specific variable is not found in the active scope, the system will look in the parent Blackboard to find it. This creates a “blackboard scope chain,” where each Blackboard can have its own parent scope, and there is no limit to how many blackboards can be in this chain. It’s important to note that the Blackboard doesn’t modify values in the parent scopes.", + "markers": { + "1": "Blackboard", + "2": "Blackboard", + "3": "Blackboard", + "4": "Blackboard", + "5": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Scopes are created automatically to prevent naming collisions between contextually separate environments:", + "text": "Scopes are created automatically to prevent naming collisions between contextually separate environments:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Within BTNewScope.", + "text": "Within BTNewScope.", + "markers": { + "1": "BTNewScope" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Under BTSubtree decorators.", + "text": "Under BTSubtree decorators.", + "markers": { + "1": "BTSubtree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "With LimboState that have a non-empty blackboard plan defined.", + "text": "With LimboState that have a non-empty blackboard plan defined.", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Under LimboHSM nodes: A new scope is created at the root level, and each BTState child also receives its own separate scope.", + "text": "Under LimboHSM nodes: A new scope is created at the root level, and each BTState child also receives its own separate scope.", + "markers": { + "1": "LimboHSM", + "2": "BTState" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Sharing data between several agents", + "text": "Sharing data between several agents", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The blackboard scope mechanism can also be used for sharing data between several agents. In the following example, we have a group of agents, and we want to share a common target between them:", + "text": "The blackboard scope mechanism can also be used for sharing data between several agents. In the following example, we have a group of agents, and we want to share a common target between them:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In this example, blackboard.top() accesses the root scope of the Blackboard chain. We assign that scope to each agent in a group through code:", + "text": "In this example, blackboard.top() accesses the root scope of the Blackboard chain. We assign that scope to each agent in a group through code:", + "markers": { + "1": "blackboard.top()", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In conclusion, the Blackboard scope chain not only prevents naming conflicts that can occur between state machines, behavior trees, and sub-trees, but it can also be used to share data between several agents.", + "text": "In conclusion, the Blackboard scope chain not only prevents naming conflicts that can occur between state machines, behavior trees, and sub-trees, but it can also be used to share data between several agents.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Debugging blackboard variables", + "text": "Debugging blackboard variables", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "When debugging a running project, you can inspect Blackboard variables in the remote Inspector. Click on a task in the LimboAI debugger to view its properties, then click the Blackboard reference to see all variables across the full scope chain, grouped by scope. Variables can be edited live to aid in debugging. For state machines, select a LimboState node in the Remote Scene Tree to access its Blackboard in the same way.", + "text": "When debugging a running project, you can inspect Blackboard variables in the remote Inspector. Click on a task in the LimboAI debugger to view its properties, then click the Blackboard reference to see all variables across the full scope chain, grouped by scope. Variables can be edited live to aid in debugging. For state machines, select a LimboState node in the Remote Scene Tree to access its Blackboard in the same way.", + "markers": { + "1": "Blackboard", + "2": "Blackboard", + "3": "LimboState", + "4": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Accessing nodes in the scene tree", + "text": "Accessing nodes in the scene tree", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "There are several ways to access nodes in the agent’s scene tree from a BTTask.", + "text": "There are several ways to access nodes in the agent’s scene tree from a BTTask.", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "🛈 Note: The root node of the agent’s scene tree can be accessed with the scene_root property.", + "text": "🛈 Note: The root node of the agent’s scene tree can be accessed with the scene_root property.", + "markers": { + "1": "scene_root" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "With <1/> property", + "text": "With property", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "With <1/> property", + "text": "With property", + "markers": { + "1": "NodePath" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Using blackboard plan", + "text": "Using blackboard plan", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You can create a blackboard variable in the editor with the type <2/> and point it to the proper node in the BTPlayer blackboard plan. By default, any <4/> variable will be replaced with the node instance when the blackboard is instantiated at runtime (see BlackboardPlan.prefetch_nodepath_vars).", + "text": "You can create a blackboard variable in the editor with the type and point it to the proper node in the BTPlayer blackboard plan. By default, any variable will be replaced with the node instance when the blackboard is instantiated at runtime (see BlackboardPlan.prefetch_nodepath_vars).", + "markers": { + "1": "create a blackboard variable", + "2": "NodePath", + "3": "BTPlayer", + "4": "NodePath", + "5": "BlackboardPlan.prefetch_nodepath_vars" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The property BTPlayer.prefetch_nodepath_vars should be set to <1/>.", + "text": "The property BTPlayer.prefetch_nodepath_vars should be set to .", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Create State Machines", + "text": "Create State Machines", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "This guide will show how to set up and use a state machine using LimboHSM.", + "text": "This guide will show how to set up and use a state machine using LimboHSM.", + "markers": { + "1": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Initialization", + "text": "Initialization", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "To use the LimboHSM state machine, you first need to initialize it in your code. This is typically done in the <2/> function of your script. Here’s an example of how to do this:", + "text": "To use the LimboHSM state machine, you first need to initialize it in your code. This is typically done in the function of your script. Here’s an example of how to do this:", + "markers": { + "1": "LimboHSM", + "2": "_ready" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In this example, we first declare the state machine and the states we want to use. Then, in the <1/> function, we add transitions between the states. Finally, we initialize the state machine and set it to active.", + "text": "In this example, we first declare the state machine and the states we want to use. Then, in the function, we add transitions between the states. Finally, we initialize the state machine and set it to active.", + "markers": { + "1": "_init_state_machine" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "State example", + "text": "State example", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You can define the behavior of a state in a script and attach it to the state node. Here’s an example of a state that plays an animation on an <1/> and waits for it to finish:", + "text": "You can define the behavior of a state in a script and attach it to the state node. Here’s an example of a state that plays an animation on an and waits for it to finish:", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In this example, the <1/> method is called when the state is entered, and it plays the specified animation. The <2/> method is called every frame, and it checks if the animation is finished. If it is, it dispatches the <3/> event, which can result in a transition to the next state.", + "text": "In this example, the method is called when the state is entered, and it plays the specified animation. The method is called every frame, and it checks if the animation is finished. If it is, it dispatches the event, which can result in a transition to the next state.", + "markers": { + "1": "_enter", + "2": "_update", + "3": "EVENT_FINISHED" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Events and transitions", + "text": "Events and transitions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The LimboHSM comes with an event system that helps to decouple transitions from the state implementations. A transition is associated with a specific event, a starting state, and a destination state, and it is performed automatically when such an event is dispatched.", + "text": "The LimboHSM comes with an event system that helps to decouple transitions from the state implementations. A transition is associated with a specific event, a starting state, and a destination state, and it is performed automatically when such an event is dispatched.", + "markers": { + "1": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "To register a transition and associate it with a specific event, you can use the LimboHSM.add_transition method:", + "text": "To register a transition and associate it with a specific event, you can use the LimboHSM.add_transition method:", + "markers": { + "1": "LimboHSM.add_transition" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In this example, we’re registering a transition from the <1/> to the <2/> when the <3/> event is dispatched.", + "text": "In this example, we’re registering a transition from the to the when the event is dispatched.", + "markers": { + "1": "idle_state", + "2": "move_state", + "3": "movement_started" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A transition can be also associated with no particular starting state:", + "text": "A transition can be also associated with no particular starting state:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Events are dispatched with the LimboState.dispatch method. It’s important to note that this method can be called from anywhere in the state machine hierarchy and outside of it. Events are propagated from the leaf to the root state. This means that if an event is consumed by a state, it won’t be propagated to its parent states.", + "text": "Events are dispatched with the LimboState.dispatch method. It’s important to note that this method can be called from anywhere in the state machine hierarchy and outside of it. Events are propagated from the leaf to the root state. This means that if an event is consumed by a state, it won’t be propagated to its parent states.", + "markers": { + "1": "LimboState.dispatch" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "States can also define event handlers, which are methods that react to specific events. These event handlers typically don’t result in a state transition; they are simply a mechanism for states to react to particular events. You can use the LimboState.add_event_handler method to register event handlers in your states:", + "text": "States can also define event handlers, which are methods that react to specific events. These event handlers typically don’t result in a state transition; they are simply a mechanism for states to react to particular events. You can use the LimboState.add_event_handler method to register event handlers in your states:", + "markers": { + "1": "LimboState.add_event_handler" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If the event handler returns <1/>, the event will be considered as consumed, and it won’t propagate further or result in a state transition.", + "text": "If the event handler returns , the event will be considered as consumed, and it won’t propagate further or result in a state transition.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "State anatomy", + "text": "State anatomy", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Using behavior trees with state machines", + "text": "Using behavior trees with state machines", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The BTState is a specialized state node in LimboHSM that can host a behavior tree. When a BTState is active, it executes the hosted behavior tree each frame, effectively using the behavior tree as its implementation.", + "text": "The BTState is a specialized state node in LimboHSM that can host a behavior tree. When a BTState is active, it executes the hosted behavior tree each frame, effectively using the behavior tree as its implementation.", + "markers": { + "1": "BTState", + "2": "LimboHSM", + "3": "BTState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "This allows you to combine the power of behavior trees with the structure and control of state machines. Behavior trees are excellent for defining complex, hierarchical behaviors, while state machines are great for managing the flow and transitions between different behaviors.", + "text": "This allows you to combine the power of behavior trees with the structure and control of state machines. Behavior trees are excellent for defining complex, hierarchical behaviors, while state machines are great for managing the flow and transitions between different behaviors.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Once the LimboHSM has been created, a BTState can be created for a given LimboHSM:", + "text": "Once the LimboHSM has been created, a BTState can be created for a given LimboHSM:", + "markers": { + "1": "LimboHSM", + "2": "BTState", + "3": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Single-file state machine setup", + "text": "Single-file state machine setup", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "In certain scenarios, such as prototyping or during game jams, it’s practical to keep the state machine code in a single file. For such cases, LimboHSM supports delegation and provides chained methods for easier setup. Let’s illustrate this with a practical code example:", + "text": "In certain scenarios, such as prototyping or during game jams, it’s practical to keep the state machine code in a single file. For such cases, LimboHSM supports delegation and provides chained methods for easier setup. Let’s illustrate this with a practical code example:", + "markers": { + "1": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "Important classes", + "text": "Important classes", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "There are a lot of classes introduced in LimboAI. Here is a list of the most important ones you should know about:", + "text": "There are a lot of classes introduced in LimboAI. Here is a list of the most important ones you should know about:", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BT", + "text": "Inherits: BT", + "markers": { + "1": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTAction, BTComment, BTComposite, BTCondition, BTDecorator", + "text": "Inherited By: BTAction, BTComment, BTComposite, BTCondition, BTDecorator", + "markers": { + "1": "BTAction", + "2": "BTComment", + "3": "BTComposite", + "4": "BTCondition", + "5": "BTDecorator" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for all BehaviorTree tasks.", + "text": "Base class for all BehaviorTree tasks.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for all BehaviorTree tasks. A task is a basic building block in a BehaviorTree that represents a specific behavior or control flow. Tasks are used to create complex behaviors by combining and nesting them in a hierarchy.", + "text": "Base class for all BehaviorTree tasks. A task is a basic building block in a BehaviorTree that represents a specific behavior or control flow. Tasks are used to create complex behaviors by combining and nesting them in a hierarchy.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A task can be one of the following types: action, condition, composite, or decorator. Each type of task has its own corresponding subclass: BTAction, BTCondition, BTDecorator, BTComposite.", + "text": "A task can be one of the following types: action, condition, composite, or decorator. Each type of task has its own corresponding subclass: BTAction, BTCondition, BTDecorator, BTComposite.", + "markers": { + "1": "BTAction", + "2": "BTCondition", + "3": "BTDecorator", + "4": "BTComposite" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Tasks perform their work and return their status using the _tick method. Status values are defined in Status. Tasks can be initialized using the _setup method. See also _enter & _exit.", + "text": "Tasks perform their work and return their status using the _tick method. Status values are defined in Status. Tasks can be initialized using the _setup method. See also _enter & _exit.", + "markers": { + "1": "_tick", + "2": "Status", + "3": "_setup", + "4": "_enter", + "5": "_exit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: Do not extend BTTask directly for your own tasks. Instead, extend one of the subtypes mentioned above.", + "text": "Note: Do not extend BTTask directly for your own tasks. Instead, extend one of the subtypes mentioned above.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "agent", + "text": "agent", + "markers": { + "1": "agent" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "agent", + "text": "agent", + "markers": { + "1": "agent" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blackboard", + "text": "blackboard", + "markers": { + "1": "blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blackboard", + "text": "blackboard", + "markers": { + "1": "blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "custom_name", + "text": "custom_name", + "markers": { + "1": "custom_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "custom_name", + "text": "custom_name", + "markers": { + "1": "custom_name" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "elapsed_time", + "text": "elapsed_time", + "markers": { + "1": "elapsed_time" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "elapsed_time", + "text": "elapsed_time", + "markers": { + "1": "elapsed_time" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "scene_root", + "text": "scene_root", + "markers": { + "1": "scene_root" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "scene_root", + "text": "scene_root", + "markers": { + "1": "scene_root" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "status", + "text": "status", + "markers": { + "1": "status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "status", + "text": "status", + "markers": { + "1": "status" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_enter() <2/>", + "text": "_enter() ", + "markers": { + "1": "_enter", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_enter() <2/>", + "text": "_enter() ", + "markers": { + "1": "_enter", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_exit() <2/>", + "text": "_exit() ", + "markers": { + "1": "_exit", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_exit() <2/>", + "text": "_exit() ", + "markers": { + "1": "_exit", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_generate_name() <2/> <3/>", + "text": "_generate_name() ", + "markers": { + "1": "_generate_name", + "2": "virtual", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_generate_name() <2/> <3/>", + "text": "_generate_name() ", + "markers": { + "1": "_generate_name", + "2": "virtual", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_get_configuration_warnings() <2/> <3/>", + "text": "_get_configuration_warnings() ", + "markers": { + "1": "_get_configuration_warnings", + "2": "virtual", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_get_configuration_warnings() <2/> <3/>", + "text": "_get_configuration_warnings() ", + "markers": { + "1": "_get_configuration_warnings", + "2": "virtual", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_setup() <2/>", + "text": "_setup() ", + "markers": { + "1": "_setup", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_setup() <2/>", + "text": "_setup() ", + "markers": { + "1": "_setup", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_tick(delta: <2/>) <3/>", + "text": "_tick(delta: ) ", + "markers": { + "1": "_tick", + "2": "float", + "3": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_tick(delta: <2/>) <3/>", + "text": "_tick(delta: ) ", + "markers": { + "1": "_tick", + "2": "float", + "3": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "abort()", + "text": "abort()", + "markers": { + "1": "abort" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "abort()", + "text": "abort()", + "markers": { + "1": "abort" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "add_child(task: BTTask)", + "text": "add_child(task: BTTask)", + "markers": { + "1": "add_child", + "2": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "add_child(task: BTTask)", + "text": "add_child(task: BTTask)", + "markers": { + "1": "add_child", + "2": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "add_child_at_index(task: BTTask, idx: <3/>)", + "text": "add_child_at_index(task: BTTask, idx: )", + "markers": { + "1": "add_child_at_index", + "2": "BTTask", + "3": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "add_child_at_index(task: BTTask, idx: <3/>)", + "text": "add_child_at_index(task: BTTask, idx: )", + "markers": { + "1": "add_child_at_index", + "2": "BTTask", + "3": "int" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "clone() <2/>", + "text": "clone() ", + "markers": { + "1": "clone", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "clone() <2/>", + "text": "clone() ", + "markers": { + "1": "clone", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "editor_get_behavior_tree()", + "text": "editor_get_behavior_tree()", + "markers": { + "1": "editor_get_behavior_tree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "editor_get_behavior_tree()", + "text": "editor_get_behavior_tree()", + "markers": { + "1": "editor_get_behavior_tree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "execute(delta: <2/>)", + "text": "execute(delta: )", + "markers": { + "1": "execute", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "execute(delta: <2/>)", + "text": "execute(delta: )", + "markers": { + "1": "execute", + "2": "float" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_child(idx: <2/>) <3/>", + "text": "get_child(idx: ) ", + "markers": { + "1": "get_child", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_child(idx: <2/>) <3/>", + "text": "get_child(idx: ) ", + "markers": { + "1": "get_child", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_child_count() <2/>", + "text": "get_child_count() ", + "markers": { + "1": "get_child_count", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_child_count() <2/>", + "text": "get_child_count() ", + "markers": { + "1": "get_child_count", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_child_count_excluding_comments() <2/>", + "text": "get_child_count_excluding_comments() ", + "markers": { + "1": "get_child_count_excluding_comments", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_child_count_excluding_comments() <2/>", + "text": "get_child_count_excluding_comments() ", + "markers": { + "1": "get_child_count_excluding_comments", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_index() <2/>", + "text": "get_index() ", + "markers": { + "1": "get_index", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_index() <2/>", + "text": "get_index() ", + "markers": { + "1": "get_index", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_parent() <2/>", + "text": "get_parent() ", + "markers": { + "1": "get_parent", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_parent() <2/>", + "text": "get_parent() ", + "markers": { + "1": "get_parent", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_root() <2/>", + "text": "get_root() ", + "markers": { + "1": "get_root", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_root() <2/>", + "text": "get_root() ", + "markers": { + "1": "get_root", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_task_name()", + "text": "get_task_name()", + "markers": { + "1": "get_task_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_task_name()", + "text": "get_task_name()", + "markers": { + "1": "get_task_name" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "has_child(task: BTTask) <3/>", + "text": "has_child(task: BTTask) ", + "markers": { + "1": "has_child", + "2": "BTTask", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "has_child(task: BTTask) <3/>", + "text": "has_child(task: BTTask) ", + "markers": { + "1": "has_child", + "2": "BTTask", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>)", + "text": "initialize(agent: , blackboard: Blackboard, scene_root: )", + "markers": { + "1": "initialize", + "2": "Node", + "3": "Blackboard", + "4": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>)", + "text": "initialize(agent: , blackboard: Blackboard, scene_root: )", + "markers": { + "1": "initialize", + "2": "Node", + "3": "Blackboard", + "4": "Node" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "is_descendant_of(task: BTTask) <3/>", + "text": "is_descendant_of(task: BTTask) ", + "markers": { + "1": "is_descendant_of", + "2": "BTTask", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "is_descendant_of(task: BTTask) <3/>", + "text": "is_descendant_of(task: BTTask) ", + "markers": { + "1": "is_descendant_of", + "2": "BTTask", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "is_root() <2/>", + "text": "is_root() ", + "markers": { + "1": "is_root", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "is_root() <2/>", + "text": "is_root() ", + "markers": { + "1": "is_root", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "next_sibling() <2/>", + "text": "next_sibling() ", + "markers": { + "1": "next_sibling", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "next_sibling() <2/>", + "text": "next_sibling() ", + "markers": { + "1": "next_sibling", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "print_tree(initial_tabs: <2/> = 0)", + "text": "print_tree(initial_tabs: = 0)", + "markers": { + "1": "print_tree", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "print_tree(initial_tabs: <2/> = 0)", + "text": "print_tree(initial_tabs: = 0)", + "markers": { + "1": "print_tree", + "2": "int" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "remove_child(task: BTTask)", + "text": "remove_child(task: BTTask)", + "markers": { + "1": "remove_child", + "2": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "remove_child(task: BTTask)", + "text": "remove_child(task: BTTask)", + "markers": { + "1": "remove_child", + "2": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "remove_child_at_index(idx: <2/>)", + "text": "remove_child_at_index(idx: )", + "markers": { + "1": "remove_child_at_index", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "remove_child_at_index(idx: <2/>)", + "text": "remove_child_at_index(idx: )", + "markers": { + "1": "remove_child_at_index", + "2": "int" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> agent 🔗", + "text": " agent 🔗", + "markers": { + "1": "Node", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_agent(value: <2/>)", + "text": " set_agent(value: )", + "markers": { + "1": "void", + "2": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_agent()", + "text": " get_agent()", + "markers": { + "1": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The agent is the contextual object for the BehaviorTree instance. This is usually the parent of the BTPlayer node that utilizes the BehaviorTree resource.", + "text": "The agent is the contextual object for the BehaviorTree instance. This is usually the parent of the BTPlayer node that utilizes the BehaviorTree resource.", + "markers": { + "1": "BehaviorTree", + "2": "BTPlayer", + "3": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard blackboard 🔗", + "text": "Blackboard blackboard 🔗", + "markers": { + "1": "Blackboard", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard get_blackboard()", + "text": "Blackboard get_blackboard()", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Provides access to the Blackboard. Blackboard is used to share data among tasks of the associated BehaviorTree.", + "text": "Provides access to the Blackboard. Blackboard is used to share data among tasks of the associated BehaviorTree.", + "markers": { + "1": "Blackboard", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "See Blackboard for additional info.", + "text": "See Blackboard for additional info.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> custom_name = <2/> 🔗", + "text": " custom_name = 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_custom_name(value: <2/>)", + "text": " set_custom_name(value: )", + "markers": { + "1": "void", + "2": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_custom_name()", + "text": " get_custom_name()", + "markers": { + "1": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "User-provided name for the task. If not empty, it is used by the editor to represent the task. See get_task_name.", + "text": "User-provided name for the task. If not empty, it is used by the editor to represent the task. See get_task_name.", + "markers": { + "1": "get_task_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> elapsed_time 🔗", + "text": " elapsed_time 🔗", + "markers": { + "1": "float", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_elapsed_time()", + "text": " get_elapsed_time()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Elapsed time since the task was “entered”. See _enter.", + "text": "Elapsed time since the task was “entered”. See _enter.", + "markers": { + "1": "_enter" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> when task is not <2/>.", + "text": "Returns when task is not .", + "markers": { + "1": "0", + "2": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> scene_root 🔗", + "text": " scene_root 🔗", + "markers": { + "1": "Node", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_scene_root()", + "text": " get_scene_root()", + "markers": { + "1": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Root node of the scene the behavior tree is used in (e.g., the owner of the BTPlayer node). Can be uses to retrieve <2/> references.", + "text": "Root node of the scene the behavior tree is used in (e.g., the owner of the BTPlayer node). Can be uses to retrieve references.", + "markers": { + "1": "BTPlayer", + "2": "NodePath" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Example:", + "text": "Example:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status status 🔗", + "text": "Status status 🔗", + "markers": { + "1": "Status", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status get_status()", + "text": "Status get_status()", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Last execution Status returned by _tick.", + "text": "Last execution Status returned by _tick.", + "markers": { + "1": "Status", + "2": "_tick" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _enter() <2/> 🔗", + "text": " _enter() 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called when task is “entered”, i.e. when task is executed while not having a <1/> status.", + "text": "Called when task is “entered”, i.e. when task is executed while not having a status.", + "markers": { + "1": "RUNNING", + "2": "status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "It is called before _tick in the execution order. This method is used when preparation is needed before main work begins, usually when it takes more than one tick to finish the task. See also execute.", + "text": "It is called before _tick in the execution order. This method is used when preparation is needed before main work begins, usually when it takes more than one tick to finish the task. See also execute.", + "markers": { + "1": "_tick", + "2": "execute" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _exit() <2/> 🔗", + "text": " _exit() 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called when task is “exited”, i.e. after _tick returns <2/> or <3/> status. See also execute.", + "text": "Called when task is “exited”, i.e. after _tick returns or status. See also execute.", + "markers": { + "1": "_tick", + "2": "SUCCESS", + "3": "FAILURE", + "4": "execute" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _generate_name() <2/> <3/> 🔗", + "text": " _generate_name() 🔗", + "markers": { + "1": "String", + "2": "virtual", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called to generate a display name for the task unless custom_name is set. See get_task_name.", + "text": "Called to generate a display name for the task unless custom_name is set. See get_task_name.", + "markers": { + "1": "custom_name", + "2": "get_task_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _get_configuration_warnings() <2/> <3/> 🔗", + "text": " _get_configuration_warnings() 🔗", + "markers": { + "1": "PackedStringArray", + "2": "virtual", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The string returned by this method is shown as a warning message in the behavior tree editor. Any task script that overrides this method must include <1/> annotation at the top of the file.", + "text": "The string returned by this method is shown as a warning message in the behavior tree editor. Any task script that overrides this method must include annotation at the top of the file.", + "markers": { + "1": "@tool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _setup() <2/> 🔗", + "text": " _setup() 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called to initialize a task during initialization step. It is called only once before the task’s first execution tick. This method allows you to set up any necessary state or configurations for the task before it begins executing.", + "text": "Called to initialize a task during initialization step. It is called only once before the task’s first execution tick. This method allows you to set up any necessary state or configurations for the task before it begins executing.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status _tick(delta: <2/>) <3/> 🔗", + "text": "Status _tick(delta: ) 🔗", + "markers": { + "1": "Status", + "2": "float", + "3": "virtual", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called when task is “ticked”, i.e. executed by BTPlayer or BTState during an update.", + "text": "Called when task is “ticked”, i.e. executed by BTPlayer or BTState during an update.", + "markers": { + "1": "BTPlayer", + "2": "BTState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns execution status as defined in Status.", + "text": "Returns execution status as defined in Status.", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: Tasks perform their main function by implementing this method.", + "text": "Note: Tasks perform their main function by implementing this method.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> abort() 🔗", + "text": " abort() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Resets the task and its children recursively. If a task is in the <1/> state, it is exited and its status is reset to <2/>.", + "text": "Resets the task and its children recursively. If a task is in the state, it is exited and its status is reset to .", + "markers": { + "1": "RUNNING", + "2": "FRESH" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> add_child(task: BTTask) 🔗", + "text": " add_child(task: BTTask) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Adds a child task. The <1/> is placed at the end of the children list.", + "text": "Adds a child task. The is placed at the end of the children list.", + "markers": { + "1": "task" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> add_child_at_index(task: BTTask, idx: <3/>) 🔗", + "text": " add_child_at_index(task: BTTask, idx: ) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "int", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Adds a child task. The <1/> is placed at <2/> position in the children list.", + "text": "Adds a child task. The is placed at position in the children list.", + "markers": { + "1": "task", + "2": "idx" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask clone() <2/> 🔗", + "text": "BTTask clone() 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Duplicates the task and its children, copying the exported members. Sub-resources are shared for efficiency, except for BBParam subtypes, which are always copied. Used by the editor to instantiate BehaviorTree and copy-paste tasks.", + "text": "Duplicates the task and its children, copying the exported members. Sub-resources are shared for efficiency, except for BBParam subtypes, which are always copied. Used by the editor to instantiate BehaviorTree and copy-paste tasks.", + "markers": { + "1": "BBParam", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree editor_get_behavior_tree() 🔗", + "text": "BehaviorTree editor_get_behavior_tree() 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the behavior tree that owns this task. This is only available in the editor.", + "text": "Returns the behavior tree that owns this task. This is only available in the editor.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status execute(delta: <2/>) 🔗", + "text": "Status execute(delta: ) 🔗", + "markers": { + "1": "Status", + "2": "float", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Performs task’s execution. The execution follows a specific sequence:", + "text": "Performs task’s execution. The execution follows a specific sequence:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If task’s current status is not <2/>, the _enter method is called first.", + "text": "If task’s current status is not , the _enter method is called first.", + "markers": { + "1": "status", + "2": "RUNNING", + "3": "_enter" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Next, the _tick method is called next to perform the task’s work.", + "text": "Next, the _tick method is called next to perform the task’s work.", + "markers": { + "1": "_tick" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If the _tick method returns <2/> or <3/> status, the _exit method will be called next as part of the execution cleanup.", + "text": "If the _tick method returns or status, the _exit method will be called next as part of the execution cleanup.", + "markers": { + "1": "_tick", + "2": "SUCCESS", + "3": "FAILURE", + "4": "_exit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask get_child(idx: <2/>) <3/> 🔗", + "text": "BTTask get_child(idx: ) 🔗", + "markers": { + "1": "BTTask", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns a child task by specifying its index.", + "text": "Returns a child task by specifying its index.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_child_count() <2/> 🔗", + "text": " get_child_count() 🔗", + "markers": { + "1": "int", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the number of child tasks.", + "text": "Returns the number of child tasks.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_child_count_excluding_comments() <2/> 🔗", + "text": " get_child_count_excluding_comments() 🔗", + "markers": { + "1": "int", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the number of child tasks not counting BTComment tasks.", + "text": "Returns the number of child tasks not counting BTComment tasks.", + "markers": { + "1": "BTComment" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_index() <2/> 🔗", + "text": " get_index() 🔗", + "markers": { + "1": "int", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the task’s position in the behavior tree branch. Returns <1/> if the task doesn’t belong to a task tree, i.e. doesn’t have a parent.", + "text": "Returns the task’s position in the behavior tree branch. Returns if the task doesn’t belong to a task tree, i.e. doesn’t have a parent.", + "markers": { + "1": "-1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask get_parent() <2/> 🔗", + "text": "BTTask get_parent() 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the task’s parent.", + "text": "Returns the task’s parent.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask get_root() <2/> 🔗", + "text": "BTTask get_root() 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the root task of the behavior tree.", + "text": "Returns the root task of the behavior tree.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_task_name() 🔗", + "text": " get_task_name() 🔗", + "markers": { + "1": "String", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The string returned by this method is used to represent the task in the editor.", + "text": "The string returned by this method is used to represent the task in the editor.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Method _generate_name is called to generate a display name for the task unless custom_name is set.", + "text": "Method _generate_name is called to generate a display name for the task unless custom_name is set.", + "markers": { + "1": "_generate_name", + "2": "custom_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> has_child(task: BTTask) <3/> 🔗", + "text": " has_child(task: BTTask) 🔗", + "markers": { + "1": "bool", + "2": "BTTask", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if <2/> is a child of this task.", + "text": "Returns if is a child of this task.", + "markers": { + "1": "true", + "2": "task" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>) 🔗", + "text": " initialize(agent: , blackboard: Blackboard, scene_root: ) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Initilizes the task. Assigns agent and blackboard, and calls _setup for the task and its children.", + "text": "Initilizes the task. Assigns agent and blackboard, and calls _setup for the task and its children.", + "markers": { + "1": "agent", + "2": "blackboard", + "3": "_setup" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The method is called recursively for each child task. <1/> should be the root node of the scene the behavior tree is used in (e.g., the owner of the node that contains the behavior tree).", + "text": "The method is called recursively for each child task. should be the root node of the scene the behavior tree is used in (e.g., the owner of the node that contains the behavior tree).", + "markers": { + "1": "scene_root" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_descendant_of(task: BTTask) <3/> 🔗", + "text": " is_descendant_of(task: BTTask) 🔗", + "markers": { + "1": "bool", + "2": "BTTask", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if this task is a descendant of <2/>. In other words, this task must be a child of <3/> or one of its children or grandchildren.", + "text": "Returns if this task is a descendant of . In other words, this task must be a child of or one of its children or grandchildren.", + "markers": { + "1": "true", + "2": "task", + "3": "task" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_root() <2/> 🔗", + "text": " is_root() 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if this task is the root task of its behavior tree. A behavior tree can have only one root task.", + "text": "Returns if this task is the root task of its behavior tree. A behavior tree can have only one root task.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask next_sibling() <2/> 🔗", + "text": "BTTask next_sibling() 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the next task after this task in the parent’s children list.", + "text": "Returns the next task after this task in the parent’s children list.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if this task has no parent or it is the last child in the parent’s children list.", + "text": "Returns if this task has no parent or it is the last child in the parent’s children list.", + "markers": { + "1": "null" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> print_tree(initial_tabs: <2/> = 0) 🔗", + "text": " print_tree(initial_tabs: = 0) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Prints the subtree that starts with this task to the console.", + "text": "Prints the subtree that starts with this task to the console.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> remove_child(task: BTTask) 🔗", + "text": " remove_child(task: BTTask) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Removes <1/> from children.", + "text": "Removes from children.", + "markers": { + "1": "task" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> remove_child_at_index(idx: <2/>) 🔗", + "text": " remove_child_at_index(idx: ) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Removes a child task at a specified index from children.", + "text": "Removes a child task at a specified index from children.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "BTPlayer", + "text": "BTPlayer", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Player of BehaviorTree resources.", + "text": "Player of BehaviorTree resources.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTPlayer node is used to instantiate and play BehaviorTree resources at runtime. During initialization, the behavior tree instance is given references to the agent, the blackboard, and the current scene root. The agent can be specified by the agent_node property (defaults to the BTPlayer’s parent node).", + "text": "BTPlayer node is used to instantiate and play BehaviorTree resources at runtime. During initialization, the behavior tree instance is given references to the agent, the blackboard, and the current scene root. The agent can be specified by the agent_node property (defaults to the BTPlayer’s parent node).", + "markers": { + "1": "BehaviorTree", + "2": "blackboard", + "3": "agent_node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "For an introduction to behavior trees, see BehaviorTree.", + "text": "For an introduction to behavior trees, see BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "active", + "text": "active", + "markers": { + "1": "active" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "active", + "text": "active", + "markers": { + "1": "active" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "agent_node", + "text": "agent_node", + "markers": { + "1": "agent_node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "agent_node", + "text": "agent_node", + "markers": { + "1": "agent_node" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "behavior_tree", + "text": "behavior_tree", + "markers": { + "1": "behavior_tree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "behavior_tree", + "text": "behavior_tree", + "markers": { + "1": "behavior_tree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blackboard", + "text": "blackboard", + "markers": { + "1": "blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blackboard", + "text": "blackboard", + "markers": { + "1": "blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "monitor_performance", + "text": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "monitor_performance", + "text": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "UpdateMode", + "text": "UpdateMode", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode", + "text": "UpdateMode", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "update_mode", + "text": "update_mode", + "markers": { + "1": "update_mode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "update_mode", + "text": "update_mode", + "markers": { + "1": "update_mode" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": { + "1": "BTInstance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": { + "1": "BTInstance" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_bt_instance()", + "text": "get_bt_instance()", + "markers": { + "1": "get_bt_instance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_bt_instance()", + "text": "get_bt_instance()", + "markers": { + "1": "get_bt_instance" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "restart()", + "text": "restart()", + "markers": { + "1": "restart" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "restart()", + "text": "restart()", + "markers": { + "1": "restart" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_bt_instance(bt_instance: BTInstance)", + "text": "set_bt_instance(bt_instance: BTInstance)", + "markers": { + "1": "set_bt_instance", + "2": "BTInstance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_bt_instance(bt_instance: BTInstance)", + "text": "set_bt_instance(bt_instance: BTInstance)", + "markers": { + "1": "set_bt_instance", + "2": "BTInstance" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_scene_root_hint(scene_root: <2/>)", + "text": "set_scene_root_hint(scene_root: )", + "markers": { + "1": "set_scene_root_hint", + "2": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_scene_root_hint(scene_root: <2/>)", + "text": "set_scene_root_hint(scene_root: )", + "markers": { + "1": "set_scene_root_hint", + "2": "Node" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "update(delta: <2/>)", + "text": "update(delta: )", + "markers": { + "1": "update", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "update(delta: <2/>)", + "text": "update(delta: )", + "markers": { + "1": "update", + "2": "float" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Signals", + "text": "Signals", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "behavior_tree_finished(status: <1/>) 🔗", + "text": "behavior_tree_finished(status: ) 🔗", + "markers": { + "1": "int", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Deprecated: Use updated signal instead.", + "text": "Deprecated: Use updated signal instead.", + "markers": { + "1": "updated" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the behavior tree has finished executing and returned <1/> or <2/>.", + "text": "Emitted when the behavior tree has finished executing and returned or .", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Argument <1/> holds the status returned by the behavior tree. See Status.", + "text": "Argument holds the status returned by the behavior tree. See Status.", + "markers": { + "1": "status", + "2": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "updated(status: <1/>) 🔗", + "text": "updated(status: ) 🔗", + "markers": { + "1": "int", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when BTPlayer has finished the behavior tree update.", + "text": "Emitted when BTPlayer has finished the behavior tree update.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Argument <1/> holds the status returned by the behavior tree. See Status.", + "text": "Argument holds the status returned by the behavior tree. See Status.", + "markers": { + "1": "status", + "2": "Status" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Enumerations", + "text": "Enumerations", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "enum UpdateMode: 🔗", + "text": "enum UpdateMode: 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode IDLE = <2/>", + "text": "UpdateMode IDLE = ", + "markers": { + "1": "UpdateMode", + "2": "0" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Execute behavior tree during the idle process.", + "text": "Execute behavior tree during the idle process.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode PHYSICS = <2/>", + "text": "UpdateMode PHYSICS = ", + "markers": { + "1": "UpdateMode", + "2": "1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Execute behavior tree during the physics process.", + "text": "Execute behavior tree during the physics process.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode MANUAL = <2/>", + "text": "UpdateMode MANUAL = ", + "markers": { + "1": "UpdateMode", + "2": "2" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior tree is executed manually by calling update.", + "text": "Behavior tree is executed manually by calling update.", + "markers": { + "1": "update" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> active = <2/> 🔗", + "text": " active = 🔗", + "markers": { + "1": "bool", + "2": "true", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_active(value: <2/>)", + "text": " set_active(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_active()", + "text": " get_active()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, the behavior tree will be executed during update.", + "text": "If , the behavior tree will be executed during update.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> agent_node = <2/> 🔗", + "text": " agent_node = 🔗", + "markers": { + "1": "NodePath", + "2": "NodePath(\"..\")", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_agent_node(value: <2/>)", + "text": " set_agent_node(value: )", + "markers": { + "1": "void", + "2": "NodePath" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_agent_node()", + "text": " get_agent_node()", + "markers": { + "1": "NodePath" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Path to the node that will be used as the agent. Setting it after instantiation will have no effect.", + "text": "Path to the node that will be used as the agent. Setting it after instantiation will have no effect.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree behavior_tree 🔗", + "text": "BehaviorTree behavior_tree 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_behavior_tree(value: BehaviorTree)", + "text": " set_behavior_tree(value: BehaviorTree)", + "markers": { + "1": "void", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree get_behavior_tree()", + "text": "BehaviorTree get_behavior_tree()", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree resource to instantiate and execute at runtime.", + "text": "BehaviorTree resource to instantiate and execute at runtime.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard blackboard 🔗", + "text": "Blackboard blackboard 🔗", + "markers": { + "1": "Blackboard", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_blackboard(value: Blackboard)", + "text": " set_blackboard(value: Blackboard)", + "markers": { + "1": "void", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard get_blackboard()", + "text": "Blackboard get_blackboard()", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Holds data shared by the behavior tree tasks. See Blackboard.", + "text": "Holds data shared by the behavior tree tasks. See Blackboard.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan blackboard_plan 🔗", + "text": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_blackboard_plan(value: BlackboardPlan)", + "text": " set_blackboard_plan(value: BlackboardPlan)", + "markers": { + "1": "void", + "2": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan get_blackboard_plan()", + "text": "BlackboardPlan get_blackboard_plan()", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "text": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> monitor_performance = <2/> 🔗", + "text": " monitor_performance = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_monitor_performance(value: <2/>)", + "text": " set_monitor_performance(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_monitor_performance()", + "text": " get_monitor_performance()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTPlayer node.", + "text": "If , adds a performance monitor to “Debugger->Monitors” for each instance of this BTPlayer node.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode update_mode = <2/> 🔗", + "text": "UpdateMode update_mode = 🔗", + "markers": { + "1": "UpdateMode", + "2": "1", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_update_mode(value: UpdateMode)", + "text": " set_update_mode(value: UpdateMode)", + "markers": { + "1": "void", + "2": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode get_update_mode()", + "text": "UpdateMode get_update_mode()", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Determines when the behavior tree is executed. See UpdateMode.", + "text": "Determines when the behavior tree is executed. See UpdateMode.", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTInstance get_bt_instance() 🔗", + "text": "BTInstance get_bt_instance() 🔗", + "markers": { + "1": "BTInstance", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the behavior tree instance.", + "text": "Returns the behavior tree instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> restart() 🔗", + "text": " restart() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Resets the behavior tree’s execution. Each running task will be aborted and the next tree execution will start anew. This method does not reset Blackboard.", + "text": "Resets the behavior tree’s execution. Each running task will be aborted and the next tree execution will start anew. This method does not reset Blackboard.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_bt_instance(bt_instance: BTInstance) 🔗", + "text": " set_bt_instance(bt_instance: BTInstance) 🔗", + "markers": { + "1": "void", + "2": "BTInstance", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the BTInstance to play. This method is useful when you want to switch to a different behavior tree instance at runtime. See also BehaviorTree.instantiate.", + "text": "Sets the BTInstance to play. This method is useful when you want to switch to a different behavior tree instance at runtime. See also BehaviorTree.instantiate.", + "markers": { + "1": "BTInstance", + "2": "BehaviorTree.instantiate" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_scene_root_hint(scene_root: <2/>) 🔗", + "text": " set_scene_root_hint(scene_root: ) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the BTPlayer is added to the scene tree (before <2/>). This is typically useful when creating BTPlayer nodes dynamically from code.", + "text": "Sets the that will be used as the scene root for the newly instantiated behavior tree. Should be called before the BTPlayer is added to the scene tree (before ). This is typically useful when creating BTPlayer nodes dynamically from code.", + "markers": { + "1": "Node", + "2": "NOTIFICATION_READY" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> update(delta: <2/>) 🔗", + "text": " update(delta: ) 🔗", + "markers": { + "1": "void", + "2": "float", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Executes the root task of the behavior tree instance if active is <2/>. Call this method when update_mode is set to MANUAL. When update_mode is not MANUAL, the update will be called automatically. See UpdateMode.", + "text": "Executes the root task of the behavior tree instance if active is . Call this method when update_mode is set to MANUAL. When update_mode is not MANUAL, the update will be called automatically. See UpdateMode.", + "markers": { + "1": "active", + "2": "true", + "3": "update_mode", + "4": "MANUAL", + "5": "update_mode", + "6": "MANUAL", + "7": "update", + "8": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A key/value storage for sharing among LimboHSM states and BehaviorTree tasks.", + "text": "A key/value storage for sharing among LimboHSM states and BehaviorTree tasks.", + "markers": { + "1": "LimboHSM", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard is where data is stored and shared between states in the LimboHSM system and tasks in a BehaviorTree. Each state and task in the BehaviorTree can access this Blackboard, allowing them to read and write data. This makes it easy to share information between different actions and behaviors.", + "text": "Blackboard is where data is stored and shared between states in the LimboHSM system and tasks in a BehaviorTree. Each state and task in the BehaviorTree can access this Blackboard, allowing them to read and write data. This makes it easy to share information between different actions and behaviors.", + "markers": { + "1": "LimboHSM", + "2": "BehaviorTree", + "3": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard can also act as a parent scope for another Blackboard. If a specific variable is not found in the active scope, it looks in the parent Blackboard to find it. A parent Blackboard can itself have its own parent scope, forming what we call a “blackboard scope chain.” Importantly, there is no limit to how many Blackboards can be in this chain, and the Blackboard doesn’t modify values in the parent scopes.", + "text": "Blackboard can also act as a parent scope for another Blackboard. If a specific variable is not found in the active scope, it looks in the parent Blackboard to find it. A parent Blackboard can itself have its own parent scope, forming what we call a “blackboard scope chain.” Importantly, there is no limit to how many Blackboards can be in this chain, and the Blackboard doesn’t modify values in the parent scopes.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "New scopes can be created using the BTNewScope and BTSubtree decorators. Additionally, a new scope is automatically created for any LimboState that has defined non-empty Blackboard data or for any root-level LimboHSM node.", + "text": "New scopes can be created using the BTNewScope and BTSubtree decorators. Additionally, a new scope is automatically created for any LimboState that has defined non-empty Blackboard data or for any root-level LimboHSM node.", + "markers": { + "1": "BTNewScope", + "2": "BTSubtree", + "3": "LimboState", + "4": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false)", + "text": "bind_var_to_property(var_name: , object: , property: , create: = false)", + "markers": { + "1": "bind_var_to_property", + "2": "StringName", + "3": "Object", + "4": "StringName", + "5": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false)", + "text": "bind_var_to_property(var_name: , object: , property: , create: = false)", + "markers": { + "1": "bind_var_to_property", + "2": "StringName", + "3": "Object", + "4": "StringName", + "5": "bool" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "clear()", + "text": "clear()", + "markers": { + "1": "clear" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "clear()", + "text": "clear()", + "markers": { + "1": "clear" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "erase_var(var_name: <2/>)", + "text": "erase_var(var_name: )", + "markers": { + "1": "erase_var", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "erase_var(var_name: <2/>)", + "text": "erase_var(var_name: )", + "markers": { + "1": "erase_var", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_parent() <2/>", + "text": "get_parent() ", + "markers": { + "1": "get_parent", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_parent() <2/>", + "text": "get_parent() ", + "markers": { + "1": "get_parent", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/>", + "text": "get_var(var_name: , default: = null, complain: = true) ", + "markers": { + "1": "get_var", + "2": "StringName", + "3": "Variant", + "4": "bool", + "5": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/>", + "text": "get_var(var_name: , default: = null, complain: = true) ", + "markers": { + "1": "get_var", + "2": "StringName", + "3": "Variant", + "4": "bool", + "5": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_vars_as_dict() <2/>", + "text": "get_vars_as_dict() ", + "markers": { + "1": "get_vars_as_dict", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_vars_as_dict() <2/>", + "text": "get_vars_as_dict() ", + "markers": { + "1": "get_vars_as_dict", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "has_var(var_name: <2/>) <3/>", + "text": "has_var(var_name: ) ", + "markers": { + "1": "has_var", + "2": "StringName", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "has_var(var_name: <2/>) <3/>", + "text": "has_var(var_name: ) ", + "markers": { + "1": "has_var", + "2": "StringName", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false)", + "text": "link_var(var_name: , target_blackboard: Blackboard, target_var: , create: = false)", + "markers": { + "1": "link_var", + "2": "StringName", + "3": "Blackboard", + "4": "StringName", + "5": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false)", + "text": "link_var(var_name: , target_blackboard: Blackboard, target_var: , create: = false)", + "markers": { + "1": "link_var", + "2": "StringName", + "3": "Blackboard", + "4": "StringName", + "5": "bool" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Array[<1/>]", + "text": "Array[]", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[<1/>]", + "text": "Array[]", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "list_vars() <2/>", + "text": "list_vars() ", + "markers": { + "1": "list_vars", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "list_vars() <2/>", + "text": "list_vars() ", + "markers": { + "1": "list_vars", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "populate_from_dict(dictionary: <2/>)", + "text": "populate_from_dict(dictionary: )", + "markers": { + "1": "populate_from_dict", + "2": "Dictionary" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "populate_from_dict(dictionary: <2/>)", + "text": "populate_from_dict(dictionary: )", + "markers": { + "1": "populate_from_dict", + "2": "Dictionary" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "print_state() <2/>", + "text": "print_state() ", + "markers": { + "1": "print_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "print_state() <2/>", + "text": "print_state() ", + "markers": { + "1": "print_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_parent(blackboard: Blackboard)", + "text": "set_parent(blackboard: Blackboard)", + "markers": { + "1": "set_parent", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_parent(blackboard: Blackboard)", + "text": "set_parent(blackboard: Blackboard)", + "markers": { + "1": "set_parent", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_var(var_name: <2/>, value: <3/>)", + "text": "set_var(var_name: , value: )", + "markers": { + "1": "set_var", + "2": "StringName", + "3": "Variant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_var(var_name: <2/>, value: <3/>)", + "text": "set_var(var_name: , value: )", + "markers": { + "1": "set_var", + "2": "StringName", + "3": "Variant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "top() <2/>", + "text": "top() ", + "markers": { + "1": "top", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "top() <2/>", + "text": "top() ", + "markers": { + "1": "top", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "unbind_var(var_name: <2/>)", + "text": "unbind_var(var_name: )", + "markers": { + "1": "unbind_var", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "unbind_var(var_name: <2/>)", + "text": "unbind_var(var_name: )", + "markers": { + "1": "unbind_var", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false) 🔗", + "text": " bind_var_to_property(var_name: , object: , property: , create: = false) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Object", + "4": "StringName", + "5": "bool", + "6": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Establish a binding between a variable and the object’s property specified by <1/> and <2/>. Changes to the variable update the property, and vice versa. If <3/> is <4/>, the variable will be created if it doesn’t exist.", + "text": "Establish a binding between a variable and the object’s property specified by and . Changes to the variable update the property, and vice versa. If is , the variable will be created if it doesn’t exist.", + "markers": { + "1": "property", + "2": "object", + "3": "create", + "4": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> clear() 🔗", + "text": " clear() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Removes all variables from the Blackboard. Parent scopes are not affected.", + "text": "Removes all variables from the Blackboard. Parent scopes are not affected.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> erase_var(var_name: <2/>) 🔗", + "text": " erase_var(var_name: ) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Removes a variable by its name.", + "text": "Removes a variable by its name.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard get_parent() <2/> 🔗", + "text": "Blackboard get_parent() 🔗", + "markers": { + "1": "Blackboard", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns a Blackboard that serves as the parent scope for this instance.", + "text": "Returns a Blackboard that serves as the parent scope for this instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/> 🔗", + "text": " get_var(var_name: , default: = null, complain: = true) 🔗", + "markers": { + "1": "Variant", + "2": "StringName", + "3": "Variant", + "4": "bool", + "5": "const", + "6": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns variable value or <1/> if variable doesn’t exist. If <2/> is <3/>, an error will be printed if variable doesn’t exist. If the variable doesn’t exist in the current Blackboard scope, it will look in the parent scope Blackboard to find it.", + "text": "Returns variable value or if variable doesn’t exist. If is , an error will be printed if variable doesn’t exist. If the variable doesn’t exist in the current Blackboard scope, it will look in the parent scope Blackboard to find it.", + "markers": { + "1": "default", + "2": "complain", + "3": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_vars_as_dict() <2/> 🔗", + "text": " get_vars_as_dict() 🔗", + "markers": { + "1": "Dictionary", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns all variables in the Blackboard as a dictionary. Keys are the variable names, values are the variable values. Parent scopes are not included.", + "text": "Returns all variables in the Blackboard as a dictionary. Keys are the variable names, values are the variable values. Parent scopes are not included.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> has_var(var_name: <2/>) <3/> 🔗", + "text": " has_var(var_name: ) 🔗", + "markers": { + "1": "bool", + "2": "StringName", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the Blackboard contains the <2/> variable, including the parent scopes.", + "text": "Returns if the Blackboard contains the variable, including the parent scopes.", + "markers": { + "1": "true", + "2": "var_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false) 🔗", + "text": " link_var(var_name: , target_blackboard: Blackboard, target_var: , create: = false) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Blackboard", + "4": "StringName", + "5": "bool", + "6": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Links a variable to another Blackboard variable. If a variable is linked to another variable, their state will always be identical, and any change to one will be reflected in the other. If <1/> is <2/>, the variable will be created if it doesn’t exist.", + "text": "Links a variable to another Blackboard variable. If a variable is linked to another variable, their state will always be identical, and any change to one will be reflected in the other. If is , the variable will be created if it doesn’t exist.", + "markers": { + "1": "create", + "2": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You can use this method to link a variable in the current scope to a variable in another scope, or in another Blackboard instance. A variable can only be linked to one other variable. Calling this method again will overwrite the previous link. However, it is possible to link to the same variable from multiple different variables.", + "text": "You can use this method to link a variable in the current scope to a variable in another scope, or in another Blackboard instance. A variable can only be linked to one other variable. Calling this method again will overwrite the previous link. However, it is possible to link to the same variable from multiple different variables.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[<1/>] list_vars() <2/> 🔗", + "text": "Array[] list_vars() 🔗", + "markers": { + "1": "StringName", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns all variable names in the Blackboard. Parent scopes are not included.", + "text": "Returns all variable names in the Blackboard. Parent scopes are not included.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> populate_from_dict(dictionary: <2/>) 🔗", + "text": " populate_from_dict(dictionary: ) 🔗", + "markers": { + "1": "void", + "2": "Dictionary", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Fills the Blackboard with multiple variables from a dictionary. The dictionary keys must be variable names and the dictionary values must be variable values. Keys must be StringName or String.", + "text": "Fills the Blackboard with multiple variables from a dictionary. The dictionary keys must be variable names and the dictionary values must be variable values. Keys must be StringName or String.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> print_state() <2/> 🔗", + "text": " print_state() 🔗", + "markers": { + "1": "void", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Prints the values of all variables in each scope.", + "text": "Prints the values of all variables in each scope.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_parent(blackboard: Blackboard) 🔗", + "text": " set_parent(blackboard: Blackboard) 🔗", + "markers": { + "1": "void", + "2": "Blackboard", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Assigns the parent scope. If a value isn’t in the current Blackboard scope, it will look in the parent scope Blackboard to find it.", + "text": "Assigns the parent scope. If a value isn’t in the current Blackboard scope, it will look in the parent scope Blackboard to find it.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_var(var_name: <2/>, value: <3/>) 🔗", + "text": " set_var(var_name: , value: ) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Variant", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Assigns a value to a variable in the current Blackboard scope. If the variable doesn’t exist, it will be created. If the variable already exists in the parent scope, the parent scope value will NOT be changed.", + "text": "Assigns a value to a variable in the current Blackboard scope. If the variable doesn’t exist, it will be created. If the variable already exists in the parent scope, the parent scope value will NOT be changed.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard top() <2/> 🔗", + "text": "Blackboard top() 🔗", + "markers": { + "1": "Blackboard", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the topmost Blackboard in the scope chain.", + "text": "Returns the topmost Blackboard in the scope chain.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> unbind_var(var_name: <2/>) 🔗", + "text": " unbind_var(var_name: ) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Remove binding from a variable.", + "text": "Remove binding from a variable.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "BBParam", + "text": "BBParam", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BBAabb, BBArray, BBBasis, BBBool, BBByteArray, BBColor, BBColorArray, BBDictionary, BBFloat, BBFloat32Array, BBFloat64Array, BBInt, BBInt32Array, BBInt64Array, BBNode, BBPlane, BBProjection, BBQuaternion, BBRect2, BBRect2i, BBString, BBStringArray, BBStringName, BBTransform2D, BBTransform3D, BBVariant, BBVector2, BBVector2Array, BBVector2i, BBVector3, BBVector3Array, BBVector3i, BBVector4, BBVector4i", + "text": "Inherited By: BBAabb, BBArray, BBBasis, BBBool, BBByteArray, BBColor, BBColorArray, BBDictionary, BBFloat, BBFloat32Array, BBFloat64Array, BBInt, BBInt32Array, BBInt64Array, BBNode, BBPlane, BBProjection, BBQuaternion, BBRect2, BBRect2i, BBString, BBStringArray, BBStringName, BBTransform2D, BBTransform3D, BBVariant, BBVector2, BBVector2Array, BBVector2i, BBVector3, BBVector3Array, BBVector3i, BBVector4, BBVector4i", + "markers": { + "1": "BBAabb", + "2": "BBArray", + "3": "BBBasis", + "4": "BBBool", + "5": "BBByteArray", + "6": "BBColor", + "7": "BBColorArray", + "8": "BBDictionary", + "9": "BBFloat", + "10": "BBFloat32Array", + "11": "BBFloat64Array", + "12": "BBInt", + "13": "BBInt32Array", + "14": "BBInt64Array", + "15": "BBNode", + "16": "BBPlane", + "17": "BBProjection", + "18": "BBQuaternion", + "19": "BBRect2", + "20": "BBRect2i", + "21": "BBString", + "22": "BBStringArray", + "23": "BBStringName", + "24": "BBTransform2D", + "25": "BBTransform3D", + "26": "BBVariant", + "27": "BBVector2", + "28": "BBVector2Array", + "29": "BBVector2i", + "30": "BBVector3", + "31": "BBVector3Array", + "32": "BBVector3i", + "33": "BBVector4", + "34": "BBVector4i" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A base class for LimboAI typed parameters.", + "text": "A base class for LimboAI typed parameters.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A base class for LimboAI typed parameters, with the ability to reference a Blackboard variable or hold a raw value of a specific Variant.Type.", + "text": "A base class for LimboAI typed parameters, with the ability to reference a Blackboard variable or hold a raw value of a specific Variant.Type.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: Don’t instantiate. Use specific subtypes instead.", + "text": "Note: Don’t instantiate. Use specific subtypes instead.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "saved_value", + "text": "saved_value", + "markers": { + "1": "saved_value" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "saved_value", + "text": "saved_value", + "markers": { + "1": "saved_value" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "ValueSource", + "text": "ValueSource", + "markers": { + "1": "ValueSource" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ValueSource", + "text": "ValueSource", + "markers": { + "1": "ValueSource" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "value_source", + "text": "value_source", + "markers": { + "1": "value_source" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "value_source", + "text": "value_source", + "markers": { + "1": "value_source" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Variant.Type", + "text": "Variant.Type", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Variant.Type", + "text": "Variant.Type", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_type() <2/>", + "text": "get_type() ", + "markers": { + "1": "get_type", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_type() <2/>", + "text": "get_type() ", + "markers": { + "1": "get_type", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null)", + "text": "get_value(scene_root: , blackboard: Blackboard, default: = null)", + "markers": { + "1": "get_value", + "2": "Node", + "3": "Blackboard", + "4": "Variant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null)", + "text": "get_value(scene_root: , blackboard: Blackboard, default: = null)", + "markers": { + "1": "get_value", + "2": "Node", + "3": "Blackboard", + "4": "Variant" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Enumerations", + "text": "Enumerations", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "enum ValueSource: 🔗", + "text": "enum ValueSource: 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ValueSource SAVED_VALUE = <2/>", + "text": "ValueSource SAVED_VALUE = ", + "markers": { + "1": "ValueSource", + "2": "0" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The value is stored directly within the BBParam resource.", + "text": "The value is stored directly within the BBParam resource.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ValueSource BLACKBOARD_VAR = <2/>", + "text": "ValueSource BLACKBOARD_VAR = ", + "markers": { + "1": "ValueSource", + "2": "1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The value is referenced by a variable name and retrieved from the Blackboard. The variable name is stored within the BBParam resource.", + "text": "The value is referenced by a variable name and retrieved from the Blackboard. The variable name is stored within the BBParam resource.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> saved_value = <2/> 🔗", + "text": " saved_value = 🔗", + "markers": { + "1": "Variant", + "2": "null", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_saved_value(value: <2/>)", + "text": " set_saved_value(value: )", + "markers": { + "1": "void", + "2": "Variant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_saved_value()", + "text": " get_saved_value()", + "markers": { + "1": "Variant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Stores the parameter value when value_source is set to SAVED_VALUE. The data type of the value is determined by get_type.", + "text": "Stores the parameter value when value_source is set to SAVED_VALUE. The data type of the value is determined by get_type.", + "markers": { + "1": "value_source", + "2": "SAVED_VALUE", + "3": "get_type" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ValueSource value_source = <2/> 🔗", + "text": "ValueSource value_source = 🔗", + "markers": { + "1": "ValueSource", + "2": "0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_value_source(value: ValueSource)", + "text": " set_value_source(value: ValueSource)", + "markers": { + "1": "void", + "2": "ValueSource" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ValueSource get_value_source()", + "text": "ValueSource get_value_source()", + "markers": { + "1": "ValueSource" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Specifies the source of the value for BBParam. See ValueSource.", + "text": "Specifies the source of the value for BBParam. See ValueSource.", + "markers": { + "1": "ValueSource" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> variable 🔗", + "text": " variable 🔗", + "markers": { + "1": "StringName", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_variable(value: <2/>)", + "text": " set_variable(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_variable()", + "text": " get_variable()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Stores the name of a Blackboard variable when value_source is set to BLACKBOARD_VAR.", + "text": "Stores the name of a Blackboard variable when value_source is set to BLACKBOARD_VAR.", + "markers": { + "1": "Blackboard", + "2": "value_source", + "3": "BLACKBOARD_VAR" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Variant.Type get_type() <1/> 🔗", + "text": "Variant.Type get_type() 🔗", + "markers": { + "1": "const", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the expected data type of the parameter.", + "text": "Returns the expected data type of the parameter.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null) 🔗", + "text": " get_value(scene_root: , blackboard: Blackboard, default: = null) 🔗", + "markers": { + "1": "Variant", + "2": "Node", + "3": "Blackboard", + "4": "Variant", + "5": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the value of the parameter.", + "text": "Returns the value of the parameter.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTState, LimboHSM", + "text": "Inherited By: BTState, LimboHSM", + "markers": { + "1": "BTState", + "2": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A state node for Hierarchical State Machines (HSM).", + "text": "A state node for Hierarchical State Machines (HSM).", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A LimboAI state node for Hierarchical State Machines (HSM).", + "text": "A LimboAI state node for Hierarchical State Machines (HSM).", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "You can create your state behavior by extending this class. To implement your state logic, you can override _enter, _exit, _setup, and _update. Alternatively, you can delegate state implementation to external methods using the <5/> methods.", + "text": "You can create your state behavior by extending this class. To implement your state logic, you can override _enter, _exit, _setup, and _update. Alternatively, you can delegate state implementation to external methods using the methods.", + "markers": { + "1": "_enter", + "2": "_exit", + "3": "_setup", + "4": "_update", + "5": "call_on_*" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "For additional details on state machines, refer to LimboHSM.", + "text": "For additional details on state machines, refer to LimboHSM.", + "markers": { + "1": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "EVENT_FINISHED", + "text": "EVENT_FINISHED", + "markers": { + "1": "EVENT_FINISHED" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "EVENT_FINISHED", + "text": "EVENT_FINISHED", + "markers": { + "1": "EVENT_FINISHED" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "agent", + "text": "agent", + "markers": { + "1": "agent" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "agent", + "text": "agent", + "markers": { + "1": "agent" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blackboard", + "text": "blackboard", + "markers": { + "1": "blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blackboard", + "text": "blackboard", + "markers": { + "1": "blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_enter() <2/>", + "text": "_enter() ", + "markers": { + "1": "_enter", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_enter() <2/>", + "text": "_enter() ", + "markers": { + "1": "_enter", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_exit() <2/>", + "text": "_exit() ", + "markers": { + "1": "_exit", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_exit() <2/>", + "text": "_exit() ", + "markers": { + "1": "_exit", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_setup() <2/>", + "text": "_setup() ", + "markers": { + "1": "_setup", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_setup() <2/>", + "text": "_setup() ", + "markers": { + "1": "_setup", + "2": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "_update(delta: <2/>) <3/>", + "text": "_update(delta: ) ", + "markers": { + "1": "_update", + "2": "float", + "3": "virtual" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "_update(delta: <2/>) <3/>", + "text": "_update(delta: ) ", + "markers": { + "1": "_update", + "2": "float", + "3": "virtual" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "add_event_handler(event: <2/>, handler: <3/>)", + "text": "add_event_handler(event: , handler: )", + "markers": { + "1": "add_event_handler", + "2": "StringName", + "3": "Callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "add_event_handler(event: <2/>, handler: <3/>)", + "text": "add_event_handler(event: , handler: )", + "markers": { + "1": "add_event_handler", + "2": "StringName", + "3": "Callable" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "call_on_enter(callable: <2/>)", + "text": "call_on_enter(callable: )", + "markers": { + "1": "call_on_enter", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "call_on_enter(callable: <2/>)", + "text": "call_on_enter(callable: )", + "markers": { + "1": "call_on_enter", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "call_on_exit(callable: <2/>)", + "text": "call_on_exit(callable: )", + "markers": { + "1": "call_on_exit", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "call_on_exit(callable: <2/>)", + "text": "call_on_exit(callable: )", + "markers": { + "1": "call_on_exit", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "call_on_update(callable: <2/>)", + "text": "call_on_update(callable: )", + "markers": { + "1": "call_on_update", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "call_on_update(callable: <2/>)", + "text": "call_on_update(callable: )", + "markers": { + "1": "call_on_update", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "clear_guard()", + "text": "clear_guard()", + "markers": { + "1": "clear_guard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "clear_guard()", + "text": "clear_guard()", + "markers": { + "1": "clear_guard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "dispatch(event: <2/>, cargo: <3/> = null)", + "text": "dispatch(event: , cargo: = null)", + "markers": { + "1": "dispatch", + "2": "StringName", + "3": "Variant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "dispatch(event: <2/>, cargo: <3/> = null)", + "text": "dispatch(event: , cargo: = null)", + "markers": { + "1": "dispatch", + "2": "StringName", + "3": "Variant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_root() <2/>", + "text": "get_root() ", + "markers": { + "1": "get_root", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_root() <2/>", + "text": "get_root() ", + "markers": { + "1": "get_root", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "is_active() <2/>", + "text": "is_active() ", + "markers": { + "1": "is_active", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "is_active() <2/>", + "text": "is_active() ", + "markers": { + "1": "is_active", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "named(name: <2/>)", + "text": "named(name: )", + "markers": { + "1": "named", + "2": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "named(name: <2/>)", + "text": "named(name: )", + "markers": { + "1": "named", + "2": "String" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_guard(guard_callable: <2/>)", + "text": "set_guard(guard_callable: )", + "markers": { + "1": "set_guard", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_guard(guard_callable: <2/>)", + "text": "set_guard(guard_callable: )", + "markers": { + "1": "set_guard", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Signals", + "text": "Signals", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "entered() 🔗", + "text": "entered() 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the state is entered.", + "text": "Emitted when the state is entered.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "exited() 🔗", + "text": "exited() 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the state is exited.", + "text": "Emitted when the state is exited.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "setup() 🔗", + "text": "setup() 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the state is initialized.", + "text": "Emitted when the state is initialized.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "updated(delta: <1/>) 🔗", + "text": "updated(delta: ) 🔗", + "markers": { + "1": "float", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the state is updated.", + "text": "Emitted when the state is updated.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> EVENT_FINISHED 🔗", + "text": " EVENT_FINISHED 🔗", + "markers": { + "1": "StringName", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> event_finished()", + "text": " event_finished()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A commonly used event that indicates that the state has finished its work.", + "text": "A commonly used event that indicates that the state has finished its work.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> agent 🔗", + "text": " agent 🔗", + "markers": { + "1": "Node", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_agent(value: <2/>)", + "text": " set_agent(value: )", + "markers": { + "1": "void", + "2": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_agent()", + "text": " get_agent()", + "markers": { + "1": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "An agent associated with the state, assigned during initialization.", + "text": "An agent associated with the state, assigned during initialization.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard blackboard 🔗", + "text": "Blackboard blackboard 🔗", + "markers": { + "1": "Blackboard", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard get_blackboard()", + "text": "Blackboard get_blackboard()", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A key/value data store shared by states within the state machine to which this state belongs.", + "text": "A key/value data store shared by states within the state machine to which this state belongs.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan blackboard_plan 🔗", + "text": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_blackboard_plan(value: BlackboardPlan)", + "text": " set_blackboard_plan(value: BlackboardPlan)", + "markers": { + "1": "void", + "2": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan get_blackboard_plan()", + "text": "BlackboardPlan get_blackboard_plan()", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "text": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _enter() <2/> 🔗", + "text": " _enter() 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called when the state is entered.", + "text": "Called when the state is entered.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _exit() <2/> 🔗", + "text": " _exit() 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called when the state is exited. This happens on a transition to another state, and when the state machine is removed from the scene tree (e.g., when the node is freed with Node.queue_free or the scene changes). Due to implementation details, _exit will not be called on Object.free!", + "text": "Called when the state is exited. This happens on a transition to another state, and when the state machine is removed from the scene tree (e.g., when the node is freed with Node.queue_free or the scene changes). Due to implementation details, _exit will not be called on Object.free!", + "markers": { + "1": "_exit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _setup() <2/> 🔗", + "text": " _setup() 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called once during initialization. Use this method to initialize your state.", + "text": "Called once during initialization. Use this method to initialize your state.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> _update(delta: <2/>) <3/> 🔗", + "text": " _update(delta: ) 🔗", + "markers": { + "1": "void", + "2": "float", + "3": "virtual", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Called during the update. Implement your state’s behavior with this method.", + "text": "Called during the update. Implement your state’s behavior with this method.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> add_event_handler(event: <2/>, handler: <3/>) 🔗", + "text": " add_event_handler(event: , handler: ) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Callable", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Registers a <1/> to be called when <2/> is dispatched. The handler function should have the following signature:", + "text": "Registers a to be called when is dispatched. The handler function should have the following signature:", + "markers": { + "1": "handler", + "2": "event" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If the handler returns <1/>, the event will be consumed. Cargo is an optional parameter that can be passed to the handler. See also dispatch.", + "text": "If the handler returns , the event will be consumed. Cargo is an optional parameter that can be passed to the handler. See also dispatch.", + "markers": { + "1": "true", + "2": "dispatch" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState call_on_enter(callable: <2/>) 🔗", + "text": "LimboState call_on_enter(callable: ) 🔗", + "markers": { + "1": "LimboState", + "2": "Callable", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A chained method that connects the entered signal to a <2/>.", + "text": "A chained method that connects the entered signal to a .", + "markers": { + "1": "entered", + "2": "callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState call_on_exit(callable: <2/>) 🔗", + "text": "LimboState call_on_exit(callable: ) 🔗", + "markers": { + "1": "LimboState", + "2": "Callable", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A chained method that connects the exited signal to a <2/>.", + "text": "A chained method that connects the exited signal to a .", + "markers": { + "1": "exited", + "2": "callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState call_on_update(callable: <2/>) 🔗", + "text": "LimboState call_on_update(callable: ) 🔗", + "markers": { + "1": "LimboState", + "2": "Callable", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A chained method that connects the updated signal to a <2/>.", + "text": "A chained method that connects the updated signal to a .", + "markers": { + "1": "updated", + "2": "callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> clear_guard() 🔗", + "text": " clear_guard() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Clears the guard function, removing the <1/> previously set by set_guard.", + "text": "Clears the guard function, removing the previously set by set_guard.", + "markers": { + "1": "Callable", + "2": "set_guard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> dispatch(event: <2/>, cargo: <3/> = null) 🔗", + "text": " dispatch(event: , cargo: = null) 🔗", + "markers": { + "1": "bool", + "2": "StringName", + "3": "Variant", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Recursively dispatches a state machine event named <1/> with an optional argument <2/>. Returns <3/> if the event was consumed.", + "text": "Recursively dispatches a state machine event named with an optional argument . Returns if the event was consumed.", + "markers": { + "1": "event", + "2": "cargo", + "3": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Events propagate from the leaf state to the root state, and propagation stops as soon as any state consumes the event. States will consume the event if they have a related transition or event handler. For more information on event handlers, see add_event_handler.", + "text": "Events propagate from the leaf state to the root state, and propagation stops as soon as any state consumes the event. States will consume the event if they have a related transition or event handler. For more information on event handlers, see add_event_handler.", + "markers": { + "1": "add_event_handler" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState get_root() <2/> 🔗", + "text": "LimboState get_root() 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the root LimboState.", + "text": "Returns the root LimboState.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_active() <2/> 🔗", + "text": " is_active() 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if it is currently active, meaning it is the active substate of the parent LimboHSM.", + "text": "Returns if it is currently active, meaning it is the active substate of the parent LimboHSM.", + "markers": { + "1": "true", + "2": "LimboHSM" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState named(name: <2/>) 🔗", + "text": "LimboState named(name: ) 🔗", + "markers": { + "1": "LimboState", + "2": "String", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A chained method for setting the name of this state.", + "text": "A chained method for setting the name of this state.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_guard(guard_callable: <2/>) 🔗", + "text": " set_guard(guard_callable: ) 🔗", + "markers": { + "1": "void", + "2": "Callable", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the guard function, which is a function called each time a transition to this state is considered. If the function returns <1/>, the transition will be disallowed.", + "text": "Sets the guard function, which is a function called each time a transition to this state is considered. If the function returns , the transition will be disallowed.", + "markers": { + "1": "false" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "LimboHSM", + "text": "LimboHSM", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: LimboState", + "text": "Inherits: LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Event-based Hierarchical State Machine (HSM).", + "text": "Event-based Hierarchical State Machine (HSM).", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Event-based Hierarchical State Machine (HSM) that manages LimboState instances and facilitates transitions between them. LimboHSM is a LimboState in itself and can also serve as a child of another LimboHSM node.", + "text": "Event-based Hierarchical State Machine (HSM) that manages LimboState instances and facilitates transitions between them. LimboHSM is a LimboState in itself and can also serve as a child of another LimboHSM node.", + "markers": { + "1": "LimboState", + "2": "LimboState" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "ANYSTATE", + "text": "ANYSTATE", + "markers": { + "1": "ANYSTATE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ANYSTATE", + "text": "ANYSTATE", + "markers": { + "1": "ANYSTATE" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "initial_state", + "text": "initial_state", + "markers": { + "1": "initial_state" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "initial_state", + "text": "initial_state", + "markers": { + "1": "initial_state" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "UpdateMode", + "text": "UpdateMode", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode", + "text": "UpdateMode", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "update_mode", + "text": "update_mode", + "markers": { + "1": "update_mode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "update_mode", + "text": "update_mode", + "markers": { + "1": "update_mode" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable())", + "text": "add_transition(from_state: LimboState, to_state: LimboState, event: , guard: = Callable())", + "markers": { + "1": "add_transition", + "2": "LimboState", + "3": "LimboState", + "4": "StringName", + "5": "Callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable())", + "text": "add_transition(from_state: LimboState, to_state: LimboState, event: , guard: = Callable())", + "markers": { + "1": "add_transition", + "2": "LimboState", + "3": "LimboState", + "4": "StringName", + "5": "Callable" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "change_active_state(state: LimboState)", + "text": "change_active_state(state: LimboState)", + "markers": { + "1": "change_active_state", + "2": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "change_active_state(state: LimboState)", + "text": "change_active_state(state: LimboState)", + "markers": { + "1": "change_active_state", + "2": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_active_state() <2/>", + "text": "get_active_state() ", + "markers": { + "1": "get_active_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_active_state() <2/>", + "text": "get_active_state() ", + "markers": { + "1": "get_active_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_leaf_state() <2/>", + "text": "get_leaf_state() ", + "markers": { + "1": "get_leaf_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_leaf_state() <2/>", + "text": "get_leaf_state() ", + "markers": { + "1": "get_leaf_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_previous_active_state() <2/>", + "text": "get_previous_active_state() ", + "markers": { + "1": "get_previous_active_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_previous_active_state() <2/>", + "text": "get_previous_active_state() ", + "markers": { + "1": "get_previous_active_state", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "has_transition(from_state: LimboState, event: <3/>) <4/>", + "text": "has_transition(from_state: LimboState, event: ) ", + "markers": { + "1": "has_transition", + "2": "LimboState", + "3": "StringName", + "4": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "has_transition(from_state: LimboState, event: <3/>) <4/>", + "text": "has_transition(from_state: LimboState, event: ) ", + "markers": { + "1": "has_transition", + "2": "LimboState", + "3": "StringName", + "4": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "initialize(agent: <2/>, parent_scope: Blackboard = null)", + "text": "initialize(agent: , parent_scope: Blackboard = null)", + "markers": { + "1": "initialize", + "2": "Node", + "3": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "initialize(agent: <2/>, parent_scope: Blackboard = null)", + "text": "initialize(agent: , parent_scope: Blackboard = null)", + "markers": { + "1": "initialize", + "2": "Node", + "3": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "remove_transition(from_state: LimboState, event: <3/>)", + "text": "remove_transition(from_state: LimboState, event: )", + "markers": { + "1": "remove_transition", + "2": "LimboState", + "3": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "remove_transition(from_state: LimboState, event: <3/>)", + "text": "remove_transition(from_state: LimboState, event: )", + "markers": { + "1": "remove_transition", + "2": "LimboState", + "3": "StringName" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_active(active: <2/>)", + "text": "set_active(active: )", + "markers": { + "1": "set_active", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_active(active: <2/>)", + "text": "set_active(active: )", + "markers": { + "1": "set_active", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "update(delta: <2/>)", + "text": "update(delta: )", + "markers": { + "1": "update", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "update(delta: <2/>)", + "text": "update(delta: )", + "markers": { + "1": "update", + "2": "float" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Signals", + "text": "Signals", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "active_state_changed(current: LimboState, previous: LimboState) 🔗", + "text": "active_state_changed(current: LimboState, previous: LimboState) 🔗", + "markers": { + "1": "LimboState", + "2": "LimboState", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the currently active substate is switched to a different substate.", + "text": "Emitted when the currently active substate is switched to a different substate.", + "markers": {} + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Enumerations", + "text": "Enumerations", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "enum UpdateMode: 🔗", + "text": "enum UpdateMode: 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode IDLE = <2/>", + "text": "UpdateMode IDLE = ", + "markers": { + "1": "UpdateMode", + "2": "0" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Update the state machine during the idle process.", + "text": "Update the state machine during the idle process.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode PHYSICS = <2/>", + "text": "UpdateMode PHYSICS = ", + "markers": { + "1": "UpdateMode", + "2": "1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Update the state machine during the physics process.", + "text": "Update the state machine during the physics process.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode MANUAL = <2/>", + "text": "UpdateMode MANUAL = ", + "markers": { + "1": "UpdateMode", + "2": "2" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Manually update the state machine by calling update from a script.", + "text": "Manually update the state machine by calling update from a script.", + "markers": { + "1": "update" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState ANYSTATE 🔗", + "text": "LimboState ANYSTATE 🔗", + "markers": { + "1": "LimboState", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState anystate()", + "text": "LimboState anystate()", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Useful for defining a transition from any state.", + "text": "Useful for defining a transition from any state.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState initial_state 🔗", + "text": "LimboState initial_state 🔗", + "markers": { + "1": "LimboState", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_initial_state(value: LimboState)", + "text": " set_initial_state(value: LimboState)", + "markers": { + "1": "void", + "2": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState get_initial_state()", + "text": "LimboState get_initial_state()", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The substate that becomes active when the state machine is activated using the set_active method. If not explicitly set, the first child of the LimboHSM will be considered the initial state.", + "text": "The substate that becomes active when the state machine is activated using the set_active method. If not explicitly set, the first child of the LimboHSM will be considered the initial state.", + "markers": { + "1": "set_active" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode update_mode = <2/> 🔗", + "text": "UpdateMode update_mode = 🔗", + "markers": { + "1": "UpdateMode", + "2": "1", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_update_mode(value: UpdateMode)", + "text": " set_update_mode(value: UpdateMode)", + "markers": { + "1": "void", + "2": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "UpdateMode get_update_mode()", + "text": "UpdateMode get_update_mode()", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Specifies when the state machine should be updated. See UpdateMode.", + "text": "Specifies when the state machine should be updated. See UpdateMode.", + "markers": { + "1": "UpdateMode" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable()) 🔗", + "text": " add_transition(from_state: LimboState, to_state: LimboState, event: , guard: = Callable()) 🔗", + "markers": { + "1": "void", + "2": "LimboState", + "3": "LimboState", + "4": "StringName", + "5": "Callable", + "6": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Establishes a transition from one state to another when <1/> is dispatched. Both <2/> and <3/> must be immediate children of this LimboHSM.", + "text": "Establishes a transition from one state to another when is dispatched. Both and must be immediate children of this LimboHSM.", + "markers": { + "1": "event", + "2": "from_state", + "3": "to_state" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Optionally, a <1/> function can be specified, which must return a boolean value. If the guard function returns <2/>, the transition will not occur. The guard function is called immediately before the transition is considered. For a state-wide guard function, check out LimboState.set_guard.", + "text": "Optionally, a function can be specified, which must return a boolean value. If the guard function returns , the transition will not occur. The guard function is called immediately before the transition is considered. For a state-wide guard function, check out LimboState.set_guard.", + "markers": { + "1": "guard", + "2": "false", + "3": "LimboState.set_guard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> change_active_state(state: LimboState) 🔗", + "text": " change_active_state(state: LimboState) 🔗", + "markers": { + "1": "void", + "2": "LimboState", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Changes the currently active substate to <1/>. If <2/> is already active, it will be exited and reentered.", + "text": "Changes the currently active substate to . If is already active, it will be exited and reentered.", + "markers": { + "1": "state", + "2": "state" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> must be a child of this LimboHSM.", + "text": " must be a child of this LimboHSM.", + "markers": { + "1": "state" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState get_active_state() <2/> 🔗", + "text": "LimboState get_active_state() 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the currently active substate.", + "text": "Returns the currently active substate.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState get_leaf_state() <2/> 🔗", + "text": "LimboState get_leaf_state() 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the currently active leaf state within the state machine.", + "text": "Returns the currently active leaf state within the state machine.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "LimboState get_previous_active_state() <2/> 🔗", + "text": "LimboState get_previous_active_state() 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the previously active substate.", + "text": "Returns the previously active substate.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> has_transition(from_state: LimboState, event: <3/>) <4/> 🔗", + "text": " has_transition(from_state: LimboState, event: ) 🔗", + "markers": { + "1": "bool", + "2": "LimboState", + "3": "StringName", + "4": "const", + "5": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if there is a transition from <2/> for a given <3/>.", + "text": "Returns if there is a transition from for a given .", + "markers": { + "1": "true", + "2": "from_state", + "3": "event" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> initialize(agent: <2/>, parent_scope: Blackboard = null) 🔗", + "text": " initialize(agent: , parent_scope: Blackboard = null) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "Blackboard", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Initiates the state and calls LimboState._setup for both itself and all substates.", + "text": "Initiates the state and calls LimboState._setup for both itself and all substates.", + "markers": { + "1": "LimboState._setup" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> remove_transition(from_state: LimboState, event: <3/>) 🔗", + "text": " remove_transition(from_state: LimboState, event: ) 🔗", + "markers": { + "1": "void", + "2": "LimboState", + "3": "StringName", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Removes a transition from a state associated with specific <1/>.", + "text": "Removes a transition from a state associated with specific .", + "markers": { + "1": "event" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_active(active: <2/>) 🔗", + "text": " set_active(active: ) 🔗", + "markers": { + "1": "void", + "2": "bool", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "When set to <1/>, switches the state to initial_state and activates state processing according to update_mode.", + "text": "When set to , switches the state to initial_state and activates state processing according to update_mode.", + "markers": { + "1": "true", + "2": "initial_state", + "3": "update_mode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> update(delta: <2/>) 🔗", + "text": " update(delta: ) 🔗", + "markers": { + "1": "void", + "2": "float", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Calls LimboState._update on itself and the active substate, with the call cascading down to the leaf state. This method is automatically triggered if update_mode is not set to MANUAL.", + "text": "Calls LimboState._update on itself and the active substate, with the call cascading down to the leaf state. This method is automatically triggered if update_mode is not set to MANUAL.", + "markers": { + "1": "LimboState._update", + "2": "update_mode", + "3": "MANUAL" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "BTState", + "text": "BTState", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: LimboState", + "text": "Inherits: LimboState", + "markers": { + "1": "LimboState" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A state node for LimboHSM that hosts a BehaviorTree.", + "text": "A state node for LimboHSM that hosts a BehaviorTree.", + "markers": { + "1": "LimboHSM", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTState is a LimboState node that manages a BehaviorTree to provide behavior logic for the state. It instantiates and runs the BehaviorTree resource, dispatching a state machine event upon <4/> or <5/>. Event names are customizable through success_event and failure_event. For further details on state machine events, see LimboState.dispatch.", + "text": "BTState is a LimboState node that manages a BehaviorTree to provide behavior logic for the state. It instantiates and runs the BehaviorTree resource, dispatching a state machine event upon or . Event names are customizable through success_event and failure_event. For further details on state machine events, see LimboState.dispatch.", + "markers": { + "1": "LimboState", + "2": "BehaviorTree", + "3": "BehaviorTree", + "4": "SUCCESS", + "5": "FAILURE", + "6": "success_event", + "7": "failure_event", + "8": "LimboState.dispatch" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "behavior_tree", + "text": "behavior_tree", + "markers": { + "1": "behavior_tree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "behavior_tree", + "text": "behavior_tree", + "markers": { + "1": "behavior_tree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "failure_event", + "text": "failure_event", + "markers": { + "1": "failure_event" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "failure_event", + "text": "failure_event", + "markers": { + "1": "failure_event" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "monitor_performance", + "text": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "monitor_performance", + "text": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "success_event", + "text": "success_event", + "markers": { + "1": "success_event" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "success_event", + "text": "success_event", + "markers": { + "1": "success_event" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": { + "1": "BTInstance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": { + "1": "BTInstance" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_bt_instance() <2/>", + "text": "get_bt_instance() ", + "markers": { + "1": "get_bt_instance", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_bt_instance() <2/>", + "text": "get_bt_instance() ", + "markers": { + "1": "get_bt_instance", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_scene_root_hint(scene_root: <2/>)", + "text": "set_scene_root_hint(scene_root: )", + "markers": { + "1": "set_scene_root_hint", + "2": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_scene_root_hint(scene_root: <2/>)", + "text": "set_scene_root_hint(scene_root: )", + "markers": { + "1": "set_scene_root_hint", + "2": "Node" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree behavior_tree 🔗", + "text": "BehaviorTree behavior_tree 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_behavior_tree(value: BehaviorTree)", + "text": " set_behavior_tree(value: BehaviorTree)", + "markers": { + "1": "void", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree get_behavior_tree()", + "text": "BehaviorTree get_behavior_tree()", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A BehaviorTree resource that defines state behavior.", + "text": "A BehaviorTree resource that defines state behavior.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> failure_event = <2/> 🔗", + "text": " failure_event = 🔗", + "markers": { + "1": "StringName", + "2": "&\"failure\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_failure_event(value: <2/>)", + "text": " set_failure_event(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_failure_event()", + "text": " get_failure_event()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch.", + "text": "HSM event that will be dispatched when the behavior tree results in . See LimboState.dispatch.", + "markers": { + "1": "FAILURE", + "2": "LimboState.dispatch" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> monitor_performance = <2/> 🔗", + "text": " monitor_performance = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_monitor_performance(value: <2/>)", + "text": " set_monitor_performance(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_monitor_performance()", + "text": " get_monitor_performance()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTState node.", + "text": "If , adds a performance monitor to “Debugger->Monitors” for each instance of this BTState node.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> success_event = <2/> 🔗", + "text": " success_event = 🔗", + "markers": { + "1": "StringName", + "2": "&\"success\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_success_event(value: <2/>)", + "text": " set_success_event(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_success_event()", + "text": " get_success_event()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch.", + "text": "HSM event that will be dispatched when the behavior tree results in . See LimboState.dispatch.", + "markers": { + "1": "SUCCESS", + "2": "LimboState.dispatch" + } + }, + { + "kind": "body", + "tag": "h4", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTInstance get_bt_instance() <2/> 🔗", + "text": "BTInstance get_bt_instance() 🔗", + "markers": { + "1": "BTInstance", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the behavior tree instance.", + "text": "Returns the behavior tree instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_scene_root_hint(scene_root: <2/>) 🔗", + "text": " set_scene_root_hint(scene_root: ) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the state machine is initialized. This is typically useful when creating BTState nodes dynamically from code.", + "text": "Sets the that will be used as the scene root for the newly instantiated behavior tree. Should be called before the state machine is initialized. This is typically useful when creating BTState nodes dynamically from code.", + "markers": { + "1": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Full class reference is available in the side bar.", + "text": "Full class reference is available in the side bar.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBAabb", + "text": "BBAabb", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "AABB-type parameter for BehaviorTree tasks. See BBParam.", + "text": "AABB-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBArray", + "text": "BBArray", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBBasis", + "text": "BBBasis", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Basis-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Basis-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBBool", + "text": "BBBool", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Bool-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Bool-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBByteArray", + "text": "BBByteArray", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ByteArray-type parameter for BehaviorTree tasks. See BBParam.", + "text": "ByteArray-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBColor", + "text": "BBColor", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Color-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Color-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBColorArray", + "text": "BBColorArray", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "ColorArray-type parameter for BehaviorTree tasks. See BBParam.", + "text": "ColorArray-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBDictionary", + "text": "BBDictionary", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Dictionary-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Dictionary-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBFloat", + "text": "BBFloat", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Float-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Float-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBFloat32Array", + "text": "BBFloat32Array", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "PackedFloat32Array-type parameter for BehaviorTree tasks. See BBParam.", + "text": "PackedFloat32Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBFloat64Array", + "text": "BBFloat64Array", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "PackedFloat64Array-type parameter for BehaviorTree tasks. See BBParam.", + "text": "PackedFloat64Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBInt", + "text": "BBInt", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Integer-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Integer-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBInt32Array", + "text": "BBInt32Array", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "PackedInt32Array-type parameter for BehaviorTree tasks. See BBParam.", + "text": "PackedInt32Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBInt64Array", + "text": "BBInt64Array", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "PackedInt64Array-type parameter for BehaviorTree tasks. See BBParam.", + "text": "PackedInt64Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Node-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Node-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Node-type parameter intended for use with BehaviorTree tasks. See BBParam.", + "text": "Node-type parameter intended for use with BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If the source is a blackboard variable, it allows any type extended from <1/>.", + "text": "If the source is a blackboard variable, it allows any type extended from .", + "markers": { + "1": "Object" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBPlane", + "text": "BBPlane", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Plane-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Plane-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBProjection", + "text": "BBProjection", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Projection-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Projection-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBQuaternion", + "text": "BBQuaternion", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Quaternion-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Quaternion-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBRect2", + "text": "BBRect2", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Rect2-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Rect2-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBRect2i", + "text": "BBRect2i", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Rect2i-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Rect2i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBString", + "text": "BBString", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "String-type parameter for BehaviorTree tasks. See BBParam.", + "text": "String-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBStringArray", + "text": "BBStringArray", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "StringArray-type parameter for BehaviorTree tasks. See BBParam.", + "text": "StringArray-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBStringName", + "text": "BBStringName", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "StringName-type parameter for BehaviorTree tasks. See BBParam.", + "text": "StringName-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBTransform2D", + "text": "BBTransform2D", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Transform2D-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Transform2D-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBTransform3D", + "text": "BBTransform3D", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Transform3D-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Transform3D-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Variant-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Variant-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Variant-type parameter intended for use with BehaviorTree tasks. See BBParam.", + "text": "Variant-type parameter intended for use with BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The data type is specified by type.", + "text": "The data type is specified by type.", + "markers": { + "1": "type" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Variant.Type", + "text": "Variant.Type", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Variant.Type", + "text": "Variant.Type", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "type", + "text": "type", + "markers": { + "1": "type" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "type", + "text": "type", + "markers": { + "1": "type" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Variant.Type type = <1/> 🔗", + "text": "Variant.Type type = 🔗", + "markers": { + "1": "0", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_type(value: Variant.Type)", + "text": " set_type(value: Variant.Type)", + "markers": { + "1": "void" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Variant.Type get_type()", + "text": "Variant.Type get_type()", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Specified Variant.Type for the parameter value.", + "text": "Specified Variant.Type for the parameter value.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector2", + "text": "BBVector2", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector2-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector2-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector2Array", + "text": "BBVector2Array", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector2Array-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector2Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector2i", + "text": "BBVector2i", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector2i-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector2i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector3", + "text": "BBVector3", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector3-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector3-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector3Array", + "text": "BBVector3Array", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector3Array-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector3Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector3i", + "text": "BBVector3i", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector3i-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector3i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector4", + "text": "BBVector4", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector4-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector4-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BBVector4i", + "text": "BBVector4i", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BBParam", + "text": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Vector4i-type parameter for BehaviorTree tasks. See BBParam.", + "text": "Vector4i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Contains Behavior Tree data.", + "text": "Contains Behavior Tree data.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior Trees are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.", + "text": "Behavior Trees are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include BTSequence, BTSelector, and BTInvert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of Blackboard. See BTTask.blackboard and Blackboard.", + "text": "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include BTSequence, BTSelector, and BTInvert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of Blackboard. See BTTask.blackboard and Blackboard.", + "markers": { + "1": "BTSequence", + "2": "BTSelector", + "3": "BTInvert", + "4": "BTTask", + "5": "Blackboard", + "6": "BTTask.blackboard", + "7": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: To create your own actions, extend the BTAction class.", + "text": "Note: To create your own actions, extend the BTAction class.", + "markers": { + "1": "BTAction" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The BehaviorTree is executed from the root task and follows the rules specified by the control tasks, all the way down to the leaf tasks, which represent the actual actions that the agent should perform or conditions that should be checked. Each task returns a status when it is executed. It can be <1/>, <2/>, or <3/>. These statuses determine how the tree progresses. They are defined in Status.", + "text": "The BehaviorTree is executed from the root task and follows the rules specified by the control tasks, all the way down to the leaf tasks, which represent the actual actions that the agent should perform or conditions that should be checked. Each task returns a status when it is executed. It can be , , or . These statuses determine how the tree progresses. They are defined in Status.", + "markers": { + "1": "SUCCESS", + "2": "RUNNING", + "3": "FAILURE", + "4": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with BTSequence and BTSelector to craft your decision-making logic.", + "text": "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either or based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with BTSequence and BTSelector to craft your decision-making logic.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "BTSequence", + "4": "BTSelector" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: To create your own conditions, extend the BTCondition class.", + "text": "Note: To create your own conditions, extend the BTCondition class.", + "markers": { + "1": "BTCondition" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Check out the BTTask class, which provides the foundation for various building blocks of Behavior Trees.", + "text": "Check out the BTTask class, which provides the foundation for various building blocks of Behavior Trees.", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "description", + "text": "description", + "markers": { + "1": "description" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "description", + "text": "description", + "markers": { + "1": "description" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "clone() <2/>", + "text": "clone() ", + "markers": { + "1": "clone", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "clone() <2/>", + "text": "clone() ", + "markers": { + "1": "clone", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "copy_other(other: BehaviorTree)", + "text": "copy_other(other: BehaviorTree)", + "markers": { + "1": "copy_other", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "copy_other(other: BehaviorTree)", + "text": "copy_other(other: BehaviorTree)", + "markers": { + "1": "copy_other", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_root_task() <2/>", + "text": "get_root_task() ", + "markers": { + "1": "get_root_task", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_root_task() <2/>", + "text": "get_root_task() ", + "markers": { + "1": "get_root_task", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": { + "1": "BTInstance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": { + "1": "BTInstance" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/>", + "text": "instantiate(agent: , blackboard: Blackboard, instance_owner: , custom_scene_root: = null) ", + "markers": { + "1": "instantiate", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "Node", + "6": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/>", + "text": "instantiate(agent: , blackboard: Blackboard, instance_owner: , custom_scene_root: = null) ", + "markers": { + "1": "instantiate", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "Node", + "6": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_root_task(task: BTTask)", + "text": "set_root_task(task: BTTask)", + "markers": { + "1": "set_root_task", + "2": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_root_task(task: BTTask)", + "text": "set_root_task(task: BTTask)", + "markers": { + "1": "set_root_task", + "2": "BTTask" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Signals", + "text": "Signals", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "plan_changed() 🔗", + "text": "plan_changed() 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the BlackboardPlan changes.", + "text": "Emitted when the BlackboardPlan changes.", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan blackboard_plan 🔗", + "text": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_blackboard_plan(value: BlackboardPlan)", + "text": " set_blackboard_plan(value: BlackboardPlan)", + "markers": { + "1": "void", + "2": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan get_blackboard_plan()", + "text": "BlackboardPlan get_blackboard_plan()", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "text": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> description = <2/> 🔗", + "text": " description = 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_description(value: <2/>)", + "text": " set_description(value: )", + "markers": { + "1": "void", + "2": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_description()", + "text": " get_description()", + "markers": { + "1": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "User-provided description of the BehaviorTree.", + "text": "User-provided description of the BehaviorTree.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree clone() <2/> 🔗", + "text": "BehaviorTree clone() 🔗", + "markers": { + "1": "BehaviorTree", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Makes a copy of the BehaviorTree resource.", + "text": "Makes a copy of the BehaviorTree resource.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> copy_other(other: BehaviorTree) 🔗", + "text": " copy_other(other: BehaviorTree) 🔗", + "markers": { + "1": "void", + "2": "BehaviorTree", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Become a copy of another behavior tree.", + "text": "Become a copy of another behavior tree.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask get_root_task() <2/> 🔗", + "text": "BTTask get_root_task() 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the root task of the BehaviorTree resource.", + "text": "Returns the root task of the BehaviorTree resource.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTInstance instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/> 🔗", + "text": "BTInstance instantiate(agent: , blackboard: Blackboard, instance_owner: , custom_scene_root: = null) 🔗", + "markers": { + "1": "BTInstance", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "Node", + "6": "const", + "7": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Instantiates the behavior tree and returns BTInstance. <2/> should be the scene node that will own the behavior tree instance. This is typically a BTPlayer, BTState, or a custom player node that controls the behavior tree execution. Make sure to pass a Blackboard with values populated from blackboard_plan. See also BlackboardPlan.populate_blackboard & BlackboardPlan.create_blackboard.", + "text": "Instantiates the behavior tree and returns BTInstance. should be the scene node that will own the behavior tree instance. This is typically a BTPlayer, BTState, or a custom player node that controls the behavior tree execution. Make sure to pass a Blackboard with values populated from blackboard_plan. See also BlackboardPlan.populate_blackboard & BlackboardPlan.create_blackboard.", + "markers": { + "1": "BTInstance", + "2": "instance_owner", + "3": "BTPlayer", + "4": "BTState", + "5": "Blackboard", + "6": "blackboard_plan", + "7": "BlackboardPlan.populate_blackboard", + "8": "BlackboardPlan.create_blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/> is not <2/>, it will be used as the scene root for the newly instantiated behavior tree; otherwise, the scene root will be set to <3/>. Scene root is essential for BBNode instances to work properly.", + "text": "If is not , it will be used as the scene root for the newly instantiated behavior tree; otherwise, the scene root will be set to . Scene root is essential for BBNode instances to work properly.", + "markers": { + "1": "custom_scene_root", + "2": "null", + "3": "instance_owner.owner", + "4": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_root_task(task: BTTask) 🔗", + "text": " set_root_task(task: BTTask) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Assigns a new root task to the BehaviorTree resource.", + "text": "Assigns a new root task to the BehaviorTree resource.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BehaviorTreeData", + "text": "BehaviorTreeData", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Represents current state of a BehaviorTree instance.", + "text": "Represents current state of a BehaviorTree instance.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "This class is used by the LimboAI debugger for the serialization and deserialization of BehaviorTree instance data.", + "text": "This class is used by the LimboAI debugger for the serialization and deserialization of BehaviorTree instance data.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Additionally, it can be used with BehaviorTreeView to visualize the current state of a BehaviorTree instance. It is meant to be utilized in custom in-game tools.", + "text": "Additionally, it can be used with BehaviorTreeView to visualize the current state of a BehaviorTree instance. It is meant to be utilized in custom in-game tools.", + "markers": { + "1": "BehaviorTreeView", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BehaviorTreeData", + "text": "BehaviorTreeData", + "markers": { + "1": "BehaviorTreeData" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTreeData", + "text": "BehaviorTreeData", + "markers": { + "1": "BehaviorTreeData" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "create_from_bt_instance(bt_instance: BTInstance) <3/>", + "text": "create_from_bt_instance(bt_instance: BTInstance) ", + "markers": { + "1": "create_from_bt_instance", + "2": "BTInstance", + "3": "static" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "create_from_bt_instance(bt_instance: BTInstance) <3/>", + "text": "create_from_bt_instance(bt_instance: BTInstance) ", + "markers": { + "1": "create_from_bt_instance", + "2": "BTInstance", + "3": "static" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) <3/> 🔗", + "text": "BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) 🔗", + "markers": { + "1": "BehaviorTreeData", + "2": "BTInstance", + "3": "static", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns current state of the <1/> encoded as a BehaviorTreeData, suitable for use with BehaviorTreeView.", + "text": "Returns current state of the encoded as a BehaviorTreeData, suitable for use with BehaviorTreeView.", + "markers": { + "1": "bt_instance", + "2": "BehaviorTreeView" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Behavior tree instance can be acquired with BTPlayer.get_bt_instance.", + "text": "Behavior tree instance can be acquired with BTPlayer.get_bt_instance.", + "markers": { + "1": "BTPlayer.get_bt_instance" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BehaviorTreeView", + "text": "BehaviorTreeView", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Visualizes the current state of a BehaviorTree instance.", + "text": "Visualizes the current state of a BehaviorTree instance.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Visualizes the current state of a BehaviorTree instance. See also BehaviorTreeData.", + "text": "Visualizes the current state of a BehaviorTree instance. See also BehaviorTreeData.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTreeData" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "update_interval_msec", + "text": "update_interval_msec", + "markers": { + "1": "update_interval_msec" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "update_interval_msec", + "text": "update_interval_msec", + "markers": { + "1": "update_interval_msec" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "clear()", + "text": "clear()", + "markers": { + "1": "clear" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "clear()", + "text": "clear()", + "markers": { + "1": "clear" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "update_tree(behavior_tree_data: BehaviorTreeData)", + "text": "update_tree(behavior_tree_data: BehaviorTreeData)", + "markers": { + "1": "update_tree", + "2": "BehaviorTreeData" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "update_tree(behavior_tree_data: BehaviorTreeData)", + "text": "update_tree(behavior_tree_data: BehaviorTreeData)", + "markers": { + "1": "update_tree", + "2": "BehaviorTreeData" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Signals", + "text": "Signals", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "task_selected(type_name: <1/>, script_path: <2/>) 🔗", + "text": "task_selected(type_name: , script_path: ) 🔗", + "markers": { + "1": "String", + "2": "String", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when a task item is selected in BehaviorTreeView.", + "text": "Emitted when a task item is selected in BehaviorTreeView.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> update_interval_msec = <2/> 🔗", + "text": " update_interval_msec = 🔗", + "markers": { + "1": "int", + "2": "0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_update_interval_msec(value: <2/>)", + "text": " set_update_interval_msec(value: )", + "markers": { + "1": "void", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_update_interval_msec()", + "text": " get_update_interval_msec()", + "markers": { + "1": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Minimum delay between two updates (in milliseconds). Set to higher values for a lower CPU load.", + "text": "Minimum delay between two updates (in milliseconds). Set to higher values for a lower CPU load.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> clear() 🔗", + "text": " clear() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Clears the tree view.", + "text": "Clears the tree view.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> update_tree(behavior_tree_data: BehaviorTreeData) 🔗", + "text": " update_tree(behavior_tree_data: BehaviorTreeData) 🔗", + "markers": { + "1": "void", + "2": "BehaviorTreeData", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Updates the representation of a BehaviorTree instance. See also BehaviorTreeData.", + "text": "Updates the representation of a BehaviorTree instance. See also BehaviorTreeData.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTreeData" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "text": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "prefetch_nodepath_vars", + "text": "prefetch_nodepath_vars", + "markers": { + "1": "prefetch_nodepath_vars" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "prefetch_nodepath_vars", + "text": "prefetch_nodepath_vars", + "markers": { + "1": "prefetch_nodepath_vars" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null)", + "text": "create_blackboard(prefetch_root: , parent_scope: Blackboard = null, prefetch_root_for_base_plan: = null)", + "markers": { + "1": "create_blackboard", + "2": "Node", + "3": "Blackboard", + "4": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null)", + "text": "create_blackboard(prefetch_root: , parent_scope: Blackboard = null, prefetch_root_for_base_plan: = null)", + "markers": { + "1": "create_blackboard", + "2": "Node", + "3": "Blackboard", + "4": "Node" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_base_plan() <2/>", + "text": "get_base_plan() ", + "markers": { + "1": "get_base_plan", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_base_plan() <2/>", + "text": "get_base_plan() ", + "markers": { + "1": "get_base_plan", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_parent_scope_plan_provider() <2/>", + "text": "get_parent_scope_plan_provider() ", + "markers": { + "1": "get_parent_scope_plan_provider", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_parent_scope_plan_provider() <2/>", + "text": "get_parent_scope_plan_provider() ", + "markers": { + "1": "get_parent_scope_plan_provider", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "is_derived() <2/>", + "text": "is_derived() ", + "markers": { + "1": "is_derived", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "is_derived() <2/>", + "text": "is_derived() ", + "markers": { + "1": "is_derived", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null)", + "text": "populate_blackboard(blackboard: Blackboard, overwrite: , prefetch_root: , prefetch_root_for_base_plan: = null)", + "markers": { + "1": "populate_blackboard", + "2": "Blackboard", + "3": "bool", + "4": "Node", + "5": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null)", + "text": "populate_blackboard(blackboard: Blackboard, overwrite: , prefetch_root: , prefetch_root_for_base_plan: = null)", + "markers": { + "1": "populate_blackboard", + "2": "Blackboard", + "3": "bool", + "4": "Node", + "5": "Node" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_base_plan(blackboard_plan: BlackboardPlan)", + "text": "set_base_plan(blackboard_plan: BlackboardPlan)", + "markers": { + "1": "set_base_plan", + "2": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_base_plan(blackboard_plan: BlackboardPlan)", + "text": "set_base_plan(blackboard_plan: BlackboardPlan)", + "markers": { + "1": "set_base_plan", + "2": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_parent_scope_plan_provider(callable: <2/>)", + "text": "set_parent_scope_plan_provider(callable: )", + "markers": { + "1": "set_parent_scope_plan_provider", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_parent_scope_plan_provider(callable: <2/>)", + "text": "set_parent_scope_plan_provider(callable: )", + "markers": { + "1": "set_parent_scope_plan_provider", + "2": "Callable" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "sync_with_base_plan()", + "text": "sync_with_base_plan()", + "markers": { + "1": "sync_with_base_plan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "sync_with_base_plan()", + "text": "sync_with_base_plan()", + "markers": { + "1": "sync_with_base_plan" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> prefetch_nodepath_vars = <2/> 🔗", + "text": " prefetch_nodepath_vars = 🔗", + "markers": { + "1": "bool", + "2": "true", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_prefetch_nodepath_vars(value: <2/>)", + "text": " set_prefetch_nodepath_vars(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_prefetching_nodepath_vars()", + "text": " is_prefetching_nodepath_vars()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Enables or disables <1/> variable prefetching. If <2/>, <3/> values will be replaced with node instances when the Blackboard is created.", + "text": "Enables or disables variable prefetching. If , values will be replaced with node instances when the Blackboard is created.", + "markers": { + "1": "NodePath", + "2": "true", + "3": "NodePath", + "4": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null) 🔗", + "text": "Blackboard create_blackboard(prefetch_root: , parent_scope: Blackboard = null, prefetch_root_for_base_plan: = null) 🔗", + "markers": { + "1": "Blackboard", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Constructs a new instance of a Blackboard using this plan. If <2/> prefetching is enabled, <3/> will be used to retrieve node instances for <4/> variables and substitute their values.", + "text": "Constructs a new instance of a Blackboard using this plan. If prefetching is enabled, will be used to retrieve node instances for variables and substitute their values.", + "markers": { + "1": "Blackboard", + "2": "NodePath", + "3": "prefetch_root", + "4": "NodePath" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan get_base_plan() <2/> 🔗", + "text": "BlackboardPlan get_base_plan() 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the base plan. See is_derived.", + "text": "Returns the base plan. See is_derived.", + "markers": { + "1": "is_derived" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_parent_scope_plan_provider() <2/> 🔗", + "text": " get_parent_scope_plan_provider() 🔗", + "markers": { + "1": "Callable", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the parent scope plan provider - a callable that returns a BlackboardPlan.", + "text": "Returns the parent scope plan provider - a callable that returns a BlackboardPlan.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_derived() <2/> 🔗", + "text": " is_derived() 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if this plan is derived from another, i.e., the base plan is not <2/>. A derived plan can only contain variables that are present in the base plan, and only variable values can be different.", + "text": "Returns if this plan is derived from another, i.e., the base plan is not . A derived plan can only contain variables that are present in the base plan, and only variable values can be different.", + "markers": { + "1": "true", + "2": "null" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null) 🔗", + "text": " populate_blackboard(blackboard: Blackboard, overwrite: , prefetch_root: , prefetch_root_for_base_plan: = null) 🔗", + "markers": { + "1": "void", + "2": "Blackboard", + "3": "bool", + "4": "Node", + "5": "Node", + "6": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Populates <1/> with the variables from this plan. If <2/> is <3/>, existing variables with the same names will be overwritten. If <4/> prefetching is enabled, <5/> will be used to retrieve node instances for <6/> variables and substitute their values.", + "text": "Populates with the variables from this plan. If is , existing variables with the same names will be overwritten. If prefetching is enabled, will be used to retrieve node instances for variables and substitute their values.", + "markers": { + "1": "blackboard", + "2": "overwrite", + "3": "true", + "4": "NodePath", + "5": "prefetch_root", + "6": "NodePath" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_base_plan(blackboard_plan: BlackboardPlan) 🔗", + "text": " set_base_plan(blackboard_plan: BlackboardPlan) 🔗", + "markers": { + "1": "void", + "2": "BlackboardPlan", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the base plan. If assigned, this plan will be derived from the base plan.", + "text": "Sets the base plan. If assigned, this plan will be derived from the base plan.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Use with caution, as it will remove variables not present in the base plan. Only use this for custom tooling.", + "text": "Use with caution, as it will remove variables not present in the base plan. Only use this for custom tooling.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_parent_scope_plan_provider(callable: <2/>) 🔗", + "text": " set_parent_scope_plan_provider(callable: ) 🔗", + "markers": { + "1": "void", + "2": "Callable", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the parent scope plan provider - a callable that returns a BlackboardPlan. Used to provide hints in the inspector. When set, mapping feature becomes available.", + "text": "Sets the parent scope plan provider - a callable that returns a BlackboardPlan. Used to provide hints in the inspector. When set, mapping feature becomes available.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> sync_with_base_plan() 🔗", + "text": " sync_with_base_plan() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Synchronizes this plan with the base plan: removes variables not present in the base plan, and updates type information. Only use this for custom tooling.", + "text": "Synchronizes this plan with the base plan: removes variables not present in the base plan, and updates type information. Only use this for custom tooling.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BT", + "text": "BT", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTTask", + "text": "Inherited By: BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base of BTTask.", + "text": "Base of BTTask.", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Enumerations", + "text": "Enumerations", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "enum Status: 🔗", + "text": "enum Status: 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status FRESH = <2/>", + "text": "Status FRESH = ", + "markers": { + "1": "Status", + "2": "0" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Task wasn’t executed yet or it was aborted and reset.", + "text": "Task wasn’t executed yet or it was aborted and reset.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status RUNNING = <2/>", + "text": "Status RUNNING = ", + "markers": { + "1": "Status", + "2": "1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Task is being performed and hasn’t finished yet.", + "text": "Task is being performed and hasn’t finished yet.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status FAILURE = <2/>", + "text": "Status FAILURE = ", + "markers": { + "1": "Status", + "2": "2" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Task has finished with failure.", + "text": "Task has finished with failure.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status SUCCESS = <2/>", + "text": "Status SUCCESS = ", + "markers": { + "1": "Status", + "2": "3" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Task has finished with success.", + "text": "Task has finished with success.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTAction", + "text": "BTAction", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTTask < BT", + "text": "Inherits: BTTask BT", + "markers": { + "1": "BTTask", + "2": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTAwaitAnimation, BTCallMethod, BTConsolePrint, BTEvaluateExpression, BTFail, BTPauseAnimation, BTPlayAnimation, BTRandomWait, BTSetAgentProperty, BTSetVar, BTStopAnimation, BTWait, BTWaitTicks", + "text": "Inherited By: BTAwaitAnimation, BTCallMethod, BTConsolePrint, BTEvaluateExpression, BTFail, BTPauseAnimation, BTPlayAnimation, BTRandomWait, BTSetAgentProperty, BTSetVar, BTStopAnimation, BTWait, BTWaitTicks", + "markers": { + "1": "BTAwaitAnimation", + "2": "BTCallMethod", + "3": "BTConsolePrint", + "4": "BTEvaluateExpression", + "5": "BTFail", + "6": "BTPauseAnimation", + "7": "BTPlayAnimation", + "8": "BTRandomWait", + "9": "BTSetAgentProperty", + "10": "BTSetVar", + "11": "BTStopAnimation", + "12": "BTWait", + "13": "BTWaitTicks" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for all BehaviorTree actions.", + "text": "Base class for all BehaviorTree actions.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for all actions within a BehaviorTree. You can create your own actions by extending the BTAction class.", + "text": "Base class for all actions within a BehaviorTree. You can create your own actions by extending the BTAction class.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Represents a specific behavior or action in a BehaviorTree that an agent should execute. Actions are the lowest level of the BehaviorTree hierarchy and are responsible for performing the actual work required to achieve a goal. Actions do not have child tasks.", + "text": "Represents a specific behavior or action in a BehaviorTree that an agent should execute. Actions are the lowest level of the BehaviorTree hierarchy and are responsible for performing the actual work required to achieve a goal. Actions do not have child tasks.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A single action can perform a task within one or multiple ticks. If it takes more than one tick to complete the task, the action should return <1/> status. When the task is finished, the action returns either <2/> or <3/> to indicate the outcome.", + "text": "A single action can perform a task within one or multiple ticks. If it takes more than one tick to complete the task, the action should return status. When the task is finished, the action returns either or to indicate the outcome.", + "markers": { + "1": "RUNNING", + "2": "SUCCESS", + "3": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTAlwaysFail", + "text": "BTAlwaysFail", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that converts <1/> into <2/>.", + "text": "BT decorator that converts into .", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTAlwaysSucceed", + "text": "BTAlwaysSucceed", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that converts <1/> into <2/>.", + "text": "BT decorator that converts into .", + "markers": { + "1": "FAILURE", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTAwaitAnimation", + "text": "BTAwaitAnimation", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that waits for an animation to finish playing.", + "text": "BT action that waits for an animation to finish playing.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTAwaitAnimation action waits for an animation on the specified <1/> node to finish playing and returns <2/>.", + "text": "BTAwaitAnimation action waits for an animation on the specified node to finish playing and returns .", + "markers": { + "1": "AnimationPlayer", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the specified animation has finished playing or if the specified animation is not currently playing.", + "text": "Returns if the specified animation has finished playing or if the specified animation is not currently playing.", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the specified animation doesn’t exist or if the action fails to get the <2/> node.", + "text": "Returns if the specified animation doesn’t exist or if the action fails to get the node.", + "markers": { + "1": "FAILURE", + "2": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "animation_name", + "text": "animation_name", + "markers": { + "1": "animation_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "animation_name", + "text": "animation_name", + "markers": { + "1": "animation_name" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "max_time", + "text": "max_time", + "markers": { + "1": "max_time" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "max_time", + "text": "max_time", + "markers": { + "1": "max_time" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> animation_name = <2/> 🔗", + "text": " animation_name = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_animation_name(value: <2/>)", + "text": " set_animation_name(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_animation_name()", + "text": " get_animation_name()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Animation’s key within the <1/> node.", + "text": "Animation’s key within the node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode animation_player 🔗", + "text": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_animation_player(value: BBNode)", + "text": " set_animation_player(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode get_animation_player()", + "text": "BBNode get_animation_player()", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the <1/> node.", + "text": "Parameter that specifies the node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> max_time = <2/> 🔗", + "text": " max_time = 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_max_time(value: <2/>)", + "text": " set_max_time(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_max_time()", + "text": " get_max_time()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTAwaitAnimation will stop waiting and return <1/>.", + "text": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTAwaitAnimation will stop waiting and return .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTCallMethod", + "text": "BTCallMethod", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that calls a method on a specified <1/> or <2/>.", + "text": "BT action that calls a method on a specified or .", + "markers": { + "1": "Node", + "2": "Object" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTCallMethod action calls a method on the specified <2/> or <3/> instance and returns <4/>.", + "text": "BTCallMethod action calls a method on the specified or instance and returns .", + "markers": { + "1": "method", + "2": "Node", + "3": "Object", + "4": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the action encounters an issue during the method execution.", + "text": "Returns if the action encounters an issue during the method execution.", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Array[BBVariant]", + "text": "Array[BBVariant]", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[BBVariant]", + "text": "Array[BBVariant]", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "args", + "text": "args", + "markers": { + "1": "args" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "args", + "text": "args", + "markers": { + "1": "args" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "args_include_delta", + "text": "args_include_delta", + "markers": { + "1": "args_include_delta" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "args_include_delta", + "text": "args_include_delta", + "markers": { + "1": "args_include_delta" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "method", + "text": "method", + "markers": { + "1": "method" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "method", + "text": "method", + "markers": { + "1": "method" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "node", + "text": "node", + "markers": { + "1": "node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "node", + "text": "node", + "markers": { + "1": "node" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "result_var", + "text": "result_var", + "markers": { + "1": "result_var" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "result_var", + "text": "result_var", + "markers": { + "1": "result_var" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[BBVariant] args = <2/> 🔗", + "text": "Array[BBVariant] args = 🔗", + "markers": { + "1": "BBVariant", + "2": "[]", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_args(value: Array[BBVariant])", + "text": " set_args(value: Array[BBVariant])", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[BBVariant] get_args()", + "text": "Array[BBVariant] get_args()", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The arguments to be passed when calling the method.", + "text": "The arguments to be passed when calling the method.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> args_include_delta = <2/> 🔗", + "text": " args_include_delta = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_include_delta(value: <2/>)", + "text": " set_include_delta(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_delta_included()", + "text": " is_delta_included()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Include delta as a first parameter and shift the position of the rest of the arguments if any.", + "text": "Include delta as a first parameter and shift the position of the rest of the arguments if any.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> method = <2/> 🔗", + "text": " method = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_method(value: <2/>)", + "text": " set_method(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_method()", + "text": " get_method()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The name of the method to be called.", + "text": "The name of the method to be called.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode node 🔗", + "text": "BBNode node 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_node_param(value: BBNode)", + "text": " set_node_param(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode get_node_param()", + "text": "BBNode get_node_param()", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Specifies the <1/> or <2/> instance containing the method to be called.", + "text": "Specifies the or instance containing the method to be called.", + "markers": { + "1": "Node", + "2": "Object" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> result_var = <2/> 🔗", + "text": " result_var = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_result_var(value: <2/>)", + "text": " set_result_var(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_result_var()", + "text": " get_result_var()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "if non-empty, assign the result of the method call to the blackboard variable specified by this property.", + "text": "if non-empty, assign the result of the method call to the blackboard variable specified by this property.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTCheckAgentProperty", + "text": "BTCheckAgentProperty", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTCondition < BTTask < BT", + "text": "Inherits: BTCondition BTTask BT", + "markers": { + "1": "BTCondition", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT condition that checks agent’s property value.", + "text": "BT condition that checks agent’s property value.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTCheckAgentProperty examines the agent’s property value and compares it to value.", + "text": "BTCheckAgentProperty examines the agent’s property value and compares it to value.", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> or <2/> based on the check_type.", + "text": "Returns or based on the check_type.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "check_type" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "CheckType", + "text": "CheckType", + "markers": { + "1": "CheckType" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType", + "text": "CheckType", + "markers": { + "1": "CheckType" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "check_type", + "text": "check_type", + "markers": { + "1": "check_type" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "check_type", + "text": "check_type", + "markers": { + "1": "check_type" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "property", + "text": "property", + "markers": { + "1": "property" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "property", + "text": "property", + "markers": { + "1": "property" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType check_type = <2/> 🔗", + "text": "CheckType check_type = 🔗", + "markers": { + "1": "CheckType", + "2": "0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_check_type(value: CheckType)", + "text": " set_check_type(value: CheckType)", + "markers": { + "1": "void", + "2": "CheckType" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType get_check_type()", + "text": "CheckType get_check_type()", + "markers": { + "1": "CheckType" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The type of check to be performed.", + "text": "The type of check to be performed.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> property = <2/> 🔗", + "text": " property = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_property(value: <2/>)", + "text": " set_property(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_property()", + "text": " get_property()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the agent’s property to be compared.", + "text": "Parameter that specifies the agent’s property to be compared.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant value 🔗", + "text": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_value(value: BBVariant)", + "text": " set_value(value: BBVariant)", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant get_value()", + "text": "BBVariant get_value()", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the value against which an agent’s property will be compared.", + "text": "Parameter that specifies the value against which an agent’s property will be compared.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTCheckTrigger", + "text": "BTCheckTrigger", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTCondition < BTTask < BT", + "text": "Inherits: BTCondition BTTask BT", + "markers": { + "1": "BTCondition", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT condition that checks a trigger (a boolean variable).", + "text": "BT condition that checks a trigger (a boolean variable).", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTCheckTrigger verifies whether the variable is set to <2/>. If it is, the task switches it to <3/> and returns <4/>. Otherwise, it returns <5/>.", + "text": "BTCheckTrigger verifies whether the variable is set to . If it is, the task switches it to and returns . Otherwise, it returns .", + "markers": { + "1": "variable", + "2": "true", + "3": "false", + "4": "SUCCESS", + "5": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTCheckTrigger can function as a “gate” within a BTSequence: when the trigger variable is set to <2/>, it permits the execution of subsequent tasks and then changes the variable to <3/>.", + "text": "BTCheckTrigger can function as a “gate” within a BTSequence: when the trigger variable is set to , it permits the execution of subsequent tasks and then changes the variable to .", + "markers": { + "1": "BTSequence", + "2": "true", + "3": "false" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> variable = <2/> 🔗", + "text": " variable = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_variable(value: <2/>)", + "text": " set_variable(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_variable()", + "text": " get_variable()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A boolean variable on the blackboard used as a trigger. See also BTTask.blackboard.", + "text": "A boolean variable on the blackboard used as a trigger. See also BTTask.blackboard.", + "markers": { + "1": "BTTask.blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If variable’s value is <1/>, BTCheckTrigger will switch it to <2/> and return <3/>.", + "text": "If variable’s value is , BTCheckTrigger will switch it to and return .", + "markers": { + "1": "true", + "2": "false", + "3": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If variable’s value is <1/>, BTCheckTrigger will return <2/>.", + "text": "If variable’s value is , BTCheckTrigger will return .", + "markers": { + "1": "false", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTCheckVar", + "text": "BTCheckVar", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTCondition < BTTask < BT", + "text": "Inherits: BTCondition BTTask BT", + "markers": { + "1": "BTCondition", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT condition that checks a variable on the blackboard.", + "text": "BT condition that checks a variable on the blackboard.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTCheckVar evaluates the variable against value and returns <3/> or <4/> based on the check_type.", + "text": "BTCheckVar evaluates the variable against value and returns or based on the check_type.", + "markers": { + "1": "variable", + "2": "value", + "3": "SUCCESS", + "4": "FAILURE", + "5": "check_type" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "CheckType", + "text": "CheckType", + "markers": { + "1": "CheckType" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType", + "text": "CheckType", + "markers": { + "1": "CheckType" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "check_type", + "text": "check_type", + "markers": { + "1": "check_type" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "check_type", + "text": "check_type", + "markers": { + "1": "check_type" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType check_type = <2/> 🔗", + "text": "CheckType check_type = 🔗", + "markers": { + "1": "CheckType", + "2": "0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_check_type(value: CheckType)", + "text": " set_check_type(value: CheckType)", + "markers": { + "1": "void", + "2": "CheckType" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType get_check_type()", + "text": "CheckType get_check_type()", + "markers": { + "1": "CheckType" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The type of check to be performed.", + "text": "The type of check to be performed.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant value 🔗", + "text": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_value(value: BBVariant)", + "text": " set_value(value: BBVariant)", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant get_value()", + "text": "BBVariant get_value()", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A parameter that specifies the value against which the variable will be compared.", + "text": "A parameter that specifies the value against which the variable will be compared.", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> variable = <2/> 🔗", + "text": " variable = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_variable(value: <2/>)", + "text": " set_variable(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_variable()", + "text": " get_variable()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The name of the variable to check its value.", + "text": "The name of the variable to check its value.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTComment", + "text": "BTComment", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTTask < BT", + "text": "Inherits: BTTask BT", + "markers": { + "1": "BTTask", + "2": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTComment adds annotations or explanatory notes to a BehaviorTree.", + "text": "BTComment adds annotations or explanatory notes to a BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTComment is used to add annotations or explanatory notes to a BehaviorTree.", + "text": "BTComment is used to add annotations or explanatory notes to a BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Comments are not executed as part of the tree and are removed from runtime instances of the BehaviorTree.", + "text": "Comments are not executed as part of the tree and are removed from runtime instances of the BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTComposite", + "text": "BTComposite", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTTask < BT", + "text": "Inherits: BTTask BT", + "markers": { + "1": "BTTask", + "2": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTDynamicSelector, BTDynamicSequence, BTParallel, BTProbabilitySelector, BTRandomSelector, BTRandomSequence, BTSelector, BTSequence", + "text": "Inherited By: BTDynamicSelector, BTDynamicSequence, BTParallel, BTProbabilitySelector, BTRandomSelector, BTRandomSequence, BTSelector, BTSequence", + "markers": { + "1": "BTDynamicSelector", + "2": "BTDynamicSequence", + "3": "BTParallel", + "4": "BTProbabilitySelector", + "5": "BTRandomSelector", + "6": "BTRandomSequence", + "7": "BTSelector", + "8": "BTSequence" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for BT composite tasks.", + "text": "Base class for BT composite tasks.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for all BehaviorTree composite tasks. You can create your own composite tasks by extending the BTComposite class.", + "text": "Base class for all BehaviorTree composite tasks. You can create your own composite tasks by extending the BTComposite class.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Composite is a control task within a BehaviorTree that contains one or more child tasks. It defines the structure and flow of the BehaviorTree by specifying how child tasks are executed. Composites can be used to group related tasks into a single unit, making it easier to manage and maintain the BehaviorTree. Examples of BehaviorTree composites include BTSelector, BTSequence, and BTParallel.", + "text": "Composite is a control task within a BehaviorTree that contains one or more child tasks. It defines the structure and flow of the BehaviorTree by specifying how child tasks are executed. Composites can be used to group related tasks into a single unit, making it easier to manage and maintain the BehaviorTree. Examples of BehaviorTree composites include BTSelector, BTSequence, and BTParallel.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree", + "3": "BehaviorTree", + "4": "BehaviorTree", + "5": "BTSelector", + "6": "BTSequence", + "7": "BTParallel" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTCondition", + "text": "BTCondition", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTTask < BT", + "text": "Inherits: BTTask BT", + "markers": { + "1": "BTTask", + "2": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTCheckAgentProperty, BTCheckTrigger, BTCheckVar", + "text": "Inherited By: BTCheckAgentProperty, BTCheckTrigger, BTCheckVar", + "markers": { + "1": "BTCheckAgentProperty", + "2": "BTCheckTrigger", + "3": "BTCheckVar" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for BT conditions.", + "text": "Base class for BT conditions.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for all BehaviorTree conditions. You can create your own conditions by extending the BTCondition class.", + "text": "Base class for all BehaviorTree conditions. You can create your own conditions by extending the BTCondition class.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Condition is a task within a BehaviorTree that checks for a specific condition before executing subsequent tasks. It is often used inside composite tasks to control the execution flow. Conditions are used to verify the state of the environment, check for the presence of an enemy, or evaluate the health status of the agent. The use of condition tasks in a BehaviorTree can improve system efficiency and prevent unnecessary actions. However, they may not be suitable for complex decision-making processes, and too many condition tasks can make the BehaviorTree difficult to read.", + "text": "Condition is a task within a BehaviorTree that checks for a specific condition before executing subsequent tasks. It is often used inside composite tasks to control the execution flow. Conditions are used to verify the state of the environment, check for the presence of an enemy, or evaluate the health status of the agent. The use of condition tasks in a BehaviorTree can improve system efficiency and prevent unnecessary actions. However, they may not be suitable for complex decision-making processes, and too many condition tasks can make the BehaviorTree difficult to read.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree", + "3": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Conditions typically don’t take multiple ticks to finish and return either <1/> or <2/> immediately.", + "text": "Conditions typically don’t take multiple ticks to finish and return either or immediately.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTConsolePrint", + "text": "BTConsolePrint", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action task that outputs text to the console.", + "text": "BT action task that outputs text to the console.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTConsolePrint action outputs text to the console and returns <1/>. It can include placeholders for format arguments similar to GDScript’s % operator.", + "text": "BTConsolePrint action outputs text to the console and returns . It can include placeholders for format arguments similar to GDScript’s % operator.", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "bb_format_parameters", + "text": "bb_format_parameters", + "markers": { + "1": "bb_format_parameters" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "bb_format_parameters", + "text": "bb_format_parameters", + "markers": { + "1": "bb_format_parameters" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "text", + "text": "text", + "markers": { + "1": "text" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "text", + "text": "text", + "markers": { + "1": "text" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> bb_format_parameters = <2/> 🔗", + "text": " bb_format_parameters = 🔗", + "markers": { + "1": "PackedStringArray", + "2": "PackedStringArray()", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_bb_format_parameters(value: <2/>)", + "text": " set_bb_format_parameters(value: )", + "markers": { + "1": "void", + "2": "PackedStringArray" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_bb_format_parameters()", + "text": " get_bb_format_parameters()", + "markers": { + "1": "PackedStringArray" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The values of format parameters are used as format arguments for the text that will be printed.", + "text": "The values of format parameters are used as format arguments for the text that will be printed.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: The returned array is copied and any changes to it will not update the original property value. See <1/> for more details.", + "text": "Note: The returned array is copied and any changes to it will not update the original property value. See for more details.", + "markers": { + "1": "PackedStringArray" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> text = <2/> 🔗", + "text": " text = 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_text(value: <2/>)", + "text": " set_text(value: )", + "markers": { + "1": "void", + "2": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_text()", + "text": " get_text()", + "markers": { + "1": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The text to be printed, which can include multiple placeholders to be substituted with format arguments. These placeholders follow the same format as GDScript’s % operator and typically start with ‘%’ followed by a format specifier. For instance: %s for string, %d for integer, %f for real.", + "text": "The text to be printed, which can include multiple placeholders to be substituted with format arguments. These placeholders follow the same format as GDScript’s % operator and typically start with ‘%’ followed by a format specifier. For instance: %s for string, %d for integer, %f for real.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTCooldown", + "text": "BTCooldown", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that executes its child task only if duration time has passed since the previous execution.", + "text": "BT decorator that executes its child task only if duration time has passed since the previous execution.", + "markers": { + "1": "duration" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTCooldown runs its child task only if duration time has passed since the last successful child task execution. It will only consider successful executions unless trigger_on_failure is set to <3/>.", + "text": "BTCooldown runs its child task only if duration time has passed since the last successful child task execution. It will only consider successful executions unless trigger_on_failure is set to .", + "markers": { + "1": "duration", + "2": "trigger_on_failure", + "3": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/>, if the child task results in <2/>.", + "text": "Returns , if the child task results in .", + "markers": { + "1": "RUNNING", + "2": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/>, if the child task results in <2/>, and triggers the cooldown timer.", + "text": "Returns , if the child task results in , and triggers the cooldown timer.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/>, if the child task results in <2/> or if duration time didn’t pass since the previous execution.", + "text": "Returns , if the child task results in or if duration time didn’t pass since the previous execution.", + "markers": { + "1": "FAILURE", + "2": "FAILURE", + "3": "duration" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "cooldown_state_var", + "text": "cooldown_state_var", + "markers": { + "1": "cooldown_state_var" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "cooldown_state_var", + "text": "cooldown_state_var", + "markers": { + "1": "cooldown_state_var" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "duration", + "text": "duration", + "markers": { + "1": "duration" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "duration", + "text": "duration", + "markers": { + "1": "duration" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "process_pause", + "text": "process_pause", + "markers": { + "1": "process_pause" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "process_pause", + "text": "process_pause", + "markers": { + "1": "process_pause" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "start_cooled", + "text": "start_cooled", + "markers": { + "1": "start_cooled" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "start_cooled", + "text": "start_cooled", + "markers": { + "1": "start_cooled" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "trigger_on_failure", + "text": "trigger_on_failure", + "markers": { + "1": "trigger_on_failure" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "trigger_on_failure", + "text": "trigger_on_failure", + "markers": { + "1": "trigger_on_failure" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> cooldown_state_var = <2/> 🔗", + "text": " cooldown_state_var = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_cooldown_state_var(value: <2/>)", + "text": " set_cooldown_state_var(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_cooldown_state_var()", + "text": " get_cooldown_state_var()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A boolean variable used to store the cooldown state in the Blackboard. If left empty, the variable will be automatically generated and assigned.", + "text": "A boolean variable used to store the cooldown state in the Blackboard. If left empty, the variable will be automatically generated and assigned.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If the variable’s value is set to <1/>, it indicates that the cooldown is activated. This feature is useful for checking the cooldown state from other parts of the tree or sharing it among different sections of the BehaviorTree.", + "text": "If the variable’s value is set to , it indicates that the cooldown is activated. This feature is useful for checking the cooldown state from other parts of the tree or sharing it among different sections of the BehaviorTree.", + "markers": { + "1": "true", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> duration = <2/> 🔗", + "text": " duration = 🔗", + "markers": { + "1": "float", + "2": "10.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_duration(value: <2/>)", + "text": " set_duration(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_duration()", + "text": " get_duration()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Time to wait before permitting another child’s execution.", + "text": "Time to wait before permitting another child’s execution.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> process_pause = <2/> 🔗", + "text": " process_pause = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_process_pause(value: <2/>)", + "text": " set_process_pause(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_process_pause()", + "text": " get_process_pause()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, process cooldown when the <2/> is paused.", + "text": "If , process cooldown when the is paused.", + "markers": { + "1": "true", + "2": "SceneTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> start_cooled = <2/> 🔗", + "text": " start_cooled = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_start_cooled(value: <2/>)", + "text": " set_start_cooled(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_start_cooled()", + "text": " get_start_cooled()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, initiate a cooldown as if the child had been executed before the first BT tick.", + "text": "If , initiate a cooldown as if the child had been executed before the first BT tick.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> trigger_on_failure = <2/> 🔗", + "text": " trigger_on_failure = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_trigger_on_failure(value: <2/>)", + "text": " set_trigger_on_failure(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_trigger_on_failure()", + "text": " get_trigger_on_failure()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, the cooldown will be activated if the child task also returns <2/>. Otherwise, the cooldown will only be triggered when the child task returns <3/>.", + "text": "If , the cooldown will be activated if the child task also returns . Otherwise, the cooldown will only be triggered when the child task returns .", + "markers": { + "1": "true", + "2": "FAILURE", + "3": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTDecorator", + "text": "BTDecorator", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTTask < BT", + "text": "Inherits: BTTask BT", + "markers": { + "1": "BTTask", + "2": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTAlwaysFail, BTAlwaysSucceed, BTCooldown, BTDelay, BTForEach, BTInvert, BTNewScope, BTProbability, BTRepeat, BTRepeatUntilFailure, BTRepeatUntilSuccess, BTRunLimit, BTTimeLimit", + "text": "Inherited By: BTAlwaysFail, BTAlwaysSucceed, BTCooldown, BTDelay, BTForEach, BTInvert, BTNewScope, BTProbability, BTRepeat, BTRepeatUntilFailure, BTRepeatUntilSuccess, BTRunLimit, BTTimeLimit", + "markers": { + "1": "BTAlwaysFail", + "2": "BTAlwaysSucceed", + "3": "BTCooldown", + "4": "BTDelay", + "5": "BTForEach", + "6": "BTInvert", + "7": "BTNewScope", + "8": "BTProbability", + "9": "BTRepeat", + "10": "BTRepeatUntilFailure", + "11": "BTRepeatUntilSuccess", + "12": "BTRunLimit", + "13": "BTTimeLimit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for BT decorators.", + "text": "Base class for BT decorators.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Base class for all BehaviorTree decorators. You can create your own decorators by extending the BTDecorator class.", + "text": "Base class for all BehaviorTree decorators. You can create your own decorators by extending the BTDecorator class.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A decorator is a task within a BehaviorTree that alters the behavior of its child task. Decorators can have only one child task.", + "text": "A decorator is a task within a BehaviorTree that alters the behavior of its child task. Decorators can have only one child task.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Decorators can be used to add conditions, limits, or other constraints to the execution of a task. Examples of BehaviorTree decorators include BTInvert, BTRepeat, and BTCooldown. The use of BehaviorTree decorators can simplify the design and implementation of complex behaviors by adding additional logic to existing tasks.", + "text": "Decorators can be used to add conditions, limits, or other constraints to the execution of a task. Examples of BehaviorTree decorators include BTInvert, BTRepeat, and BTCooldown. The use of BehaviorTree decorators can simplify the design and implementation of complex behaviors by adding additional logic to existing tasks.", + "markers": { + "1": "BehaviorTree", + "2": "BTInvert", + "3": "BTRepeat", + "4": "BTCooldown", + "5": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTDelay", + "text": "BTDelay", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that introduces a delay before executing its child task.", + "text": "BT decorator that introduces a delay before executing its child task.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTDelay introduces a delay of seconds before executing its child task. Returns <2/> during the delay period.", + "text": "BTDelay introduces a delay of seconds before executing its child task. Returns during the delay period.", + "markers": { + "1": "seconds", + "2": "RUNNING" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "seconds", + "text": "seconds", + "markers": { + "1": "seconds" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "seconds", + "text": "seconds", + "markers": { + "1": "seconds" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> seconds = <2/> 🔗", + "text": " seconds = 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_seconds(value: <2/>)", + "text": " set_seconds(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_seconds()", + "text": " get_seconds()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Delay duration in seconds.", + "text": "Delay duration in seconds.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTDynamicSelector", + "text": "BTDynamicSelector", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that executes tasks from scratch every tick until first <1/>.", + "text": "BT composite that executes tasks from scratch every tick until first .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTDynamicSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. Unlike BTSelector, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to retry higher-priority behaviors in every tick.", + "text": "BTDynamicSelector executes its child tasks sequentially, from first to last, until any child returns . Unlike BTSelector, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to retry higher-priority behaviors in every tick.", + "markers": { + "1": "SUCCESS", + "2": "BTSelector" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>. BTDynamicSelector will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task.", + "text": "Returns if a child task results in . BTDynamicSelector will remember the last child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in , it will abort the remembered task.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING", + "4": "BTSequence", + "5": "FAILURE", + "6": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if all child tasks result in <2/>.", + "text": "Returns if all child tasks result in .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>.", + "text": "Returns if a child task results in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTDynamicSequence", + "text": "BTDynamicSequence", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that executes tasks from scratch every tick as long as they return <1/>.", + "text": "BT composite that executes tasks from scratch every tick as long as they return .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTDynamicSequence executes its child tasks sequentially, from first to last, for as long as they return <1/>. Unlike BTSequence, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to recheck conditions preceding a long-running action during each tick and abort the <3/> action when any condition results in <4/>.", + "text": "BTDynamicSequence executes its child tasks sequentially, from first to last, for as long as they return . Unlike BTSequence, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to recheck conditions preceding a long-running action during each tick and abort the action when any condition results in .", + "markers": { + "1": "SUCCESS", + "2": "BTSequence", + "3": "RUNNING", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>. BTDynamicSequence will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task.", + "text": "Returns if a child task results in . BTDynamicSequence will remember the last child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in , it will abort the remembered task.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING", + "4": "BTSequence", + "5": "SUCCESS", + "6": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>.", + "text": "Returns if a child task results in .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if all child tasks result in <2/>.", + "text": "Returns if all child tasks result in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTEvaluateExpression", + "text": "BTEvaluateExpression", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that evaluates an <1/> against a specified <2/> or <3/>.", + "text": "BT action that evaluates an against a specified or .", + "markers": { + "1": "Expression", + "2": "Node", + "3": "Object" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTEvaluateExpression action evaluates an expression_string on the specified <2/> or <3/> instance and returns <4/> when the <5/> executes successfully.", + "text": "BTEvaluateExpression action evaluates an expression_string on the specified or instance and returns when the executes successfully.", + "markers": { + "1": "expression_string", + "2": "Node", + "3": "Object", + "4": "SUCCESS", + "5": "Expression" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the action encounters an issue during the <2/> parsing or execution.", + "text": "Returns if the action encounters an issue during the parsing or execution.", + "markers": { + "1": "FAILURE", + "2": "Expression" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "expression_string", + "text": "expression_string", + "markers": { + "1": "expression_string" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "expression_string", + "text": "expression_string", + "markers": { + "1": "expression_string" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "input_include_delta", + "text": "input_include_delta", + "markers": { + "1": "input_include_delta" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "input_include_delta", + "text": "input_include_delta", + "markers": { + "1": "input_include_delta" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "input_names", + "text": "input_names", + "markers": { + "1": "input_names" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "input_names", + "text": "input_names", + "markers": { + "1": "input_names" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Array[BBVariant]", + "text": "Array[BBVariant]", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[BBVariant]", + "text": "Array[BBVariant]", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "input_values", + "text": "input_values", + "markers": { + "1": "input_values" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "input_values", + "text": "input_values", + "markers": { + "1": "input_values" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "node", + "text": "node", + "markers": { + "1": "node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "node", + "text": "node", + "markers": { + "1": "node" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "result_var", + "text": "result_var", + "markers": { + "1": "result_var" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "result_var", + "text": "result_var", + "markers": { + "1": "result_var" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Error", + "text": "Error", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Error", + "text": "Error", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "parse()", + "text": "parse()", + "markers": { + "1": "parse" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "parse()", + "text": "parse()", + "markers": { + "1": "parse" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> expression_string = <2/> 🔗", + "text": " expression_string = 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_expression_string(value: <2/>)", + "text": " set_expression_string(value: )", + "markers": { + "1": "void", + "2": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_expression_string()", + "text": " get_expression_string()", + "markers": { + "1": "String" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The expression string to be parsed and executed.", + "text": "The expression string to be parsed and executed.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Warning: Call parse after updating expression_string to update the internal <3/> as it won’t be updated automatically.", + "text": "Warning: Call parse after updating expression_string to update the internal as it won’t be updated automatically.", + "markers": { + "1": "parse", + "2": "expression_string", + "3": "Expression" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> input_include_delta = <2/> 🔗", + "text": " input_include_delta = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_input_include_delta(value: <2/>)", + "text": " set_input_include_delta(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_input_delta_included()", + "text": " is_input_delta_included()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If enabled, the input variable <1/> will be added to input_names and input_values.", + "text": "If enabled, the input variable will be added to input_names and input_values.", + "markers": { + "1": "delta", + "2": "input_names", + "3": "input_values" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Warning: Call parse after toggling input_include_delta to update the internal <3/> as it won’t be updated automatically.", + "text": "Warning: Call parse after toggling input_include_delta to update the internal as it won’t be updated automatically.", + "markers": { + "1": "parse", + "2": "input_include_delta", + "3": "Expression" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> input_names = <2/> 🔗", + "text": " input_names = 🔗", + "markers": { + "1": "PackedStringArray", + "2": "PackedStringArray()", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_input_names(value: <2/>)", + "text": " set_input_names(value: )", + "markers": { + "1": "void", + "2": "PackedStringArray" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_input_names()", + "text": " get_input_names()", + "markers": { + "1": "PackedStringArray" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "List of variable names within expression_string for which the user will provide values for through input_values.", + "text": "List of variable names within expression_string for which the user will provide values for through input_values.", + "markers": { + "1": "expression_string", + "2": "input_values" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Warning: Call parse after updating input_names to update the internal <3/> as it won’t be updated automatically.", + "text": "Warning: Call parse after updating input_names to update the internal as it won’t be updated automatically.", + "markers": { + "1": "parse", + "2": "input_names", + "3": "Expression" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: The returned array is copied and any changes to it will not update the original property value. See <1/> for more details.", + "text": "Note: The returned array is copied and any changes to it will not update the original property value. See for more details.", + "markers": { + "1": "PackedStringArray" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[BBVariant] input_values = <2/> 🔗", + "text": "Array[BBVariant] input_values = 🔗", + "markers": { + "1": "BBVariant", + "2": "[]", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_input_values(value: Array[BBVariant])", + "text": " set_input_values(value: Array[BBVariant])", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Array[BBVariant] get_input_values()", + "text": "Array[BBVariant] get_input_values()", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "List of values for variables specified in input_names. The values are mapped to the variables by their array index.", + "text": "List of values for variables specified in input_names. The values are mapped to the variables by their array index.", + "markers": { + "1": "input_names" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode node 🔗", + "text": "BBNode node 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_node_param(value: BBNode)", + "text": " set_node_param(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode get_node_param()", + "text": "BBNode get_node_param()", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Specifies the <1/> or <2/> instance containing the method to be called.", + "text": "Specifies the or instance containing the method to be called.", + "markers": { + "1": "Node", + "2": "Object" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> result_var = <2/> 🔗", + "text": " result_var = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_result_var(value: <2/>)", + "text": " set_result_var(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_result_var()", + "text": " get_result_var()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "if non-empty, assign the result of the method call to the blackboard variable specified by this property.", + "text": "if non-empty, assign the result of the method call to the blackboard variable specified by this property.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Error parse() 🔗", + "text": "Error parse() 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Calls Expression.parse considering input_include_delta and input_names and returns its error code.", + "text": "Calls Expression.parse considering input_include_delta and input_names and returns its error code.", + "markers": { + "1": "input_include_delta", + "2": "input_names" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTFail", + "text": "BTFail", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that always returns <1/>.", + "text": "BT action that always returns .", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTForEach", + "text": "BTForEach", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that executes its child task for each element of an <1/>.", + "text": "BT decorator that executes its child task for each element of an .", + "markers": { + "1": "Array" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTForEach executes its child task for each element of an <1/>. During each iteration, the next element is stored in the specified Blackboard variable.", + "text": "BTForEach executes its child task for each element of an . During each iteration, the next element is stored in the specified Blackboard variable.", + "markers": { + "1": "Array", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/> or if the child task results in <3/> on a non-last iteration.", + "text": "Returns if the child task results in or if the child task results in on a non-last iteration.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/>.", + "text": "Returns if the child task results in .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/> on the last iteration.", + "text": "Returns if the child task results in on the last iteration.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "array_var", + "text": "array_var", + "markers": { + "1": "array_var" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "array_var", + "text": "array_var", + "markers": { + "1": "array_var" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "save_var", + "text": "save_var", + "markers": { + "1": "save_var" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "save_var", + "text": "save_var", + "markers": { + "1": "save_var" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> array_var = <2/> 🔗", + "text": " array_var = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_array_var(value: <2/>)", + "text": " set_array_var(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_array_var()", + "text": " get_array_var()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A variable within the Blackboard that holds an <2/>, which is used for the iteration process.", + "text": "A variable within the Blackboard that holds an , which is used for the iteration process.", + "markers": { + "1": "Blackboard", + "2": "Array" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> save_var = <2/> 🔗", + "text": " save_var = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_save_var(value: <2/>)", + "text": " set_save_var(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_save_var()", + "text": " get_save_var()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A Blackboard variable used to store an element of the array referenced by array_var.", + "text": "A Blackboard variable used to store an element of the array referenced by array_var.", + "markers": { + "1": "Blackboard", + "2": "array_var" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Represents a runtime instance of a BehaviorTree resource.", + "text": "Represents a runtime instance of a BehaviorTree resource.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Can be created using the BehaviorTree.instantiate method.", + "text": "Can be created using the BehaviorTree.instantiate method.", + "markers": { + "1": "BehaviorTree.instantiate" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "monitor_performance", + "text": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "monitor_performance", + "text": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_agent() <2/>", + "text": "get_agent() ", + "markers": { + "1": "get_agent", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_agent() <2/>", + "text": "get_agent() ", + "markers": { + "1": "get_agent", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_blackboard() <2/>", + "text": "get_blackboard() ", + "markers": { + "1": "get_blackboard", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_blackboard() <2/>", + "text": "get_blackboard() ", + "markers": { + "1": "get_blackboard", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_last_status() <2/>", + "text": "get_last_status() ", + "markers": { + "1": "get_last_status", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_last_status() <2/>", + "text": "get_last_status() ", + "markers": { + "1": "get_last_status", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_owner_node() <2/>", + "text": "get_owner_node() ", + "markers": { + "1": "get_owner_node", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_owner_node() <2/>", + "text": "get_owner_node() ", + "markers": { + "1": "get_owner_node", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_root_task() <2/>", + "text": "get_root_task() ", + "markers": { + "1": "get_root_task", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_root_task() <2/>", + "text": "get_root_task() ", + "markers": { + "1": "get_root_task", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_source_bt_path() <2/>", + "text": "get_source_bt_path() ", + "markers": { + "1": "get_source_bt_path", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_source_bt_path() <2/>", + "text": "get_source_bt_path() ", + "markers": { + "1": "get_source_bt_path", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "is_instance_valid() <2/>", + "text": "is_instance_valid() ", + "markers": { + "1": "is_instance_valid", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "is_instance_valid() <2/>", + "text": "is_instance_valid() ", + "markers": { + "1": "is_instance_valid", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "register_with_debugger()", + "text": "register_with_debugger()", + "markers": { + "1": "register_with_debugger" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "register_with_debugger()", + "text": "register_with_debugger()", + "markers": { + "1": "register_with_debugger" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "unregister_with_debugger()", + "text": "unregister_with_debugger()", + "markers": { + "1": "unregister_with_debugger" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "unregister_with_debugger()", + "text": "unregister_with_debugger()", + "markers": { + "1": "unregister_with_debugger" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status", + "text": "Status", + "markers": { + "1": "Status" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "update(delta: <2/>)", + "text": "update(delta: )", + "markers": { + "1": "update", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "update(delta: <2/>)", + "text": "update(delta: )", + "markers": { + "1": "update", + "2": "float" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Signals", + "text": "Signals", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "freed() 🔗", + "text": "freed() 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the behavior tree instance is freed. Used by debugger to unregister.", + "text": "Emitted when the behavior tree instance is freed. Used by debugger to unregister.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "updated(status: <1/>) 🔗", + "text": "updated(status: ) 🔗", + "markers": { + "1": "int", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Emitted when the behavior tree instance has finished updating.", + "text": "Emitted when the behavior tree instance has finished updating.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> monitor_performance = <2/> 🔗", + "text": " monitor_performance = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_monitor_performance(value: <2/>)", + "text": " set_monitor_performance(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_monitor_performance()", + "text": " get_monitor_performance()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, adds a performance monitor for this instance to “Debugger->Monitors” in the editor.", + "text": "If , adds a performance monitor for this instance to “Debugger->Monitors” in the editor.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_agent() <2/> 🔗", + "text": " get_agent() 🔗", + "markers": { + "1": "Node", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the agent of the behavior tree instance.", + "text": "Returns the agent of the behavior tree instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Blackboard get_blackboard() <2/> 🔗", + "text": "Blackboard get_blackboard() 🔗", + "markers": { + "1": "Blackboard", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the blackboard of the behavior tree instance.", + "text": "Returns the blackboard of the behavior tree instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status get_last_status() <2/> 🔗", + "text": "Status get_last_status() 🔗", + "markers": { + "1": "Status", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the execution status of the last update.", + "text": "Returns the execution status of the last update.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_owner_node() <2/> 🔗", + "text": " get_owner_node() 🔗", + "markers": { + "1": "Node", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the scene <1/> that owns this behavior tree instance.", + "text": "Returns the scene that owns this behavior tree instance.", + "markers": { + "1": "Node" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTask get_root_task() <2/> 🔗", + "text": "BTTask get_root_task() 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the root task of the behavior tree instance.", + "text": "Returns the root task of the behavior tree instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_source_bt_path() <2/> 🔗", + "text": " get_source_bt_path() 🔗", + "markers": { + "1": "String", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the file path to the behavior tree resource that was used to create this instance.", + "text": "Returns the file path to the behavior tree resource that was used to create this instance.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> is_instance_valid() <2/> 🔗", + "text": " is_instance_valid() 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the behavior tree instance is properly initialized and can be used.", + "text": "Returns if the behavior tree instance is properly initialized and can be used.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> register_with_debugger() 🔗", + "text": " register_with_debugger() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Registers the behavior tree instance with the debugger.", + "text": "Registers the behavior tree instance with the debugger.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> unregister_with_debugger() 🔗", + "text": " unregister_with_debugger() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Unregisters the behavior tree instance from the debugger. This is typically not necessary, as the debugger will automatically unregister the instance when it is freed.", + "text": "Unregisters the behavior tree instance from the debugger. This is typically not necessary, as the debugger will automatically unregister the instance when it is freed.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Status update(delta: <2/>) 🔗", + "text": "Status update(delta: ) 🔗", + "markers": { + "1": "Status", + "2": "float", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Ticks the behavior tree instance and returns its status.", + "text": "Ticks the behavior tree instance and returns its status.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTInvert", + "text": "BTInvert", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that transforms <1/> into <2/> and <3/> into <4/>.", + "text": "BT decorator that transforms into and into .", + "markers": { + "1": "FAILURE", + "2": "SUCCESS", + "3": "SUCCESS", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTInvert transforms <1/> into <2/> and <3/> into <4/>.", + "text": "BTInvert transforms into and into .", + "markers": { + "1": "FAILURE", + "2": "SUCCESS", + "3": "SUCCESS", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTNewScope", + "text": "BTNewScope", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherited By: BTSubtree", + "text": "Inherited By: BTSubtree", + "markers": { + "1": "BTSubtree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that creates a new Blackboard scope.", + "text": "BT decorator that creates a new Blackboard scope.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTNewScope creates a new Blackboard scope during initialization and populates it with data. See Blackboard.", + "text": "BTNewScope creates a new Blackboard scope during initialization and populates it with data. See Blackboard.", + "markers": { + "1": "Blackboard", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the status of the child task execution.", + "text": "Returns the status of the child task execution.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blackboard_plan", + "text": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan blackboard_plan 🔗", + "text": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_blackboard_plan(value: BlackboardPlan)", + "text": " set_blackboard_plan(value: BlackboardPlan)", + "markers": { + "1": "void", + "2": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BlackboardPlan get_blackboard_plan()", + "text": "BlackboardPlan get_blackboard_plan()", + "markers": { + "1": "BlackboardPlan" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "text": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTParallel", + "text": "BTParallel", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that executes all of its child tasks simultaneously.", + "text": "BT composite that executes all of its child tasks simultaneously.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTParallel executes all of its child tasks simultaneously. Note that BTParallel doesn’t involve multithreading. It processes each task sequentially, from first to last, in the same tick before returning a result. If one of the abort criterea is met, any tasks currently <1/> will be terminated, and the result will be either <2/> or <3/>. The num_failures_required determines when BTParallel fails and num_successes_required when it succeeds. When both are fullfilled, it gives priority to num_failures_required.", + "text": "BTParallel executes all of its child tasks simultaneously. Note that BTParallel doesn’t involve multithreading. It processes each task sequentially, from first to last, in the same tick before returning a result. If one of the abort criterea is met, any tasks currently will be terminated, and the result will be either or . The num_failures_required determines when BTParallel fails and num_successes_required when it succeeds. When both are fullfilled, it gives priority to num_failures_required.", + "markers": { + "1": "RUNNING", + "2": "FAILURE", + "3": "SUCCESS", + "4": "num_failures_required", + "5": "num_successes_required", + "6": "num_failures_required" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If set to repeat, all child tasks will be re-executed each tick, regardless of whether they previously resulted in <2/> or <3/>.", + "text": "If set to repeat, all child tasks will be re-executed each tick, regardless of whether they previously resulted in or .", + "markers": { + "1": "repeat", + "2": "SUCCESS", + "3": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> when the required number of child tasks result in <2/>. When repeat is set to <4/>, if none of the criteria were met and all child tasks resulted in either <5/> or <6/>, BTParallel will return <7/>.", + "text": "Returns when the required number of child tasks result in . When repeat is set to , if none of the criteria were met and all child tasks resulted in either or , BTParallel will return .", + "markers": { + "1": "FAILURE", + "2": "FAILURE", + "3": "repeat", + "4": "false", + "5": "SUCCESS", + "6": "FAILURE", + "7": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> when the required number of child tasks result in <2/>.", + "text": "Returns when the required number of child tasks result in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if none of the criterea were fulfilled, and either repeat is set to <3/> or a child task resulted in <4/>.", + "text": "Returns if none of the criterea were fulfilled, and either repeat is set to or a child task resulted in .", + "markers": { + "1": "RUNNING", + "2": "repeat", + "3": "true", + "4": "RUNNING" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "num_failures_required", + "text": "num_failures_required", + "markers": { + "1": "num_failures_required" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "num_failures_required", + "text": "num_failures_required", + "markers": { + "1": "num_failures_required" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "num_successes_required", + "text": "num_successes_required", + "markers": { + "1": "num_successes_required" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "num_successes_required", + "text": "num_successes_required", + "markers": { + "1": "num_successes_required" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "repeat", + "text": "repeat", + "markers": { + "1": "repeat" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "repeat", + "text": "repeat", + "markers": { + "1": "repeat" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> num_failures_required = <2/> 🔗", + "text": " num_failures_required = 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_num_failures_required(value: <2/>)", + "text": " set_num_failures_required(value: )", + "markers": { + "1": "void", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_num_failures_required()", + "text": " get_num_failures_required()", + "markers": { + "1": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If the specified number of child tasks return <1/>, BTParallel will also return <2/>.", + "text": "If the specified number of child tasks return , BTParallel will also return .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> num_successes_required = <2/> 🔗", + "text": " num_successes_required = 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_num_successes_required(value: <2/>)", + "text": " set_num_successes_required(value: )", + "markers": { + "1": "void", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_num_successes_required()", + "text": " get_num_successes_required()", + "markers": { + "1": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If the specified number of child tasks return <1/>, BTParallel will also return <2/>.", + "text": "If the specified number of child tasks return , BTParallel will also return .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> repeat = <2/> 🔗", + "text": " repeat = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_repeat(value: <2/>)", + "text": " set_repeat(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_repeat()", + "text": " get_repeat()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "When <1/>, the child tasks will be executed again, regardless of whether they previously resulted in a <2/> or <3/>.", + "text": "When , the child tasks will be executed again, regardless of whether they previously resulted in a or .", + "markers": { + "1": "true", + "2": "SUCCESS", + "3": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "When <1/>, if none of the criteria were met, and all child tasks resulted in a <2/> or <3/>, BTParallel will return <4/>.", + "text": "When , if none of the criteria were met, and all child tasks resulted in a or , BTParallel will return .", + "markers": { + "1": "false", + "2": "SUCCESS", + "3": "FAILURE", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTPauseAnimation", + "text": "BTPauseAnimation", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that pauses the playback of an animation on the specified <1/> node.", + "text": "BT action that pauses the playback of an animation on the specified node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTPauseAnimation action pauses the playback of an animation on the specified <1/> node and returns <2/>.", + "text": "BTPauseAnimation action pauses the playback of an animation on the specified node and returns .", + "markers": { + "1": "AnimationPlayer", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the action fails to get the <2/> node.", + "text": "Returns if the action fails to get the node.", + "markers": { + "1": "FAILURE", + "2": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode animation_player 🔗", + "text": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_animation_player(value: BBNode)", + "text": " set_animation_player(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode get_animation_player()", + "text": "BBNode get_animation_player()", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the <1/> node.", + "text": "Parameter that specifies the node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTPlayAnimation", + "text": "BTPlayAnimation", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that plays an animation on the specified <1/> node.", + "text": "BT action that plays an animation on the specified node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTPlayAnimation action plays an animation on the specified <1/> node. If the await_completion is greater than <3/>, the action will wait for the animation to complete, with the maximum waiting time equal to await_completion.", + "text": "BTPlayAnimation action plays an animation on the specified node. If the await_completion is greater than , the action will wait for the animation to complete, with the maximum waiting time equal to await_completion.", + "markers": { + "1": "AnimationPlayer", + "2": "await_completion", + "3": "0", + "4": "await_completion" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the animation finishes playing or if the elapsed time exceeds await_completion. When await_completion is set to <4/>, BTPlayAnimation doesn’t wait for the animation to finish and immediately returns <5/>.", + "text": "Returns if the animation finishes playing or if the elapsed time exceeds await_completion. When await_completion is set to , BTPlayAnimation doesn’t wait for the animation to finish and immediately returns .", + "markers": { + "1": "SUCCESS", + "2": "await_completion", + "3": "await_completion", + "4": "0", + "5": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the animation is still playing and the elapsed time is less than await_completion.", + "text": "Returns if the animation is still playing and the elapsed time is less than await_completion.", + "markers": { + "1": "RUNNING", + "2": "await_completion" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the action fails to play the requested animation.", + "text": "Returns if the action fails to play the requested animation.", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "animation_name", + "text": "animation_name", + "markers": { + "1": "animation_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "animation_name", + "text": "animation_name", + "markers": { + "1": "animation_name" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "await_completion", + "text": "await_completion", + "markers": { + "1": "await_completion" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "await_completion", + "text": "await_completion", + "markers": { + "1": "await_completion" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "blend", + "text": "blend", + "markers": { + "1": "blend" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "blend", + "text": "blend", + "markers": { + "1": "blend" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "from_end", + "text": "from_end", + "markers": { + "1": "from_end" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "from_end", + "text": "from_end", + "markers": { + "1": "from_end" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "speed", + "text": "speed", + "markers": { + "1": "speed" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "speed", + "text": "speed", + "markers": { + "1": "speed" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> animation_name = <2/> 🔗", + "text": " animation_name = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_animation_name(value: <2/>)", + "text": " set_animation_name(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_animation_name()", + "text": " get_animation_name()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Animation’s key within the <1/> node. If empty, BTPlayAnimation will resume the last played animation if the <2/> was previously paused.", + "text": "Animation’s key within the node. If empty, BTPlayAnimation will resume the last played animation if the was previously paused.", + "markers": { + "1": "AnimationPlayer", + "2": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode animation_player 🔗", + "text": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_animation_player(value: BBNode)", + "text": " set_animation_player(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode get_animation_player()", + "text": "BBNode get_animation_player()", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the <1/> node.", + "text": "Parameter that specifies the node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> await_completion = <2/> 🔗", + "text": " await_completion = 🔗", + "markers": { + "1": "float", + "2": "0.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_await_completion(value: <2/>)", + "text": " set_await_completion(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_await_completion()", + "text": " get_await_completion()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTPlayAnimation will stop waiting and return <1/>.", + "text": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTPlayAnimation will stop waiting and return .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> blend = <2/> 🔗", + "text": " blend = 🔗", + "markers": { + "1": "float", + "2": "-1.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_blend(value: <2/>)", + "text": " set_blend(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_blend()", + "text": " get_blend()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Custom blend time (in seconds). See AnimationPlayer.play.", + "text": "Custom blend time (in seconds). See AnimationPlayer.play.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> from_end = <2/> 🔗", + "text": " from_end = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_from_end(value: <2/>)", + "text": " set_from_end(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_from_end()", + "text": " get_from_end()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Play animation from the end. Used in combination with negative speed to play animation in reverse. See AnimationPlayer.play.", + "text": "Play animation from the end. Used in combination with negative speed to play animation in reverse. See AnimationPlayer.play.", + "markers": { + "1": "speed" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> speed = <2/> 🔗", + "text": " speed = 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_speed(value: <2/>)", + "text": " set_speed(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_speed()", + "text": " get_speed()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Custom playback speed scaling ratio. See AnimationPlayer.play.", + "text": "Custom playback speed scaling ratio. See AnimationPlayer.play.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTProbability", + "text": "BTProbability", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that executes its child task with a given probability.", + "text": "BT decorator that executes its child task with a given probability.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTProbability executes its child task with a given probability defined by run_chance.", + "text": "BTProbability executes its child task with a given probability defined by run_chance.", + "markers": { + "1": "run_chance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the result of the child task if it was executed; otherwise, it returns <1/>.", + "text": "Returns the result of the child task if it was executed; otherwise, it returns .", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "run_chance", + "text": "run_chance", + "markers": { + "1": "run_chance" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "run_chance", + "text": "run_chance", + "markers": { + "1": "run_chance" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> run_chance = <2/> 🔗", + "text": " run_chance = 🔗", + "markers": { + "1": "float", + "2": "0.5", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_run_chance(value: <2/>)", + "text": " set_run_chance(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_run_chance()", + "text": " get_run_chance()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Probability that defines how likely the child task will be executed.", + "text": "Probability that defines how likely the child task will be executed.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTProbabilitySelector", + "text": "BTProbabilitySelector", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that chooses a child task to execute based on attached probabilities.", + "text": "BT composite that chooses a child task to execute based on attached probabilities.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTProbabilitySelector chooses a child task to execute based on attached probabilities. It is typically used for decision-making purposes. Probability distribution is calculated based on weights assigned to each child task.", + "text": "BTProbabilitySelector chooses a child task to execute based on attached probabilities. It is typically used for decision-making purposes. Probability distribution is calculated based on weights assigned to each child task.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> when a child task results in <2/>.", + "text": "Returns when a child task results in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> when a child task results in <2/>.", + "text": "Returns when a child task results in .", + "markers": { + "1": "RUNNING", + "2": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The behavior of BTProbabilitySelector when a child task results in <1/> depends on the abort_on_failure value:", + "text": "The behavior of BTProbabilitySelector when a child task results in depends on the abort_on_failure value:", + "markers": { + "1": "FAILURE", + "2": "abort_on_failure" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will normalize the probability distribution over the remaining children and choose a new child task to be executed. If all child tasks fail, the composite will return <4/>.", + "text": "If abort_on_failure is , when a child task results in , BTProbabilitySelector will normalize the probability distribution over the remaining children and choose a new child task to be executed. If all child tasks fail, the composite will return .", + "markers": { + "1": "abort_on_failure", + "2": "false", + "3": "FAILURE", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will not choose another child task to be executed and will immediately return <4/>.", + "text": "If abort_on_failure is , when a child task results in , BTProbabilitySelector will not choose another child task to be executed and will immediately return .", + "markers": { + "1": "abort_on_failure", + "2": "true", + "3": "FAILURE", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "abort_on_failure", + "text": "abort_on_failure", + "markers": { + "1": "abort_on_failure" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "abort_on_failure", + "text": "abort_on_failure", + "markers": { + "1": "abort_on_failure" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_probability(child_idx: <2/>) <3/>", + "text": "get_probability(child_idx: ) ", + "markers": { + "1": "get_probability", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_probability(child_idx: <2/>) <3/>", + "text": "get_probability(child_idx: ) ", + "markers": { + "1": "get_probability", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_total_weight() <2/>", + "text": "get_total_weight() ", + "markers": { + "1": "get_total_weight", + "2": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_total_weight() <2/>", + "text": "get_total_weight() ", + "markers": { + "1": "get_total_weight", + "2": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_weight(child_idx: <2/>) <3/>", + "text": "get_weight(child_idx: ) ", + "markers": { + "1": "get_weight", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_weight(child_idx: <2/>) <3/>", + "text": "get_weight(child_idx: ) ", + "markers": { + "1": "get_weight", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "has_probability(child_idx: <2/>) <3/>", + "text": "has_probability(child_idx: ) ", + "markers": { + "1": "has_probability", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "has_probability(child_idx: <2/>) <3/>", + "text": "has_probability(child_idx: ) ", + "markers": { + "1": "has_probability", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_probability(child_idx: <2/>, probability: <3/>)", + "text": "set_probability(child_idx: , probability: )", + "markers": { + "1": "set_probability", + "2": "int", + "3": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_probability(child_idx: <2/>, probability: <3/>)", + "text": "set_probability(child_idx: , probability: )", + "markers": { + "1": "set_probability", + "2": "int", + "3": "float" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "set_weight(child_idx: <2/>, weight: <3/>)", + "text": "set_weight(child_idx: , weight: )", + "markers": { + "1": "set_weight", + "2": "int", + "3": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "set_weight(child_idx: <2/>, weight: <3/>)", + "text": "set_weight(child_idx: , weight: )", + "markers": { + "1": "set_weight", + "2": "int", + "3": "float" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> abort_on_failure = <2/> 🔗", + "text": " abort_on_failure = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_abort_on_failure(value: <2/>)", + "text": " set_abort_on_failure(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_abort_on_failure()", + "text": " get_abort_on_failure()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, BTProbabilitySelector will not choose another child to execute and will return <2/> when a child task results in <3/>.", + "text": "If , BTProbabilitySelector will not choose another child to execute and will return when a child task results in .", + "markers": { + "1": "true", + "2": "FAILURE", + "3": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_probability(child_idx: <2/>) <3/> 🔗", + "text": " get_probability(child_idx: ) 🔗", + "markers": { + "1": "float", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the child task’s selection probability.", + "text": "Returns the child task’s selection probability.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_total_weight() <2/> 🔗", + "text": " get_total_weight() 🔗", + "markers": { + "1": "float", + "2": "const", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the total weight of all child tasks.", + "text": "Returns the total weight of all child tasks.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_weight(child_idx: <2/>) <3/> 🔗", + "text": " get_weight(child_idx: ) 🔗", + "markers": { + "1": "float", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the child task’s weight within the weighted probability selection algorithm.", + "text": "Returns the child task’s weight within the weighted probability selection algorithm.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> has_probability(child_idx: <2/>) <3/> 🔗", + "text": " has_probability(child_idx: ) 🔗", + "markers": { + "1": "bool", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns whether the child task at index <1/> participates within the weighted probability selection algorithm and has a probability assigned to it. Returns <2/> for BTComment tasks.", + "text": "Returns whether the child task at index participates within the weighted probability selection algorithm and has a probability assigned to it. Returns for BTComment tasks.", + "markers": { + "1": "child_idx", + "2": "false", + "3": "BTComment" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_probability(child_idx: <2/>, probability: <3/>) 🔗", + "text": " set_probability(child_idx: , probability: ) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "float", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the child task’s weight calculated based on the desired probability.", + "text": "Sets the child task’s weight calculated based on the desired probability.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_weight(child_idx: <2/>, weight: <3/>) 🔗", + "text": " set_weight(child_idx: , weight: ) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "float", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Sets the child task’s weight for the weighted probability selection algorithm.", + "text": "Sets the child task’s weight for the weighted probability selection algorithm.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTRandomSelector", + "text": "BTRandomSelector", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that executes tasks in random order until first <1/>.", + "text": "BT composite that executes tasks in random order until first .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTRandomSelector executes its child tasks in a random order until any child returns <1/>. If a child task results in <2/>, BTRandomSelector will immediately execute another child task until one of them returns <3/> or all of them result in <4/>.", + "text": "BTRandomSelector executes its child tasks in a random order until any child returns . If a child task results in , BTRandomSelector will immediately execute another child task until one of them returns or all of them result in .", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "SUCCESS", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>. BTRandomSelector will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick.", + "text": "Returns if a child task results in . BTRandomSelector will remember the execution order and the last child task that returned , ensuring it resumes from that point in the next tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if all child tasks result in <2/>.", + "text": "Returns if all child tasks result in .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>.", + "text": "Returns if a child task results in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTRandomSequence", + "text": "BTRandomSequence", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that executes tasks in random order as long as they return <1/>.", + "text": "BT composite that executes tasks in random order as long as they return .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTRandomSequence executes its child tasks in a random order as long as they return <1/>. If a child task results in <2/>, BTRandomSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>.", + "text": "BTRandomSequence executes its child tasks in a random order as long as they return . If a child task results in , BTRandomSequence will immediately execute the next child task until one of them returns or all of them result in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS", + "3": "FAILURE", + "4": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>. BTRandomSequence will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick.", + "text": "Returns if a child task results in . BTRandomSequence will remember the execution order and the last child task that returned , ensuring it resumes from that point in the next tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>.", + "text": "Returns if a child task results in .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if all child tasks result in <2/>.", + "text": "Returns if all child tasks result in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTRandomWait", + "text": "BTRandomWait", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that waits for a randomized duration to elapse and then returns <1/>.", + "text": "BT action that waits for a randomized duration to elapse and then returns .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTRandomWait action waits for a randomized duration to elapse and then returns <1/>. The duration is randomized within the specified range, defined by min_duration and max_duration.", + "text": "BTRandomWait action waits for a randomized duration to elapse and then returns . The duration is randomized within the specified range, defined by min_duration and max_duration.", + "markers": { + "1": "SUCCESS", + "2": "min_duration", + "3": "max_duration" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "max_duration", + "text": "max_duration", + "markers": { + "1": "max_duration" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "max_duration", + "text": "max_duration", + "markers": { + "1": "max_duration" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "min_duration", + "text": "min_duration", + "markers": { + "1": "min_duration" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "min_duration", + "text": "min_duration", + "markers": { + "1": "min_duration" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> max_duration = <2/> 🔗", + "text": " max_duration = 🔗", + "markers": { + "1": "float", + "2": "2.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_max_duration(value: <2/>)", + "text": " set_max_duration(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_max_duration()", + "text": " get_max_duration()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Maximum duration for the wait.", + "text": "Maximum duration for the wait.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> min_duration = <2/> 🔗", + "text": " min_duration = 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_min_duration(value: <2/>)", + "text": " set_min_duration(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_min_duration()", + "text": " get_min_duration()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Minimum duration for the wait.", + "text": "Minimum duration for the wait.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTRepeat", + "text": "BTRepeat", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that repeats its child a specified number of times.", + "text": "BT decorator that repeats its child a specified number of times.", + "markers": { + "1": "times" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTRepeat iterates its child task a specified number of times, as defined by times. If forever is <3/>, the child’s execution will be repeated indefinitely.", + "text": "BTRepeat iterates its child task a specified number of times, as defined by times. If forever is , the child’s execution will be repeated indefinitely.", + "markers": { + "1": "times", + "2": "forever", + "3": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/>. If forever is <4/>, BTRepeat will always return <5/>.", + "text": "Returns if the child task results in . If forever is , BTRepeat will always return .", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "forever", + "4": "true", + "5": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the specified number of successful executions is reached. If abort_on_failure is <3/>, a <4/> status returned by the child is also considered a successful execution.", + "text": "Returns if the specified number of successful executions is reached. If abort_on_failure is , a status returned by the child is also considered a successful execution.", + "markers": { + "1": "SUCCESS", + "2": "abort_on_failure", + "3": "false", + "4": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/> when abort_on_failure is <4/>.", + "text": "Returns if the child task results in when abort_on_failure is .", + "markers": { + "1": "FAILURE", + "2": "FAILURE", + "3": "abort_on_failure", + "4": "true" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "abort_on_failure", + "text": "abort_on_failure", + "markers": { + "1": "abort_on_failure" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "abort_on_failure", + "text": "abort_on_failure", + "markers": { + "1": "abort_on_failure" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "forever", + "text": "forever", + "markers": { + "1": "forever" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "forever", + "text": "forever", + "markers": { + "1": "forever" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "times", + "text": "times", + "markers": { + "1": "times" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "times", + "text": "times", + "markers": { + "1": "times" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> abort_on_failure = <2/> 🔗", + "text": " abort_on_failure = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_abort_on_failure(value: <2/>)", + "text": " set_abort_on_failure(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_abort_on_failure()", + "text": " get_abort_on_failure()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, <2/> status returned by the child task is also considered as a successful execution.", + "text": "If , status returned by the child task is also considered as a successful execution.", + "markers": { + "1": "false", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> forever = <2/> 🔗", + "text": " forever = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_forever(value: <2/>)", + "text": " set_forever(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_forever()", + "text": " get_forever()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, the child’s execution will be repeated indefinitely, always returning <2/>.", + "text": "If , the child’s execution will be repeated indefinitely, always returning .", + "markers": { + "1": "true", + "2": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> times = <2/> 🔗", + "text": " times = 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_times(value: <2/>)", + "text": " set_times(value: )", + "markers": { + "1": "void", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_times()", + "text": " get_times()", + "markers": { + "1": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The number of times to repeat execution of the child task.", + "text": "The number of times to repeat execution of the child task.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTRepeatUntilFailure", + "text": "BTRepeatUntilFailure", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that repeats its child task until <1/>.", + "text": "BT decorator that repeats its child task until .", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTRepeatUntilFailure repeats its child task until it results in <1/>.", + "text": "BTRepeatUntilFailure repeats its child task until it results in .", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/> or <3/>.", + "text": "Returns if the child task results in or .", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/>.", + "text": "Returns if the child task results in .", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTRepeatUntilSuccess", + "text": "BTRepeatUntilSuccess", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that repeats its child task until <1/>.", + "text": "BT decorator that repeats its child task until .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTRepeatUntilSuccess repeats its child task until it results in <1/>.", + "text": "BTRepeatUntilSuccess repeats its child task until it results in .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/> or <3/>.", + "text": "Returns if the child task results in or .", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "FAILURE" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the child task results in <2/>.", + "text": "Returns if the child task results in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTRunLimit", + "text": "BTRunLimit", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that restricts the execution of its child a limited number of times.", + "text": "BT decorator that restricts the execution of its child a limited number of times.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTRunLimit restricts the execution of the child task to a maximum number of times, defined by run_limit.", + "text": "BTRunLimit restricts the execution of the child task to a maximum number of times, defined by run_limit.", + "markers": { + "1": "run_limit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the limit on executions is exceeded; otherwise, it returns the status of the child task.", + "text": "Returns if the limit on executions is exceeded; otherwise, it returns the status of the child task.", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "CountPolicy", + "text": "CountPolicy", + "markers": { + "1": "CountPolicy" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CountPolicy", + "text": "CountPolicy", + "markers": { + "1": "CountPolicy" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "count_policy", + "text": "count_policy", + "markers": { + "1": "count_policy" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "count_policy", + "text": "count_policy", + "markers": { + "1": "count_policy" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "run_limit", + "text": "run_limit", + "markers": { + "1": "run_limit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "run_limit", + "text": "run_limit", + "markers": { + "1": "run_limit" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Enumerations", + "text": "Enumerations", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "enum CountPolicy: 🔗", + "text": "enum CountPolicy: 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CountPolicy COUNT_SUCCESSFUL = <2/>", + "text": "CountPolicy COUNT_SUCCESSFUL = ", + "markers": { + "1": "CountPolicy", + "2": "0" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Count only successful runs towards the limit.", + "text": "Count only successful runs towards the limit.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CountPolicy COUNT_FAILED = <2/>", + "text": "CountPolicy COUNT_FAILED = ", + "markers": { + "1": "CountPolicy", + "2": "1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Count only failed runs towards the limit.", + "text": "Count only failed runs towards the limit.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CountPolicy COUNT_ALL = <2/>", + "text": "CountPolicy COUNT_ALL = ", + "markers": { + "1": "CountPolicy", + "2": "2" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Count successful and failed runs towards the limit.", + "text": "Count successful and failed runs towards the limit.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CountPolicy count_policy = <2/> 🔗", + "text": "CountPolicy count_policy = 🔗", + "markers": { + "1": "CountPolicy", + "2": "0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_count_policy(value: CountPolicy)", + "text": " set_count_policy(value: CountPolicy)", + "markers": { + "1": "void", + "2": "CountPolicy" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CountPolicy get_count_policy()", + "text": "CountPolicy get_count_policy()", + "markers": { + "1": "CountPolicy" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Which runs should be counted towards the limit: successful, failed, or all?", + "text": "Which runs should be counted towards the limit: successful, failed, or all?", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> run_limit = <2/> 🔗", + "text": " run_limit = 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_run_limit(value: <2/>)", + "text": " set_run_limit(value: )", + "markers": { + "1": "void", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_run_limit()", + "text": " get_run_limit()", + "markers": { + "1": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The maximum number of times the child is permitted to be executed.", + "text": "The maximum number of times the child is permitted to be executed.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTSelector", + "text": "BTSelector", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that sequentially executes tasks until first <1/>.", + "text": "BT composite that sequentially executes tasks until first .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. If a child task results in <2/>, BTSelector will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSelector and BTSequence are two of the most common building blocks of behavior trees. Essentially, while BTSequence is similar to a boolean AND operation, BTSelector is similar to a boolean OR operation. Selectors enable the behavior tree to respond to changes in the environment and trigger transitions between various fallback behaviors.", + "text": "BTSelector executes its child tasks sequentially, from first to last, until any child returns . If a child task results in , BTSelector will immediately execute the next child task until one of them returns or all of them result in . BTSelector and BTSequence are two of the most common building blocks of behavior trees. Essentially, while BTSequence is similar to a boolean AND operation, BTSelector is similar to a boolean OR operation. Selectors enable the behavior tree to respond to changes in the environment and trigger transitions between various fallback behaviors.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "SUCCESS", + "4": "FAILURE", + "5": "BTSequence", + "6": "BTSequence" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>. BTSelector will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick.", + "text": "Returns if a child task results in . BTSelector will remember the last child task that returned , ensuring it resumes from that point in the next execution tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>.", + "text": "Returns if a child task results in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if all child tasks result in <2/>.", + "text": "Returns if all child tasks result in .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTSequence", + "text": "BTSequence", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTComposite < BTTask < BT", + "text": "Inherits: BTComposite BTTask BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT composite that sequentially executes tasks as long as they return <1/>.", + "text": "BT composite that sequentially executes tasks as long as they return .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTSequence executes its child tasks sequentially, from first to last, as long as they return <1/>. If a child task results in <2/>, BTSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSequence and BTSelector are two of the most common building blocks of behavior trees. Essentially, while BTSelector is similar to a boolean OR operation, BTSequence is similar to a boolean AND operation. Sequences enable the behavior tree to compose complex behaviors from a chain of simpler tasks.", + "text": "BTSequence executes its child tasks sequentially, from first to last, as long as they return . If a child task results in , BTSequence will immediately execute the next child task until one of them returns or all of them result in . BTSequence and BTSelector are two of the most common building blocks of behavior trees. Essentially, while BTSelector is similar to a boolean OR operation, BTSequence is similar to a boolean AND operation. Sequences enable the behavior tree to compose complex behaviors from a chain of simpler tasks.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS", + "3": "FAILURE", + "4": "SUCCESS", + "5": "BTSelector", + "6": "BTSelector" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if any child task results in <2/>. BTSequence will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick.", + "text": "Returns if any child task results in . BTSequence will remember the last child task that returned , ensuring it resumes from that point in the next execution tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if all child tasks result in <2/>.", + "text": "Returns if all child tasks result in .", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if a child task results in <2/>.", + "text": "Returns if a child task results in .", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTSetAgentProperty", + "text": "BTSetAgentProperty", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that assigns a value to the specified agent’s property.", + "text": "BT action that assigns a value to the specified agent’s property.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTSetAgentProperty assigns the specified value to the agent’s property identified by the property and returns <3/>. Optionally, it can perform a specific operation before assignment.", + "text": "BTSetAgentProperty assigns the specified value to the agent’s property identified by the property and returns . Optionally, it can perform a specific operation before assignment.", + "markers": { + "1": "value", + "2": "property", + "3": "SUCCESS", + "4": "operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if it fails to set the property.", + "text": "Returns if it fails to set the property.", + "markers": { + "1": "FAILURE" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Operation", + "text": "Operation", + "markers": { + "1": "Operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation", + "text": "Operation", + "markers": { + "1": "Operation" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "operation", + "text": "operation", + "markers": { + "1": "operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "operation", + "text": "operation", + "markers": { + "1": "operation" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "property", + "text": "property", + "markers": { + "1": "property" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "property", + "text": "property", + "markers": { + "1": "property" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation operation = <2/> 🔗", + "text": "Operation operation = 🔗", + "markers": { + "1": "Operation", + "2": "0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_operation(value: Operation)", + "text": " set_operation(value: Operation)", + "markers": { + "1": "void", + "2": "Operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation get_operation()", + "text": "Operation get_operation()", + "markers": { + "1": "Operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Specifies the operation to be performed before assignment. Operation is executed as follows:", + "text": "Specifies the operation to be performed before assignment. Operation is executed as follows:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> property = <2/> 🔗", + "text": " property = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_property(value: <2/>)", + "text": " set_property(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_property()", + "text": " get_property()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the agent’s property name.", + "text": "Parameter that specifies the agent’s property name.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant value 🔗", + "text": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_value(value: BBVariant)", + "text": " set_value(value: BBVariant)", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant get_value()", + "text": "BBVariant get_value()", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the value that will be assigned to agent’s property.", + "text": "Parameter that specifies the value that will be assigned to agent’s property.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTSetVar", + "text": "BTSetVar", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that assigns value to the variable and then returns <3/>.", + "text": "BT action that assigns value to the variable and then returns .", + "markers": { + "1": "value", + "2": "variable", + "3": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTSetVar assigns value to the variable and then returns <3/>. Optionally, it can perform a specific operation before assignment.", + "text": "BTSetVar assigns value to the variable and then returns . Optionally, it can perform a specific operation before assignment.", + "markers": { + "1": "value", + "2": "variable", + "3": "SUCCESS", + "4": "operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if it fails to set the variable.", + "text": "Returns if it fails to set the variable.", + "markers": { + "1": "FAILURE", + "2": "variable" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "Operation", + "text": "Operation", + "markers": { + "1": "Operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation", + "text": "Operation", + "markers": { + "1": "Operation" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "operation", + "text": "operation", + "markers": { + "1": "operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "operation", + "text": "operation", + "markers": { + "1": "operation" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "value", + "text": "value", + "markers": { + "1": "value" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "variable", + "text": "variable", + "markers": { + "1": "variable" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation operation = <2/> 🔗", + "text": "Operation operation = 🔗", + "markers": { + "1": "Operation", + "2": "0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_operation(value: Operation)", + "text": " set_operation(value: Operation)", + "markers": { + "1": "void", + "2": "Operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation get_operation()", + "text": "Operation get_operation()", + "markers": { + "1": "Operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Specifies the operation to be performed before assignment. Operation is executed as follows:", + "text": "Specifies the operation to be performed before assignment. Operation is executed as follows:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant value 🔗", + "text": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_value(value: BBVariant)", + "text": " set_value(value: BBVariant)", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBVariant get_value()", + "text": "BBVariant get_value()", + "markers": { + "1": "BBVariant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the value to be assigned to the variable.", + "text": "Parameter that specifies the value to be assigned to the variable.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> variable = <2/> 🔗", + "text": " variable = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_variable(value: <2/>)", + "text": " set_variable(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_variable()", + "text": " get_variable()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Name of the variable to which the value will be assigned.", + "text": "Name of the variable to which the value will be assigned.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTStopAnimation", + "text": "BTStopAnimation", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that stops the playback of an animation on the specified <1/> node.", + "text": "BT action that stops the playback of an animation on the specified node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTStopAnimation action stops the playback of an animation on the specified <1/> node and returns <2/>. If animation_name is set, it will only stop the playback if the specified animation is currently playing.", + "text": "BTStopAnimation action stops the playback of an animation on the specified node and returns . If animation_name is set, it will only stop the playback if the specified animation is currently playing.", + "markers": { + "1": "AnimationPlayer", + "2": "SUCCESS", + "3": "animation_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the action fails to get the <2/> node.", + "text": "Returns if the action fails to get the node.", + "markers": { + "1": "FAILURE", + "2": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "animation_name", + "text": "animation_name", + "markers": { + "1": "animation_name" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "animation_name", + "text": "animation_name", + "markers": { + "1": "animation_name" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "animation_player", + "text": "animation_player", + "markers": { + "1": "animation_player" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "keep_state", + "text": "keep_state", + "markers": { + "1": "keep_state" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "keep_state", + "text": "keep_state", + "markers": { + "1": "keep_state" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> animation_name = <2/> 🔗", + "text": " animation_name = 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_animation_name(value: <2/>)", + "text": " set_animation_name(value: )", + "markers": { + "1": "void", + "2": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_animation_name()", + "text": " get_animation_name()", + "markers": { + "1": "StringName" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Animation’s key within the <1/> node. If not empty, BTStopAnimation will only stop the playback if the specified animation is currently playing.", + "text": "Animation’s key within the node. If not empty, BTStopAnimation will only stop the playback if the specified animation is currently playing.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode animation_player 🔗", + "text": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_animation_player(value: BBNode)", + "text": " set_animation_player(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BBNode get_animation_player()", + "text": "BBNode get_animation_player()", + "markers": { + "1": "BBNode" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Parameter that specifies the <1/> node.", + "text": "Parameter that specifies the node.", + "markers": { + "1": "AnimationPlayer" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> keep_state = <2/> 🔗", + "text": " keep_state = 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_keep_state(value: <2/>)", + "text": " set_keep_state(value: )", + "markers": { + "1": "void", + "2": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_keep_state()", + "text": " get_keep_state()", + "markers": { + "1": "bool" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "If <1/>, the animation state is not updated visually.", + "text": "If , the animation state is not updated visually.", + "markers": { + "1": "true" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTSubtree", + "text": "BTSubtree", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTNewScope < BTDecorator < BTTask < BT", + "text": "Inherits: BTNewScope BTDecorator BTTask BT", + "markers": { + "1": "BTNewScope", + "2": "BTDecorator", + "3": "BTTask", + "4": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that instantiates and runs a subtree within the larger tree.", + "text": "BT decorator that instantiates and runs a subtree within the larger tree.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTSubtree instantiates a BehaviorTree and includes its root task as a child during initialization, while also creating a new Blackboard scope.", + "text": "BTSubtree instantiates a BehaviorTree and includes its root task as a child during initialization, while also creating a new Blackboard scope.", + "markers": { + "1": "BehaviorTree", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the status of the subtree’s execution.", + "text": "Returns the status of the subtree’s execution.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Subtree blackboard variables can be mapped to the main tree blackboard plan variables. Check out mapping section in the inspector.", + "text": "Subtree blackboard variables can be mapped to the main tree blackboard plan variables. Check out mapping section in the inspector.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Note: BTSubTree is designed as a simpler loader, and does not support updating subtree at runtime. A custom subtree decorator is better suited:", + "text": "Note: BTSubTree is designed as a simpler loader, and does not support updating subtree at runtime. A custom subtree decorator is better suited:", + "markers": { + "1": "subtree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "This allows for the BehaviorTree to load a specific behavior tree from a variable in the blackboard, or from some other location, and use that new behavior tree at runtime.", + "text": "This allows for the BehaviorTree to load a specific behavior tree from a variable in the blackboard, or from some other location, and use that new behavior tree at runtime.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "subtree", + "text": "subtree", + "markers": { + "1": "subtree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "subtree", + "text": "subtree", + "markers": { + "1": "subtree" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree subtree 🔗", + "text": "BehaviorTree subtree 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_subtree(value: BehaviorTree)", + "text": " set_subtree(value: BehaviorTree)", + "markers": { + "1": "void", + "2": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BehaviorTree get_subtree()", + "text": "BehaviorTree get_subtree()", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "A BehaviorTree resource that will be instantiated as a subtree.", + "text": "A BehaviorTree resource that will be instantiated as a subtree.", + "markers": { + "1": "BehaviorTree" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTTimeLimit", + "text": "BTTimeLimit", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTDecorator < BTTask < BT", + "text": "Inherits: BTDecorator BTTask BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT decorator that sets a time limit for its child’s execution.", + "text": "BT decorator that sets a time limit for its child’s execution.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Description", + "text": "Description", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BTTimeLimit allocates a limited time for the child’s execution and aborts it, returning <1/> if the time_limit is exceeded.", + "text": "BTTimeLimit allocates a limited time for the child’s execution and aborts it, returning if the time_limit is exceeded.", + "markers": { + "1": "FAILURE", + "2": "time_limit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns <1/> if the time_limit is exceeded; otherwise, it returns the status of the child task.", + "text": "Returns if the time_limit is exceeded; otherwise, it returns the status of the child task.", + "markers": { + "1": "FAILURE", + "2": "time_limit" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "time_limit", + "text": "time_limit", + "markers": { + "1": "time_limit" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "time_limit", + "text": "time_limit", + "markers": { + "1": "time_limit" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> time_limit = <2/> 🔗", + "text": " time_limit = 🔗", + "markers": { + "1": "float", + "2": "5.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_time_limit(value: <2/>)", + "text": " set_time_limit(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_time_limit()", + "text": " get_time_limit()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Time allocated for the child task’s execution.", + "text": "Time allocated for the child task’s execution.", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTWait", + "text": "BTWait", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that waits for a specified duration to elapse and then returns <2/>.", + "text": "BT action that waits for a specified duration to elapse and then returns .", + "markers": { + "1": "duration", + "2": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "duration", + "text": "duration", + "markers": { + "1": "duration" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "duration", + "text": "duration", + "markers": { + "1": "duration" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> duration = <2/> 🔗", + "text": " duration = 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_duration(value: <2/>)", + "text": " set_duration(value: )", + "markers": { + "1": "void", + "2": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_duration()", + "text": " get_duration()", + "markers": { + "1": "float" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "There is currently no description for this property. Please help us by contributing one!", + "text": "There is currently no description for this property. Please help us by contributing one!", + "markers": {} + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "BTWaitTicks", + "text": "BTWaitTicks", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits: BTAction < BTTask < BT", + "text": "Inherits: BTAction BTTask BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "BT action that waits for a specified number of ticks to elapse and then returns <1/>.", + "text": "BT action that waits for a specified number of ticks to elapse and then returns .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Properties", + "text": "Properties", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "num_ticks", + "text": "num_ticks", + "markers": { + "1": "num_ticks" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "num_ticks", + "text": "num_ticks", + "markers": { + "1": "num_ticks" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Property Descriptions", + "text": "Property Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> num_ticks = <2/> 🔗", + "text": " num_ticks = 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> set_num_ticks(value: <2/>)", + "text": " set_num_ticks(value: )", + "markers": { + "1": "void", + "2": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_num_ticks()", + "text": " get_num_ticks()", + "markers": { + "1": "int" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "The number of ticks to wait before returning <1/>.", + "text": "The number of ticks to wait before returning .", + "markers": { + "1": "SUCCESS" + } + }, + { + "kind": "body", + "tag": "h2", + "path": "", + "html": "LimboUtility", + "text": "LimboUtility", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inherits:", + "text": "Inherits:", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Helper functions for LimboAI.", + "text": "Helper functions for LimboAI.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Methods", + "text": "Methods", + "markers": {} + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "decorate_output_var(variable: <2/>) <3/>", + "text": "decorate_output_var(variable: ) ", + "markers": { + "1": "decorate_output_var", + "2": "String", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "decorate_output_var(variable: <2/>) <3/>", + "text": "decorate_output_var(variable: ) ", + "markers": { + "1": "decorate_output_var", + "2": "String", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "decorate_var(variable: <2/>) <3/>", + "text": "decorate_var(variable: ) ", + "markers": { + "1": "decorate_var", + "2": "String", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "decorate_var(variable: <2/>) <3/>", + "text": "decorate_var(variable: ) ", + "markers": { + "1": "decorate_var", + "2": "String", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_check_operator_string(check: CheckType) <3/>", + "text": "get_check_operator_string(check: CheckType) ", + "markers": { + "1": "get_check_operator_string", + "2": "CheckType", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_check_operator_string(check: CheckType) <3/>", + "text": "get_check_operator_string(check: CheckType) ", + "markers": { + "1": "get_check_operator_string", + "2": "CheckType", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_operation_string(operation: Operation) <3/>", + "text": "get_operation_string(operation: Operation) ", + "markers": { + "1": "get_operation_string", + "2": "Operation", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_operation_string(operation: Operation) <3/>", + "text": "get_operation_string(operation: Operation) ", + "markers": { + "1": "get_operation_string", + "2": "Operation", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_status_name(status: <2/>) <3/>", + "text": "get_status_name(status: ) ", + "markers": { + "1": "get_status_name", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_status_name(status: <2/>) <3/>", + "text": "get_status_name(status: ) ", + "markers": { + "1": "get_status_name", + "2": "int", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "get_task_icon(class_or_script_path: <2/>) <3/>", + "text": "get_task_icon(class_or_script_path: ) ", + "markers": { + "1": "get_task_icon", + "2": "String", + "3": "const" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "get_task_icon(class_or_script_path: <2/>) <3/>", + "text": "get_task_icon(class_or_script_path: ) ", + "markers": { + "1": "get_task_icon", + "2": "String", + "3": "const" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "perform_check(check: CheckType, a: <3/>, b: <4/>)", + "text": "perform_check(check: CheckType, a: , b: )", + "markers": { + "1": "perform_check", + "2": "CheckType", + "3": "Variant", + "4": "Variant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "perform_check(check: CheckType, a: <3/>, b: <4/>)", + "text": "perform_check(check: CheckType, a: , b: )", + "markers": { + "1": "perform_check", + "2": "CheckType", + "3": "Variant", + "4": "Variant" + } + }, + { + "kind": "body", + "tag": "td", + "path": "", + "html": "perform_operation(operation: Operation, a: <3/>, b: <4/>)", + "text": "perform_operation(operation: Operation, a: , b: )", + "markers": { + "1": "perform_operation", + "2": "Operation", + "3": "Variant", + "4": "Variant" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "perform_operation(operation: Operation, a: <3/>, b: <4/>)", + "text": "perform_operation(operation: Operation, a: , b: )", + "markers": { + "1": "perform_operation", + "2": "Operation", + "3": "Variant", + "4": "Variant" + } + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Enumerations", + "text": "Enumerations", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "enum CheckType: 🔗", + "text": "enum CheckType: 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType CHECK_EQUAL = <2/>", + "text": "CheckType CHECK_EQUAL = ", + "markers": { + "1": "CheckType", + "2": "0" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Equality Check.", + "text": "Equality Check.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType CHECK_LESS_THAN = <2/>", + "text": "CheckType CHECK_LESS_THAN = ", + "markers": { + "1": "CheckType", + "2": "1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Less Than Check.", + "text": "Less Than Check.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType CHECK_LESS_THAN_OR_EQUAL = <2/>", + "text": "CheckType CHECK_LESS_THAN_OR_EQUAL = ", + "markers": { + "1": "CheckType", + "2": "2" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Less Than or Equal To Check.", + "text": "Less Than or Equal To Check.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType CHECK_GREATER_THAN = <2/>", + "text": "CheckType CHECK_GREATER_THAN = ", + "markers": { + "1": "CheckType", + "2": "3" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Greater Than Check.", + "text": "Greater Than Check.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType CHECK_GREATER_THAN_OR_EQUAL = <2/>", + "text": "CheckType CHECK_GREATER_THAN_OR_EQUAL = ", + "markers": { + "1": "CheckType", + "2": "4" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Greater Than or Equal To Check", + "text": "Greater Than or Equal To Check", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "CheckType CHECK_NOT_EQUAL = <2/>", + "text": "CheckType CHECK_NOT_EQUAL = ", + "markers": { + "1": "CheckType", + "2": "5" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Inequality Check.", + "text": "Inequality Check.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "enum Operation: 🔗", + "text": "enum Operation: 🔗", + "markers": { + "1": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_NONE = <2/>", + "text": "Operation OPERATION_NONE = ", + "markers": { + "1": "Operation", + "2": "0" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "No operation.", + "text": "No operation.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_ADDITION = <2/>", + "text": "Operation OPERATION_ADDITION = ", + "markers": { + "1": "Operation", + "2": "1" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Arithmetic addition.", + "text": "Arithmetic addition.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_SUBTRACTION = <2/>", + "text": "Operation OPERATION_SUBTRACTION = ", + "markers": { + "1": "Operation", + "2": "2" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Arithmetic subtraction.", + "text": "Arithmetic subtraction.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_MULTIPLICATION = <2/>", + "text": "Operation OPERATION_MULTIPLICATION = ", + "markers": { + "1": "Operation", + "2": "3" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Arithmetic multiplication.", + "text": "Arithmetic multiplication.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_DIVISION = <2/>", + "text": "Operation OPERATION_DIVISION = ", + "markers": { + "1": "Operation", + "2": "4" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Arithmetic division.", + "text": "Arithmetic division.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_MODULO = <2/>", + "text": "Operation OPERATION_MODULO = ", + "markers": { + "1": "Operation", + "2": "5" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Produces the remainder of an integer division.", + "text": "Produces the remainder of an integer division.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_POWER = <2/>", + "text": "Operation OPERATION_POWER = ", + "markers": { + "1": "Operation", + "2": "6" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Multiply <1/> by itself <2/> times.", + "text": "Multiply by itself times.", + "markers": { + "1": "a", + "2": "b" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_BIT_SHIFT_LEFT = <2/>", + "text": "Operation OPERATION_BIT_SHIFT_LEFT = ", + "markers": { + "1": "Operation", + "2": "7" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Bitwise left shift.", + "text": "Bitwise left shift.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_BIT_SHIFT_RIGHT = <2/>", + "text": "Operation OPERATION_BIT_SHIFT_RIGHT = ", + "markers": { + "1": "Operation", + "2": "8" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Bitwise right shift.", + "text": "Bitwise right shift.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_BIT_AND = <2/>", + "text": "Operation OPERATION_BIT_AND = ", + "markers": { + "1": "Operation", + "2": "9" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Bitwise AND.", + "text": "Bitwise AND.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_BIT_OR = <2/>", + "text": "Operation OPERATION_BIT_OR = ", + "markers": { + "1": "Operation", + "2": "10" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Bitwise OR.", + "text": "Bitwise OR.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Operation OPERATION_BIT_XOR = <2/>", + "text": "Operation OPERATION_BIT_XOR = ", + "markers": { + "1": "Operation", + "2": "11" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Bitwise XOR.", + "text": "Bitwise XOR.", + "markers": {} + }, + { + "kind": "body", + "tag": "h3", + "path": "", + "html": "Method Descriptions", + "text": "Method Descriptions", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> decorate_output_var(variable: <2/>) <3/> 🔗", + "text": " decorate_output_var(variable: ) 🔗", + "markers": { + "1": "String", + "2": "String", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Just like decorate_var, produces a string with a Blackboard variable name that is formatted for display, and also adds an additional symbol to indicate that the variable is used as an output.", + "text": "Just like decorate_var, produces a string with a Blackboard variable name that is formatted for display, and also adds an additional symbol to indicate that the variable is used as an output.", + "markers": { + "1": "decorate_var", + "2": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> decorate_var(variable: <2/>) <3/> 🔗", + "text": " decorate_var(variable: ) 🔗", + "markers": { + "1": "String", + "2": "String", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Produces a string with a Blackboard variable name that is formatted for display or console output.", + "text": "Produces a string with a Blackboard variable name that is formatted for display or console output.", + "markers": { + "1": "Blackboard" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_check_operator_string(check: CheckType) <3/> 🔗", + "text": " get_check_operator_string(check: CheckType) 🔗", + "markers": { + "1": "String", + "2": "CheckType", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns an operator string for a CheckType enum value. For example, CHECK_EQUAL returns “==”.", + "text": "Returns an operator string for a CheckType enum value. For example, CHECK_EQUAL returns “==”.", + "markers": { + "1": "CheckType", + "2": "CHECK_EQUAL" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_operation_string(operation: Operation) <3/> 🔗", + "text": " get_operation_string(operation: Operation) 🔗", + "markers": { + "1": "String", + "2": "Operation", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns a string representation of an Operation enum value.", + "text": "Returns a string representation of an Operation enum value.", + "markers": { + "1": "Operation" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_status_name(status: <2/>) <3/> 🔗", + "text": " get_status_name(status: ) 🔗", + "markers": { + "1": "String", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns a name of a BTTask status code.", + "text": "Returns a name of a BTTask status code.", + "markers": { + "1": "BTTask" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> get_task_icon(class_or_script_path: <2/>) <3/> 🔗", + "text": " get_task_icon(class_or_script_path: ) 🔗", + "markers": { + "1": "Texture2D", + "2": "String", + "3": "const", + "4": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Returns the icon texture associated with a task based on its class name or script resource path.", + "text": "Returns the icon texture associated with a task based on its class name or script resource path.", + "markers": {} + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> perform_check(check: CheckType, a: <3/>, b: <4/>) 🔗", + "text": " perform_check(check: CheckType, a: , b: ) 🔗", + "markers": { + "1": "bool", + "2": "CheckType", + "3": "Variant", + "4": "Variant", + "5": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Performs a <1/> on two values, <2/> and <3/>, and returns <4/> if the check passes.", + "text": "Performs a on two values, and , and returns if the check passes.", + "markers": { + "1": "check", + "2": "a", + "3": "b", + "4": "true" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "<1/> perform_operation(operation: Operation, a: <3/>, b: <4/>) 🔗", + "text": " perform_operation(operation: Operation, a: , b: ) 🔗", + "markers": { + "1": "Variant", + "2": "Operation", + "3": "Variant", + "4": "Variant", + "5": "🔗" + } + }, + { + "kind": "body", + "tag": "p", + "path": "", + "html": "Performs an <1/> on two values, <2/> and <3/>, and returns the result.", + "text": "Performs an on two values, and , and returns the result.", + "markers": { + "1": "operation", + "2": "a", + "3": "b" + } + }, + { + "kind": "nav", + "tag": "span", + "path": "", + "html": "Getting started", + "text": "Getting started", + "markers": {} + }, + { + "kind": "nav", + "tag": "span", + "path": "", + "html": "Behavior Trees", + "text": "Behavior Trees", + "markers": {} + }, + { + "kind": "nav", + "tag": "span", + "path": "", + "html": "Hierarchical State MachineS", + "text": "Hierarchical State MachineS", + "markers": {} + }, + { + "kind": "nav", + "tag": "span", + "path": "", + "html": "Class reference", + "text": "Class reference", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Getting LimboAI", + "text": "Getting LimboAI", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Using LimboAI with C#", + "text": "Using LimboAI with C#", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Contributing", + "text": "Contributing", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Introduction to Behavior Trees", + "text": "Introduction to Behavior Trees", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Creating Behavior Trees", + "text": "Creating Behavior Trees", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Creating custom tasks", + "text": "Creating custom tasks", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Sharing data using Blackboard", + "text": "Sharing data using Blackboard", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Accessing nodes in the scene tree", + "text": "Accessing nodes in the scene tree", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Create State Machines", + "text": "Create State Machines", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Important classes", + "text": "Important classes", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBAabb", + "text": "BBAabb", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBArray", + "text": "BBArray", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBBasis", + "text": "BBBasis", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBBool", + "text": "BBBool", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBByteArray", + "text": "BBByteArray", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBColor", + "text": "BBColor", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBColorArray", + "text": "BBColorArray", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBDictionary", + "text": "BBDictionary", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBFloat", + "text": "BBFloat", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBFloat32Array", + "text": "BBFloat32Array", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBFloat64Array", + "text": "BBFloat64Array", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBInt", + "text": "BBInt", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBInt32Array", + "text": "BBInt32Array", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBInt64Array", + "text": "BBInt64Array", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBNode", + "text": "BBNode", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBParam", + "text": "BBParam", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBPlane", + "text": "BBPlane", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBProjection", + "text": "BBProjection", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBQuaternion", + "text": "BBQuaternion", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBRect2", + "text": "BBRect2", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBRect2i", + "text": "BBRect2i", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBString", + "text": "BBString", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBStringArray", + "text": "BBStringArray", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBStringName", + "text": "BBStringName", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBTransform2D", + "text": "BBTransform2D", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBTransform3D", + "text": "BBTransform3D", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVariant", + "text": "BBVariant", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector2", + "text": "BBVector2", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector2Array", + "text": "BBVector2Array", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector2i", + "text": "BBVector2i", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector3", + "text": "BBVector3", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector3Array", + "text": "BBVector3Array", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector3i", + "text": "BBVector3i", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector4", + "text": "BBVector4", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BBVector4i", + "text": "BBVector4i", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BehaviorTree", + "text": "BehaviorTree", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BehaviorTreeData", + "text": "BehaviorTreeData", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BehaviorTreeView", + "text": "BehaviorTreeView", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "Blackboard", + "text": "Blackboard", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BlackboardPlan", + "text": "BlackboardPlan", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BT", + "text": "BT", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTAction", + "text": "BTAction", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTAlwaysFail", + "text": "BTAlwaysFail", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTAlwaysSucceed", + "text": "BTAlwaysSucceed", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTAwaitAnimation", + "text": "BTAwaitAnimation", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTCallMethod", + "text": "BTCallMethod", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTCheckAgentProperty", + "text": "BTCheckAgentProperty", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTCheckTrigger", + "text": "BTCheckTrigger", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTCheckVar", + "text": "BTCheckVar", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTComment", + "text": "BTComment", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTComposite", + "text": "BTComposite", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTCondition", + "text": "BTCondition", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTConsolePrint", + "text": "BTConsolePrint", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTCooldown", + "text": "BTCooldown", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTDecorator", + "text": "BTDecorator", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTDelay", + "text": "BTDelay", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTDynamicSelector", + "text": "BTDynamicSelector", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTDynamicSequence", + "text": "BTDynamicSequence", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTEvaluateExpression", + "text": "BTEvaluateExpression", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTFail", + "text": "BTFail", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTForEach", + "text": "BTForEach", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTInstance", + "text": "BTInstance", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTInvert", + "text": "BTInvert", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTNewScope", + "text": "BTNewScope", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTParallel", + "text": "BTParallel", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTPauseAnimation", + "text": "BTPauseAnimation", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTPlayAnimation", + "text": "BTPlayAnimation", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTPlayer", + "text": "BTPlayer", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTProbability", + "text": "BTProbability", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTProbabilitySelector", + "text": "BTProbabilitySelector", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTRandomSelector", + "text": "BTRandomSelector", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTRandomSequence", + "text": "BTRandomSequence", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTRandomWait", + "text": "BTRandomWait", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTRepeat", + "text": "BTRepeat", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTRepeatUntilFailure", + "text": "BTRepeatUntilFailure", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTRepeatUntilSuccess", + "text": "BTRepeatUntilSuccess", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTRunLimit", + "text": "BTRunLimit", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTSelector", + "text": "BTSelector", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTSequence", + "text": "BTSequence", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTSetAgentProperty", + "text": "BTSetAgentProperty", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTSetVar", + "text": "BTSetVar", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTState", + "text": "BTState", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTStopAnimation", + "text": "BTStopAnimation", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTSubtree", + "text": "BTSubtree", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTTask", + "text": "BTTask", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTTimeLimit", + "text": "BTTimeLimit", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTWait", + "text": "BTWait", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "BTWaitTicks", + "text": "BTWaitTicks", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "LimboHSM", + "text": "LimboHSM", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "LimboState", + "text": "LimboState", + "markers": {} + }, + { + "kind": "nav", + "tag": "a", + "path": "", + "html": "LimboUtility", + "text": "LimboUtility", + "markers": {} + } +] \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/build.py b/docs/limboai-stable/_i18n/build.py new file mode 100644 index 0000000..bc77f34 --- /dev/null +++ b/docs/limboai-stable/_i18n/build.py @@ -0,0 +1,294 @@ +"""Rebuild the Chinese HTML from translated templates.""" +import json, re, sys, glob, html as htmllib +from bs4 import BeautifulSoup, Comment, NavigableString + +ROOT = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable" +SRC = ROOT + "/index.html" +OUT = ROOT + "/index.zh.html" +I18N = ROOT + "/_i18n" +sys.path.insert(0, I18N) +from serialize import collect # noqa: E402 + +CHECK_ONLY = "--check" in sys.argv + +soup = BeautifulSoup(open(SRC, encoding="utf-8").read(), "lxml") +blocks = collect(soup) +title_node = soup.find("title") + +uniq = json.load(open(I18N + "/uniq.json", encoding="utf-8"))["uniq"] + + +def key_of(tpl, markers): + return tpl + "\x00" + json.dumps(markers, sort_keys=True) + + +key2uid = {k: v["uid"] for k, v in uniq.items()} + +trans = {} +for f in sorted(glob.glob(I18N + "/trans/batch*.json")): + for k, v in json.load(open(f, encoding="utf-8")).items(): + trans[int(k)] = v + +for b in blocks: + b["uid"] = key2uid.get(key_of(b["tpl"], b["markers"])) + +tok_re = re.compile(r"<(l\d+)>||<([bi])>||<(\d+)/>") + + +def norm(t): + """normalise the tolerated closing-tag variants written by the translator""" + return re.sub(r"", "", t) + + +def tokens(t): + """only the tokens that MUST round-trip identically: opaque ids and anchor ids""" + return sorted(m.group(0) for m in re.finditer(r"<(l\d+)>||<(\d+)/>", t) + if m.group(2) or m.group(1)) + + +def balanced(t): + """/ pairs must be balanced (extra emphasis is allowed)""" + depth = 0 + for m in re.finditer(r"<([bi])>|", t): + depth += 1 if m.group(1) else -1 + if depth < 0: + return False + return depth == 0 + + +def markers_ok(b, zh): + zh = norm(zh) + return tokens(b["tpl"]) == tokens(zh) and balanced(zh) + + +untranslated = [b for b in blocks if b["uid"] not in trans] +bad = [b for b in blocks if b["uid"] in trans and not markers_ok(b, trans[b["uid"]])] +print("blocks:", len(blocks), + "| untranslated:", len(untranslated), + "| marker problems:", len(bad)) +for b in bad[:20]: + print("--- uid", b["uid"]) + print(" en:", b["tpl"][:200]) + print(" zh:", trans[b["uid"]][:200]) +if CHECK_ONLY: + sys.exit(0) + + +def rebuild(tpl, markers): + """turn a translated template back into HTML""" + tpl = norm(tpl) + out, pos = [], 0 + for m in tok_re.finditer(tpl): + out.append(htmllib.escape(tpl[pos:m.start()], quote=False)) + g = m.group(0) + if g.startswith("": + out.append("") + elif g.startswith("") or g.startswith(""): + out.append("" if g.startswith("") + elif g.startswith("" if g.startswith("") + else: + out.append(markers[re.search(r"\d+", g).group(0)]) + pos = m.end() + out.append(htmllib.escape(tpl[pos:], quote=False)) + return "".join(out) + + +def replace_anchor_inner(marker_html, new_inner): + """keep the original attributes + inner wrapper, swap the text""" + frag = BeautifulSoup(marker_html, "html.parser") + root = frag.find(True) + node = root + while True: + kids = [k for k in node.children if not isinstance(k, Comment)] + if len(kids) == 1 and getattr(kids[0], "name", None): + node = kids[0] + else: + break + for k in list(node.children): + k.extract() + inner = BeautifulSoup(new_inner, "html.parser") + for k in list(inner.children): + node.append(k.extract()) + return str(root) + + +def build_block_html(tpl, markers): + parts = re.split(r"(.*?)", norm(tpl), flags=re.S) + out = [] + for p in parts: + m = re.fullmatch(r"(.*?)", p, flags=re.S) + if m: + inner = rebuild(m.group(2), markers) + out.append(replace_anchor_inner(markers[m.group(1)], inner)) + else: + out.append(rebuild(p, markers)) + return "".join(out) + + +def set_inner(el, html_str): + el.clear() + frag = BeautifulSoup(html_str, "html.parser") + for k in list(frag.children): + el.append(k.extract()) + + +collect_ids = set(id(b["node"]) for b in blocks if b["node"] is not None) +# a block that *contains* other collected blocks (e.g.

…) must keep its own +# markup untouched - its text is rebuilt by those nested blocks +containers = set() +for b in blocks: + n = b["node"] + if n is None: + continue + if any(id(d) in collect_ids for d in n.find_all(True)): + containers.add(id(n)) +print("container blocks kept as-is:", len(containers)) + +fixed = 0 +for b in blocks: + uid = b["uid"] + zh = trans.get(uid, b["tpl"]) + if uid not in trans or not markers_ok(b, zh): + continue + if id(b["node"]) in containers: + continue + headerlinks = [h.extract() for h in b["node"].find_all("a", class_="headerlink")] + html_str = build_block_html(zh, b["markers"]) + set_inner(b["node"], html_str) + for h in headerlinks: + b["node"].append(h) + fixed += 1 + +if title_node is not None and 1451 in trans: + title_node.string = trans[1451] + +# ---------------------------------------------------------------- polish pass +ABBR_TITLE = { + "No return value.": "无返回值。", + "This method has no side effects. It doesn't modify any of the instance's member variables.": + "该方法没有副作用,不会修改实例的任何成员变量。", + "This method should typically be overridden by the user to have any effect.": + "该方法通常需要由用户重写才能生效。", + "This method doesn't need an instance to be called, so it can be called directly using the class name.": + "该方法无需实例即可调用,因此可以直接用类名调用。", +} +for el in soup.find_all(attrs={"title": True}): + t = el.get("title") + if t in ABBR_TITLE: + el["title"] = ABBR_TITLE[t] + +# breadcrumb +for li in soup.select("li.breadcrumb-item"): + if li.get_text(strip=True) == "LimboAI 1.0 documentation": + li.string = "LimboAI 1.0 文档" + +# footer +foot = soup.find("footer") +if foot: + info = foot.find("div", {"role": "contentinfo"}) + if info and info.find("p"): + info.find("p").string = "© 2023 年至今 Serhii Snitsaruk 及 LimboAI 贡献者。" + for child in list(foot.children): + if isinstance(child, NavigableString): + s = str(child) + s = s.replace("Built with", "使用 ") + s = s.replace("using a", " 构建,") + s = s.replace("provided by", " 由 ") + child.replace_with(s) + elif getattr(child, "name", None) == "a" and child.get_text(strip=True) == "theme": + child.string = "主题(theme)" + last = foot.contents[-1] if foot.contents else None + if isinstance(last, NavigableString): + last.replace_with(" 提供。\n") + +# code comments inside

+CODE_COMMENTS = {
+    "# Set common target shared between agents in a group:": "# 设置组内各智能体共享的公共目标:",
+    "#   to prevent errors when the instance is freed.": "#   以避免实例被释放时出错。",
+    '# - Important: Avoid specifying a type for "obj" in GDScript': '# - 重要:在 GDScript 中不要为 "obj" 指定类型',
+    "# Access common target shared between agents in a group:": "# 访问组内各智能体共享的公共目标:",
+    '# Check if the "speed" variable exists:': '# 检查 "speed" 变量是否存在:',
+    '# Get object instance stored in the "object" variable.': '# 获取存储在 "object" 变量中的对象实例。',
+    '# Get the value of the "speed" variable, with a default value of 100.0 if not found:':
+        '# 获取 "speed" 变量的值,如果不存在则默认为 100.0:',
+    '# Handle the "movement_started" event here.': '# 在这里处理 "movement_started" 事件。',
+    "# It's quite handy when you need to pass some data to the event handler.":
+        "# 当你需要向事件处理器传递一些数据时,这非常方便。",
+    '# Set the behavior tree, or use a load("res://ai/trees/...") call':
+        '# 设置行为树,或使用 load("res://ai/trees/...") 调用',
+    '# Set the value of the "speed" variable:': '# 设置 "speed" 变量的值:',
+    "# Use chained methods and delegation to set up states:": "# 使用链式方法与委托来配置状态:",
+    "# `cargo` can be passed with the event when calling `dispatch()`.":
+        "# 调用 `dispatch()` 时可以随事件一起传入 `cargo`。",
+    "# Assume `hsm` is a LimboHSM instance and `bt_state` is a BTState instance":
+        "# 假设 `hsm` 是一个 LimboHSM 实例,`bt_state` 是一个 BTState 实例",
+    "# Called each time this task is ticked (aka executed).": "# 每次该任务被 tick(即被执行)时调用。",
+    "# Called to generate a display name for the task (requires @tool).":
+        "# 调用它来为任务生成显示名称(需要 @tool)。",
+    "# Called to generate a display name for the task.": "# 调用它来为任务生成显示名称。",
+    "# Called to initialize the task.": "# 调用它来初始化任务。",
+    "# Called when the task is entered.": "# 当任务被进入时调用。",
+    "# Called when the task is executed.": "# 当任务被执行时调用。",
+    "# Called when the task is exited.": "# 当任务被退出时调用。",
+    "# Example: programmatically link a BT blackboard variable to an HSM blackboard variable":
+        "# 示例:用代码把 BT 黑板变量链接到 HSM 黑板变量",
+    "# NOTE: variable names do not need to match": "# 注意:变量名不必相同",
+    "# Strings returned from this method are displayed as warnings in the editor.":
+        "# 此方法返回的字符串会作为警告显示在编辑器中。",
+    "# Task parameters.": "# 任务参数。",
+    "## AgentGroup node: Manages the shared Blackboard for agents in a group.":
+        "## AgentGroup 节点:管理组内各智能体共享的 Blackboard。",
+    '## At minimum, you only need to define the "_tick" method.': '## 至少只需要定义 "_tick" 方法。',
+    "## Called each frame when this state is active.": "## 当该状态处于活动状态时每帧调用。",
+    "## Called once, when state is initialized.": "## 状态初始化时调用一次。",
+    "## Called when state is entered.": "## 当状态被进入时调用。",
+    "## Called when state is exited.": "## 当状态被退出时调用。",
+    "## Children of this node are assumed to be agents that belong to a common group.":
+        "## 该节点的子节点被假定为属于同一组的智能体。",
+    "## InRange condition checks if the agent is within a range of target,":
+        "## InRange 条件检查智能体是否处于目标的某个范围内,",
+    "## Note: Each method declaration is optional.": "## 注意:每个方法声明都是可选的。",
+    "## PlayAnimation: Play an animation on AnimationPlayer, and wait for it to finish.":
+        "## PlayAnimation:在 AnimationPlayer 上播放动画,并等待其播放完毕。",
+    "## Returns FAILURE if the node is not found.": "## 如果找不到该节点,返回 FAILURE。",
+    "## Returns SUCCESS if the agent is within the defined range;":
+        "## 如果智能体处于定义的范围内,返回 SUCCESS;",
+    "## Shows or hides a node and returns SUCCESS.": "## 显示或隐藏一个节点并返回 SUCCESS。",
+    '## This implementation assumes that each agent has a "BTPlayer" node for AI.':
+        '## 该实现假定每个智能体都有一个用于 AI 的 "BTPlayer" 节点。',
+    "## defined by distance_min and distance_max.": "## 该范围由 distance_min 和 distance_max 定义。",
+    "## otherwise, returns FAILURE.": "## 否则返回 FAILURE。",
+}
+hits = 0
+for pre in soup.find_all("pre"):
+    for txt in pre.find_all(string=True):
+        s = str(txt)
+        orig = s
+        for en, zh in CODE_COMMENTS.items():
+            if en in s:
+                s = s.replace(en, zh)
+        if s != orig:
+            txt.replace_with(s)
+            hits += 1
+print("code comment spans translated:", hits)
+
+
+# translation badge in the sidebar
+logo_link = soup.select_one(".wy-side-nav-search > a")
+if logo_link is not None:
+    badge = BeautifulSoup(
+        '

' + '中文汉化版 · 基于官方英文文档翻译,欢迎对照原文阅读

', "html.parser") + for k in list(badge.children): + logo_link.insert_after(k.extract()) + +out = str(soup) +out = out.replace('LimboAI 1.0 documentation", + "LimboAI 1.0 中文文档") +open(OUT, "w", encoding="utf-8").write(out) +print("rebuilt blocks:", fixed, "->", OUT) diff --git a/docs/limboai-stable/_i18n/extract.py b/docs/limboai-stable/_i18n/extract.py new file mode 100644 index 0000000..cf802b5 --- /dev/null +++ b/docs/limboai-stable/_i18n/extract.py @@ -0,0 +1,57 @@ +"""Extract translatable text nodes from the Sphinx single-page HTML dump.""" +import json, re, sys +from bs4 import BeautifulSoup, NavigableString, Comment + +SRC = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/index.html" +OUT = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/_i18n/strings.json" + +SKIP_TAGS = {"script", "style", "code", "pre", "kbd", "samp", "var", "tt"} +SKIP_CLASS = {"headerlink", "wy-breadcrumbs-aside", "version-switch", "language-switch"} + +html = open(SRC, encoding="utf-8").read() +soup = BeautifulSoup(html, "lxml") + +records = [] +counter = 0 + + +def parent_skipped(node): + for p in node.parents: + if getattr(p, "name", None) is None: + continue + if p.name in SKIP_TAGS: + return True + cls = p.get("class") or [] + if any(c in SKIP_CLASS for c in cls): + return True + return False + + +def has_letter(t): + return bool(re.search(r"[A-Za-z]", t)) or bool(re.search(r"[\u4e00-\u9fff]", t)) + + +for node in soup.find_all(string=True): + if isinstance(node, Comment): + continue + t = str(node) + if not has_letter(t): + continue + if parent_skipped(node): + continue + # keep trailing/leading spaces for reconstruction + stripped = t.strip() + if not stripped: + continue + counter += 1 + records.append({ + "id": counter, + "text": t, + "parents": [p.name for p in node.parents if getattr(p, "name", None)][:4], + }) + +json.dump(records, open(OUT, "w", encoding="utf-8"), ensure_ascii=False, indent=1) +total_chars = sum(len(r["text"]) for r in records) +print("nodes:", len(records), "chars:", total_chars) +from collections import Counter +print(Counter(tuple(r["parents"][:2]) for r in records).most_common(20)) diff --git a/docs/limboai-stable/_i18n/extract_blocks.py b/docs/limboai-stable/_i18n/extract_blocks.py new file mode 100644 index 0000000..41c3c5b --- /dev/null +++ b/docs/limboai-stable/_i18n/extract_blocks.py @@ -0,0 +1,83 @@ +"""Extract translatable BLOCKS (whole paragraph / list item / heading level units) +from the Sphinx single-page HTML dump, keeping inline markup intact so that +context-aware translation is possible. + +Output: _i18n/blocks.json -> list of {id, path, html, text} +Then translator fills _i18n/trans/.json as {"id": ""}. +""" +import json, re +from bs4 import BeautifulSoup, NavigableString, Comment + +SRC = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/index.html" +OUT = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/_i18n/blocks.json" + +BLOCK_TAGS = {"p", "h1", "h2", "h3", "h4", "h5", "h6", "td", "th", "dt", "dd", + "figcaption", "caption", "li", "blockquote"} +# inline tags that must never be translated / never contain translatable prose +OPAQUE = {"code", "pre", "kbd", "samp", "var", "tt", "img", "script", "style"} +SKIP_CLASS = {"headerlink", "version-switch", "language-switch", "wy-breadcrumbs-aside"} + +html = open(SRC, encoding="utf-8").read() +soup = BeautifulSoup(html, "lxml") + +blocks = [] + + +def clean_html(node): + """inner HTML of node with headerlink anchors and comments removed.""" + clone = BeautifulSoup(str(node), "lxml") + for tag in clone.find_all(True): + cls = tag.get("class") or [] + if tag.name == "a" and "headerlink" in cls: + tag.decompose() + out = clone.decode_contents() + out = re.sub(r"", "", out, flags=re.S) + return out.strip() + + +def is_candidate(node): + if node.name not in BLOCK_TAGS: + return False + # li that directly contains p -> the p is the block, li is container + if node.name == "li" and node.find("p", recursive=False): + return False + for p in node.parents: + if getattr(p, "name", None) in OPAQUE: + return False + return True + + +seen = set() +for node in soup.find_all(True): + if not is_candidate(node): + continue + if node.name == "blockquote" and node.find(["p", "li"]): + continue # inner p handled separately + h = clean_html(node) + txt = node.get_text(" ", strip=True) + if not re.search(r"[A-Za-z]", txt): + continue + key = (node.name, h) + path = "/".join([p.get("id") or p.name for p in list(node.parents)[:3][::-1] if getattr(p, "name", None)]) + blocks.append({"tag": node.name, "path": path, "html": h, "text": txt}) + seen.add(key) + +# title + sidebar captions / nav labels are handled as generic elements too +extra = [] +for t in soup.find_all(["title"]): + extra.append({"tag": "title", "path": "head", "html": t.get_text(), "text": t.get_text()}) +for cap in soup.select("p.caption span.caption-text, nav a, .wy-menu a"): + txt = cap.get_text(" ", strip=True) + if not re.search(r"[A-Za-z]", txt): + continue + extra.append({"tag": "nav", "path": "nav", "html": clean_html(cap) or txt, "text": txt}) + +allb = extra + blocks +json.dump(allb, open(OUT, "w", encoding="utf-8"), ensure_ascii=False, indent=1) + +uniq = {} +for b in allb: + uniq.setdefault(b["html"], b) +print("blocks:", len(allb), "unique html:", len(uniq), "unique chars:", sum(len(k) for k in uniq)) +from collections import Counter +print(Counter(b["tag"] for b in allb).most_common()) diff --git a/docs/limboai-stable/_i18n/gaps.py b/docs/limboai-stable/_i18n/gaps.py new file mode 100644 index 0000000..85b4a20 --- /dev/null +++ b/docs/limboai-stable/_i18n/gaps.py @@ -0,0 +1,33 @@ +"""Report text that is still English in the localized page (gap finder).""" +import re, sys +from bs4 import BeautifulSoup, NavigableString, Comment + +SRC = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/index.zh.html" +SKIP = {"script", "style", "pre", "code", "kbd", "samp", "var", "tt"} + +soup = BeautifulSoup(open(SRC, encoding="utf-8").read(), "lxml") +rows = [] +for node in soup.find_all(string=True): + if isinstance(node, Comment): + continue + t = str(node).strip() + if not re.search(r"[A-Za-z]", t): + continue + if any(getattr(p, "name", None) in SKIP for p in node.parents): + continue + words = re.findall(r"[A-Za-z][A-Za-z'\-]+", t) + long_words = [w for w in words if len(w) > 2 and not w[0].isupper()] + if len(words) >= 4 or len(long_words) >= 2: + parents = "/".join(p.name for p in list(node.parents)[:3]) + rows.append((parents, t)) + +print("leftover english-ish text nodes:", len(rows)) +seen = set() +for p, t in rows: + k = t[:60] + if k in seen: + continue + seen.add(k) + print(" [%s] %s" % (p, t[:150])) + if len(seen) > 40: + break diff --git a/docs/limboai-stable/_i18n/make_batches.py b/docs/limboai-stable/_i18n/make_batches.py new file mode 100644 index 0000000..b0271ae --- /dev/null +++ b/docs/limboai-stable/_i18n/make_batches.py @@ -0,0 +1,42 @@ +"""Assign stable uids to unique translatable templates and slice them into batch files.""" +import json, re, os +from bs4 import BeautifulSoup +from serialize import collect, SRC + +OUTDIR = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/_i18n" + +soup = BeautifulSoup(open(SRC, encoding="utf-8").read(), "lxml") +blocks = collect(soup) +blocks.append({"kind": "title", "tag": "title", + "tpl": soup.find("title").get_text(), "markers": {}, "node": None}) + +os.makedirs(OUTDIR + "/batches", exist_ok=True) +os.makedirs(OUTDIR + "/trans", exist_ok=True) + + +def key(b): + return b["tpl"] + "\x00" + json.dumps(b["markers"], sort_keys=True) + + +uniq = {} +for b in blocks: # document order preserved + k = key(b) + if k not in uniq: + uniq[k] = {"uid": len(uniq) + 1, "tpl": b["tpl"], "markers": b["markers"]} + +json.dump({"uniq": uniq}, + open(f"{OUTDIR}/uniq.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1) + +CHARS = 12000 +batch, size, nb = [], 0, 0 +for v in uniq.values(): + batch.append("<%d> %s" % (v["uid"], v["tpl"].replace("\n", " ⏎ "))) + size += len(v["tpl"]) + 12 + if size >= CHARS: + nb += 1 + open(f"{OUTDIR}/batches/batch{nb:02d}.txt", "w", encoding="utf-8").write("\n".join(batch)) + batch, size = [], 0 +if batch: + nb += 1 + open(f"{OUTDIR}/batches/batch{nb:02d}.txt", "w", encoding="utf-8").write("\n".join(batch)) +print("unique:", len(uniq), "batches:", nb) diff --git a/docs/limboai-stable/_i18n/serialize.py b/docs/limboai-stable/_i18n/serialize.py new file mode 100644 index 0000000..2440733 --- /dev/null +++ b/docs/limboai-stable/_i18n/serialize.py @@ -0,0 +1,120 @@ +"""Serialize translatable blocks into compact marker templates. + +Marker scheme (short => cheap to reproduce while translating): + opaque inline element (code / img / kbd / abbr-with-code-text) - kept verbatim + .. link (
): inner text is translatable, anchor markup is restored later + .. + .. + everything else inline is transparent (unwrapped) but its text is translatable +""" +import json, re, sys +from bs4 import BeautifulSoup, NavigableString, Comment + +SRC = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/index.html" +OUT = r"C:/Users/yvmou/Downloads/limboai-readthedocs-io-en-stable/limboai-stable/_i18n/blocks.json" + +BLOCK_TAGS = {"p", "h1", "h2", "h3", "h4", "h5", "h6", "td", "th", "dt", "dd", + "figcaption", "caption", "li"} +OPAQUE = {"code", "kbd", "samp", "var", "tt", "img", "pre", "script", "style", "math"} +TRANSPARENT = {"span", "cite", "markdown", "mark", "small", "sub", "sup", "u", "s", "q"} + + +class Ser: + def __init__(self): + self.markers = {} + self.n = 0 + + def add(self, html): + self.n += 1 + self.markers[str(self.n)] = html + return self.n + + def walk(self, node, out): + for ch in node.children: + if isinstance(ch, Comment): + continue + if isinstance(ch, NavigableString): + s = re.sub(r"\s+", " ", str(ch)) + if s: + out.append(s) + continue + name = ch.name + cls = ch.get("class") or [] + if name == "a" and "headerlink" in cls: + continue + if name in OPAQUE or name == "abbr": + out.append("<%d/>" % self.add(str(ch))) + continue + if name in TRANSPARENT: + self.walk(ch, out) + continue + if name == "a": + idx = self.add(str(ch)) + out.append("" % idx) + self.walk(ch, out) + out.append("") + continue + if name == "strong": + out.append("") + self.walk(ch, out) + out.append("") + continue + if name in ("em", "dfn"): + out.append("") + self.walk(ch, out) + out.append("") + continue + self.walk(ch, out) + + def run(self, tag): + out = [] + self.walk(tag, out) + tpl = "".join(out) + tpl = re.sub(r"[ \t]*\n[ \t]*", "\n", tpl) + tpl = re.sub(r"\n{2,}", "\n", tpl).strip() + return tpl + + +def serialize(node, kind, feed): + s = Ser() + tpl = s.run(node) + if not re.search(r"[A-Za-z]", re.sub(r"<[^>]*>", "", tpl)): + return + feed.append({"kind": kind, "tag": node.name, "tpl": tpl, "markers": s.markers, + "node": node}) + + +def collect(soup): + """Walk the document exactly the way the extractor did.""" + feed = [] + body = soup.find("div", {"role": "main"}) + for node in body.find_all(True): + if node.name not in BLOCK_TAGS: + continue + if node.name == "li" and node.find("p", recursive=False): + continue + for p in node.parents: + if getattr(p, "name", None) in ("pre", "code"): + break + else: + serialize(node, "body", feed) + for cap in soup.select("p.caption span.caption-text"): + serialize(cap, "nav", feed) + for a in soup.select("div.wy-menu a, nav a"): + if a.find_parent("div", class_="wy-menu") is None: + continue + serialize(a, "nav", feed) + return feed + + +if __name__ == "__main__": + blocks = collect(BeautifulSoup(open(SRC, encoding="utf-8").read(), "lxml")) + plain = [{"kind": b["kind"], "tag": b["tag"], "path": "", "html": b["tpl"], + "text": re.sub(r"<[^>]*>", "", b["tpl"]), "markers": b["markers"]} + for b in blocks] + json.dump(plain, open(OUT, "w", encoding="utf-8"), ensure_ascii=False, indent=1) + uniq = {} + for b in blocks: + uniq.setdefault(b["tpl"] + "\x00" + json.dumps(b["markers"], sort_keys=True), b) + print("blocks:", len(blocks), "unique:", len(uniq), + "unique tpl chars:", sum(len(b["tpl"]) for b in uniq.values())) diff --git a/docs/limboai-stable/_i18n/strings.json b/docs/limboai-stable/_i18n/strings.json new file mode 100644 index 0000000..8dcdca0 --- /dev/null +++ b/docs/limboai-stable/_i18n/strings.json @@ -0,0 +1,43159 @@ +[ + { + "id": 1, + "text": "html", + "parents": [ + "[document]" + ] + }, + { + "id": 2, + "text": "LimboAI 1.0 documentation", + "parents": [ + "title", + "head", + "html", + "[document]" + ] + }, + { + "id": 3, + "text": "Getting started", + "parents": [ + "span", + "p", + "div", + "div" + ] + }, + { + "id": 4, + "text": "Getting LimboAI", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 5, + "text": "Using LimboAI with C#", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 6, + "text": "Contributing", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 7, + "text": "Behavior Trees", + "parents": [ + "span", + "p", + "div", + "div" + ] + }, + { + "id": 8, + "text": "Introduction to Behavior Trees", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 9, + "text": "Creating Behavior Trees", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 10, + "text": "Creating custom tasks", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 11, + "text": "Sharing data using Blackboard", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 12, + "text": "Accessing nodes in the scene tree", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 13, + "text": "Hierarchical State MachineS", + "parents": [ + "span", + "p", + "div", + "div" + ] + }, + { + "id": 14, + "text": "Create State Machines", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 15, + "text": "Class reference", + "parents": [ + "span", + "p", + "div", + "div" + ] + }, + { + "id": 16, + "text": "Important classes", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 17, + "text": "BBAabb", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 18, + "text": "BBArray", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 19, + "text": "BBBasis", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 20, + "text": "BBBool", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 21, + "text": "BBByteArray", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 22, + "text": "BBColor", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 23, + "text": "BBColorArray", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 24, + "text": "BBDictionary", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 25, + "text": "BBFloat", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 26, + "text": "BBFloat32Array", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 27, + "text": "BBFloat64Array", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 28, + "text": "BBInt", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 29, + "text": "BBInt32Array", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 30, + "text": "BBInt64Array", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 31, + "text": "BBNode", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 32, + "text": "BBParam", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 33, + "text": "BBPlane", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 34, + "text": "BBProjection", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 35, + "text": "BBQuaternion", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 36, + "text": "BBRect2", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 37, + "text": "BBRect2i", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 38, + "text": "BBString", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 39, + "text": "BBStringArray", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 40, + "text": "BBStringName", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 41, + "text": "BBTransform2D", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 42, + "text": "BBTransform3D", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 43, + "text": "BBVariant", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 44, + "text": "BBVector2", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 45, + "text": "BBVector2Array", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 46, + "text": "BBVector2i", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 47, + "text": "BBVector3", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 48, + "text": "BBVector3Array", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 49, + "text": "BBVector3i", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 50, + "text": "BBVector4", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 51, + "text": "BBVector4i", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 52, + "text": "BehaviorTree", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 53, + "text": "BehaviorTreeData", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 54, + "text": "BehaviorTreeView", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 55, + "text": "Blackboard", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 56, + "text": "BlackboardPlan", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 57, + "text": "BT", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 58, + "text": "BTAction", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 59, + "text": "BTAlwaysFail", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 60, + "text": "BTAlwaysSucceed", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 61, + "text": "BTAwaitAnimation", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 62, + "text": "BTCallMethod", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 63, + "text": "BTCheckAgentProperty", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 64, + "text": "BTCheckTrigger", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 65, + "text": "BTCheckVar", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 66, + "text": "BTComment", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 67, + "text": "BTComposite", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 68, + "text": "BTCondition", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 69, + "text": "BTConsolePrint", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 70, + "text": "BTCooldown", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 71, + "text": "BTDecorator", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 72, + "text": "BTDelay", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 73, + "text": "BTDynamicSelector", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 74, + "text": "BTDynamicSequence", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 75, + "text": "BTEvaluateExpression", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 76, + "text": "BTFail", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 77, + "text": "BTForEach", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 78, + "text": "BTInstance", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 79, + "text": "BTInvert", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 80, + "text": "BTNewScope", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 81, + "text": "BTParallel", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 82, + "text": "BTPauseAnimation", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 83, + "text": "BTPlayAnimation", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 84, + "text": "BTPlayer", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 85, + "text": "BTProbability", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 86, + "text": "BTProbabilitySelector", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 87, + "text": "BTRandomSelector", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 88, + "text": "BTRandomSequence", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 89, + "text": "BTRandomWait", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 90, + "text": "BTRepeat", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 91, + "text": "BTRepeatUntilFailure", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 92, + "text": "BTRepeatUntilSuccess", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 93, + "text": "BTRunLimit", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 94, + "text": "BTSelector", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 95, + "text": "BTSequence", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 96, + "text": "BTSetAgentProperty", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 97, + "text": "BTSetVar", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 98, + "text": "BTState", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 99, + "text": "BTStopAnimation", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 100, + "text": "BTSubtree", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 101, + "text": "BTTask", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 102, + "text": "BTTimeLimit", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 103, + "text": "BTWait", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 104, + "text": "BTWaitTicks", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 105, + "text": "LimboHSM", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 106, + "text": "LimboState", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 107, + "text": "LimboUtility", + "parents": [ + "a", + "li", + "ul", + "div" + ] + }, + { + "id": 108, + "text": "LimboAI", + "parents": [ + "a", + "nav", + "section", + "div" + ] + }, + { + "id": 109, + "text": "LimboAI 1.0 documentation", + "parents": [ + "li", + "ul", + "div", + "div" + ] + }, + { + "id": 110, + "text": "LimboAI Documentation", + "parents": [ + "h1", + "section", + "div", + "div" + ] + }, + { + "id": 111, + "text": "LimboAI", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 112, + "text": " is an open-source C++ module for ", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 113, + "text": "Godot Engine 4", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 114, + "text": " providing a combination of\n", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 115, + "text": "Behavior Trees", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 116, + "text": " and ", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 117, + "text": "State Machines", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 118, + "text": " for crafting your game’s AI. It comes with a\nbehavior tree editor, built-in documentation, visual debugger, and more! While\nit is implemented in C++, it fully supports GDScript for ", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 119, + "text": "creating your own tasks", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 120, + "text": "\nand states. The full list of features is available on the\n", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 121, + "text": "LimboAI GitHub", + "parents": [ + "a", + "p", + "section", + "div" + ] + }, + { + "id": 122, + "text": " page.", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 123, + "text": "Behavior Trees", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 124, + "text": " are powerful hierarchical structures used to model and control the behavior\nof agents in a game (e.g., characters, enemies, entities). They are designed to\nmake it easier to create complex and highly modular behaviors for your games.\nTo learn more about behavior trees, check out ", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 125, + "text": "Introduction to Behavior Trees", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 126, + "text": "Hierarchical State Machines", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 127, + "text": " are finite state machines that allow any state to host their own\nsub-state machine. This allows you to tackle your AI’s state and transition complexity by breaking down\none big state machine into multiple smaller ones.", + "parents": [ + "p", + "section", + "div", + "div" + ] + }, + { + "id": 128, + "text": "Getting LimboAI", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 129, + "text": "LimboAI can be used as either a C++ module or as a GDExtension shared library.\nThere are some differences between the two. In short, GDExtension version is more\nconvenient to use but somewhat limited in features. The module version provides better editor\nexperience and is slightly more performant, but it requires using custom engine builds including the export templates.\nWhichever you choose to use, your project will stay compatible with both and you can switch from one to\nthe other any time.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 130, + "text": "Choose the version you’d like to use. If you’re unsure, start with the GDExtension version.\nYou can change your decision at any time - both versions are fully compatible.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 131, + "text": "Get GDExtension version", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 132, + "text": "Precompiled builds are available on the official\n", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 133, + "text": "LimboAI GitHub", + "parents": [ + "a", + "p", + "section", + "section" + ] + }, + { + "id": 134, + "text": " page,\nand in the Asset Library.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 135, + "text": "GDExtension is the most convenient way of using the LimboAI plugin, but it comes\nwith certain limitations:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 136, + "text": "Documentation tooltips are not available.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 137, + "text": "Handy ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 138, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 139, + "text": " property editor is not available in the extension due to dependencies on the engine classes that are not available in the Godot API.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 140, + "text": "🛈 See also:", + "parents": [ + "strong", + "p", + "div", + "blockquote" + ] + }, + { + "id": 141, + "text": "What is GDExtension?", + "parents": [ + "a", + "p", + "div", + "blockquote" + ] + }, + { + "id": 142, + "text": "Installation instructions:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 143, + "text": "Make sure you’re using the latest stable version of the Godot editor.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 144, + "text": "Create a new project for your experiments with LimboAI.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 145, + "text": "In Godot, click AssetLib tab at the top of the screen and search for LimboAI. Download it. LimboAI plugin will be downloaded with the demo project files. Don’t mind the errors printed at this point, this is due to the extension library not being loaded just yet.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 146, + "text": "Reload your project with ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 147, + "text": "Project -> Reload project", + "parents": [ + "cite", + "p", + "li", + "ol" + ] + }, + { + "id": 148, + "text": ". There shouldn’t be any errors printed now.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 149, + "text": "In the project files, locate a scene file called ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 150, + "text": "showcase.tscn", + "parents": [ + "cite", + "p", + "li", + "ol" + ] + }, + { + "id": 151, + "text": " and run it. It’s the demo’s entry point.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 152, + "text": "Get module version", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 153, + "text": "Precompiled builds are available on the official\n", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 154, + "text": "LimboAI GitHub", + "parents": [ + "a", + "p", + "section", + "section" + ] + }, + { + "id": 155, + "text": " page.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 156, + "text": "Installation instructions:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 157, + "text": "In ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 158, + "text": "GitHub releases", + "parents": [ + "a", + "p", + "li", + "ol" + ] + }, + { + "id": 159, + "text": ", download the latest pre-compiled release build for your platform.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 160, + "text": "Download the demo project archive from the same release.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 161, + "text": "Extract the pre-compiled editor and the demo project files.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 162, + "text": "Launch the pre-compiled editor binary, import and open the demo project.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 163, + "text": "Run the project.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 164, + "text": "Important", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 165, + "text": ": To export your game using the module version of LimboAI, make sure to use the pre-compiled export templates included in the same GitHub release build.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 166, + "text": "Using LimboAI with C#", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 167, + "text": "Here’s how you can use the module version with C# to write your tasks and states.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 168, + "text": "Locate LimboAI NuGet package files.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 169, + "text": "Each provided build comes with a GodotSharp folder, which has packages under\n“GodotSharp/Tools/nupkgs/”. Note down the directory path; you’ll need it in the next step.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 170, + "text": "Add a local source for NuGet packages using the following command:", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 171, + "text": "Your C# project should be able to see LimboAI classes and compile.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 172, + "text": "Regarding GDExtension, I can only confirm success with the module version and C#.\nUnfortunately, I haven’t had any luck with the GDExtension version yet.\nIf you’ve had success with GDExtension, please let me know via Discord or email.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 173, + "text": "Contributing", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 174, + "text": "We target the latest stable version of the Godot Engine for development until a\nthird beta or a release candidate of an upcoming Godot release becomes available.\nIf you want to contribute to the project, please ensure that you are using the\ncorresponding Godot version.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 175, + "text": "We follow the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 176, + "text": "Godot code style guidelines", + "parents": [ + "a", + "p", + "section", + "div" + ] + }, + { + "id": 177, + "text": ".\nPlease use ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 178, + "text": " to maintain consistent styling. You can install\n", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 179, + "text": " hooks for Git using ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 180, + "text": " to automate this process.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 181, + "text": "Please keep the minor versions backward-compatible when submitting pull requests.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 182, + "text": "We support building LimboAI as a module for the Godot Engine and as a GDExtension library.\nMake sure your contribution is compatible with both. Our CI workflow will verify\nthat your changes can be compiled in both configurations.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 183, + "text": "Compiling as module of the Godot Engine", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 184, + "text": "Clone the Godot Engine repository.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 185, + "text": "Switch to the latest stable tag.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 186, + "text": "Clone the LimboAI repository into the ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 187, + "text": " directory.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 188, + "text": "Consult the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 189, + "text": "Godot Engine documentation", + "parents": [ + "a", + "p", + "section", + "section" + ] + }, + { + "id": 190, + "text": "\nfor detailed instructions on building the engine.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 191, + "text": "Unit tests", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 192, + "text": " can be compiled using the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 193, + "text": " build option. To execute them,\nrun the compiled Godot binary with the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 194, + "text": " command-line options.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 195, + "text": "Building C# Packages", + "parents": [ + "h4", + "section", + "section", + "section" + ] + }, + { + "id": 196, + "text": "If you want C# Support for LimboAI when building from source, follow Godot’s instructions for building from source with\nC# Support: ", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 197, + "text": "Compiling with .NET", + "parents": [ + "a", + "p", + "section", + "section" + ] + }, + { + "id": 198, + "text": ".\nLimboAI’s classes will be included in the output from that build process.", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 199, + "text": "Compiling as GDExtension library", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 200, + "text": "You’ll need the SCons build tool and a C++ compiler. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 201, + "text": "Compiling", + "parents": [ + "a", + "p", + "section", + "section" + ] + }, + { + "id": 202, + "text": ".\nRun ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 203, + "text": " to build the plugin library for your current platform.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 204, + "text": "SCons will automatically clone the ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 205, + "text": " repository if it doesn’t already exist in the ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 206, + "text": " directory.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 207, + "text": "By default, built targets are placed in the demo project: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 208, + "text": "Check ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 209, + "text": " for other options and targets.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 210, + "text": "Contributing to the documentation", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 211, + "text": "Online documentation is created using ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 212, + "text": "Sphinx", + "parents": [ + "a", + "p", + "section", + "section" + ] + }, + { + "id": 213, + "text": ".\nSource files are located in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 214, + "text": " directory in RST format and can\nbe built locally with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 215, + "text": ". See the\n", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 216, + "text": "Sphinx documentation", + "parents": [ + "a", + "p", + "section", + "section" + ] + }, + { + "id": 217, + "text": "\nfor more details.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 218, + "text": "Class documentation resides in XML files within the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 219, + "text": " directory.\nIf you create a new class or modify an existing one, you can run the compiled\nGodot binary with the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 220, + "text": " option in the root of the Godot source code\nto generate the missing XML files or sections within those files in the class documentation.\nAfter editing the XML files, please run the compiled editor binary with the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 221, + "text": "\noption again to update and tidy up the XML files.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 222, + "text": "Sphinx RST files for the class documentation are generated from\nXML files using the Godot script ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 223, + "text": " and stored in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 224, + "text": " directory.\nThis process is performed using our own script ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 225, + "text": ". RST files\nin ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 226, + "text": " should not be edited manually.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 227, + "text": "Introduction to Behavior Trees", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 228, + "text": "🛈 Note:", + "parents": [ + "strong", + "p", + "div", + "blockquote" + ] + }, + { + "id": 229, + "text": " Demo project includes a tutorial that provides an introduction to behavior trees through illustrative examples.", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 230, + "text": "Behavior Trees (BT)", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 231, + "text": " are hierarchical structures used to model and\ncontrol the behavior of agents in a game (e.g., characters, enemies,\nentities). They are designed to make it easier to create complex and\nhighly modular behaviors for your games.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 232, + "text": "Behavior Trees are composed of tasks that represent specific actions or\ndecision-making rules. Tasks can be broadly categorized into two main\ntypes: control tasks and leaf tasks. ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 233, + "text": "Control tasks", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 234, + "text": " determine the\nexecution flow within the tree. They include ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 235, + "text": "Sequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 236, + "text": "Selector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 237, + "text": ", and\n", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 238, + "text": "Invert", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 239, + "text": "Leaf tasks", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 240, + "text": " represent specific actions\nto perform, like moving or attacking, or conditions that need to be\nchecked. The ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 241, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 242, + "text": " class provides the foundation for various\nbuilding blocks of the Behavior Trees. Such tasks can ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 243, + "text": "share data using the Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 244, + "text": "🛈 Note:", + "parents": [ + "strong", + "p", + "div", + "blockquote" + ] + }, + { + "id": 245, + "text": " To ", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 246, + "text": "create your own actions", + "parents": [ + "span", + "a", + "p", + "div" + ] + }, + { + "id": 247, + "text": ", extend the ", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 248, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "div" + ] + }, + { + "id": 249, + "text": "\nclass.", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 250, + "text": "A Behavior Tree is usually processed each frame. It is traversed from top to bottom,\nwith the control tasks determining the control flow. Each task has a ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 251, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 252, + "text": "\nmethod, which performs the task’s work and returns a status indicating its progress:\n", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 253, + "text": ", or ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 254, + "text": " and ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 255, + "text": " indicate the\noutcome of finished work, while ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 256, + "text": " status is returned when a task requires\nmore than one tick to complete its job. These statuses determine how the tree\nprogresses, with the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 257, + "text": " status usually meaning that the tree will\ncontinue execution during the next frame.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 258, + "text": "There are ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 259, + "text": "four types of tasks", + "parents": [ + "em", + "p", + "section", + "div" + ] + }, + { + "id": 260, + "text": "Actions", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 261, + "text": " are leaf tasks that perform the actual work.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 262, + "text": "Examples: ", + "parents": [ + "p", + "li", + "ul", + "li" + ] + }, + { + "id": 263, + "text": "PlayAnimation", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 264, + "text": "Wait", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 265, + "text": "Conditions", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 266, + "text": " are leaf tasks that conduct various checks.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 267, + "text": "Examples: ", + "parents": [ + "p", + "li", + "ul", + "li" + ] + }, + { + "id": 268, + "text": "CheckVar", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 269, + "text": "InRange", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 270, + "text": "Composites", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 271, + "text": " can have one or more child tasks, and dictate the execution flow of their children.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 272, + "text": "Examples: ", + "parents": [ + "p", + "li", + "ul", + "li" + ] + }, + { + "id": 273, + "text": "Sequence", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 274, + "text": "Selector", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 275, + "text": "Parallel", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 276, + "text": "Decorators", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 277, + "text": " can only have a single child and they change how their child task operates.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 278, + "text": "Examples: ", + "parents": [ + "p", + "li", + "ul", + "li" + ] + }, + { + "id": 279, + "text": "AlwaysSucceed", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 280, + "text": "Invert", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 281, + "text": "TimeLimit", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 282, + "text": "Sequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 283, + "text": " is one of the core composite tasks.\nIt executes its child tasks sequentially, from first to last, until one of them\nreturns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 284, + "text": ", or all of them result in ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 285, + "text": ". In other words,\nif any child task results in ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 286, + "text": ", the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 287, + "text": "Sequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 288, + "text": "\nexecution will be aborted, and the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 289, + "text": "Sequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 290, + "text": " itself will\nreturn ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 291, + "text": "Selector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 292, + "text": " is another essential composite task.\nIt executes its child tasks sequentially, from first to last, until one of them\nreturns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 293, + "text": " or all of them result in ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 294, + "text": ". In other words, when\na child task results in ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 295, + "text": ", it moves on to the next one until it\nfinds the one that returns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 296, + "text": ". Once a child task results in ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 297, + "text": ",\nthe ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 298, + "text": "Selector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 299, + "text": " stops and also returns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 300, + "text": ".\nThe purpose of the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 301, + "text": "Selector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 302, + "text": " is to find a child that succeeds.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 303, + "text": "Behavior Trees handle conditional logic using ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 304, + "text": "condition tasks", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 305, + "text": ". These\ntasks check for specific conditions and return either ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 306, + "text": " or\n", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 307, + "text": " based on the state of the agent or its environment (e.g.,\n“IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together\nwith ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 308, + "text": "Sequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 309, + "text": " and ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 310, + "text": "Selector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 311, + "text": "\nto craft your decision-making logic.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 312, + "text": "🛈 Note:", + "parents": [ + "strong", + "p", + "div", + "blockquote" + ] + }, + { + "id": 313, + "text": " To ", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 314, + "text": "create your own conditions", + "parents": [ + "span", + "a", + "p", + "div" + ] + }, + { + "id": 315, + "text": ", extend the ", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 316, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "div" + ] + }, + { + "id": 317, + "text": "\nclass.", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 318, + "text": "Check out the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 319, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 320, + "text": " class documentation, which\nprovides the foundation for various building blocks of Behavior Trees.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 321, + "text": "Creating Behavior Trees", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 322, + "text": "This chapter describes how to create and debug behavior trees.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 323, + "text": "Add a Behavior Tree to an agent", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 324, + "text": "Follow these steps to add a behavior tree to a new or existing agent:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 325, + "text": "Make a scene file for your agent, or open an existing scene.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 326, + "text": "Add a ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 327, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 328, + "text": " node to your scene.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 329, + "text": "Select ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 330, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 331, + "text": ", and create a new behavior tree in the inspector.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 332, + "text": "Optionally, you can save the behavior tree to a file using the property’s context menu.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 333, + "text": "Click the behavior tree property to open it in the LimboAI editor.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 334, + "text": "Debugging Behavior Trees", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 335, + "text": "In Godot Engine, follow to “Bottom Panel > Debugger > LimboAI” tab. With the LimboAI debugger,\nyou can inspect any currently active behavior tree within the running project. The debugger can be detached\nfrom the main editor window, which can be particularly useful if you have a HiDPI or a secondary display.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 336, + "text": "Inspecting task properties and blackboard", + "parents": [ + "h4", + "section", + "section", + "section" + ] + }, + { + "id": 337, + "text": "When you click on a task in the LimboAI debugger, its properties are shown in the remote Inspector panel,\nincluding the ", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 338, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 339, + "text": " reference. Click the ", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 340, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 341, + "text": "\nto open it and view all variables across the full scope chain, grouped by scope.\nYou can also edit variable values live, which can be useful for testing and debugging your game’s AI.", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 342, + "text": "Creating custom tasks", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 343, + "text": "By default, user tasks should be placed in the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 344, + "text": "\ndirectory. You can set an alternative location for user tasks in the\n", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 345, + "text": " (To see those options,\n", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 346, + "text": " should be enabled in the Project Settings).", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 347, + "text": "Each subdirectory within the user tasks directory is treated as a category.\nTherefore, if you create a subdirectory named “motion_and_physics,” your\ncustom tasks in that directory will automatically be categorized under\n“Motion And Physics.”", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 348, + "text": "When creating custom tasks, ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 349, + "text": "extend one of the following", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 350, + "text": " base classes:\n", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 351, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 352, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 353, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 354, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 355, + "text": ".\nMore on task types you can read in the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 356, + "text": "Introduction to Behavior Trees", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 357, + "text": "🛈 Note:", + "parents": [ + "strong", + "p", + "div", + "blockquote" + ] + }, + { + "id": 358, + "text": " To help you write new tasks, you can add a script template to\nyour project using “Misc → Create script template” menu option.", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 359, + "text": "Using the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 360, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 361, + "text": " is covered in ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 362, + "text": "Accessing the Blackboard in a Task", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 363, + "text": "Task anatomy", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 364, + "text": "Example 1: A simple action", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 365, + "text": "Example 2: InRange condition", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 366, + "text": "Creating tasks in C#", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 367, + "text": "You can use the following script template for custom tasks:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 368, + "text": "Sharing data using Blackboard", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 369, + "text": "To share data between different tasks and states, we employ a feature known as the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 370, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 371, + "text": ".\nThe ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 372, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 373, + "text": " serves as a central repository where tasks and states can store and retrieve named variables,\nallowing for seamless data interchange. Each instance of a behavior tree or a state machine gets its own dedicated ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 374, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 375, + "text": ". It has the capability to store various data types,\nincluding objects and resources.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 376, + "text": "Using the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 377, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 378, + "text": ", you can easily share data in your behavior trees, making the tasks in the behavior tree more flexible.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 379, + "text": "Accessing the Blackboard in a Task", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 380, + "text": "Every ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 381, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 382, + "text": " has access to the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 383, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 384, + "text": ", providing a\nstraightforward mechanism for data exchange.\nHere’s an example of how you can interact with the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 385, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 386, + "text": " in GDScript:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 387, + "text": "If you are accessing a variable that holds an object instance, and it is\nexpected that the instance may be null or freed, you can do it like this:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 388, + "text": "It is recommended to suffix variable name properties with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 389, + "text": ", like in the example above, which enables the\ninspector to provide a more convenient property editor for the variable. This editor\nallows you to select or add the variable to the blackboard plan, and provides a\nwarning icon if the variable does not exist in the blackboard plan.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 390, + "text": "🛈 Note:", + "parents": [ + "strong", + "p", + "div", + "blockquote" + ] + }, + { + "id": 391, + "text": " The variable doesn’t need to exist when you set it in code.", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 392, + "text": "Editing the Blackboard Plan", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 393, + "text": "The Blackboard Plan, associated with each ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 394, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 395, + "text": "\nresource, dictates how the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 396, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 397, + "text": " initializes for each\nnew instance of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 398, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 399, + "text": ".\nBlackboardPlan resource stores default values, type information, and data bindings\nnecessary for ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 400, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 401, + "text": " initialization.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 402, + "text": "To add, modify, or remove variables from the Blackboard Plan, follow these steps:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 403, + "text": "Open the LimboAI editor and load the behavior tree you want to edit.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 404, + "text": "In the editor, click on the small button located inside the tab. This will open the ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 405, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 406, + "text": " in the Inspector.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 407, + "text": "In the Inspector, click the “Manage…” button to show the blackboard plan editor.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 408, + "text": "In the blackboard plan editor, you can add, remove, or reorder variables, and modify their data type and hint.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 409, + "text": "The hint provides additional information about the variable to the Inspector, such as minimum and maximum values for an integer variable. Learn more about ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 410, + "text": "property hints in the official Godot documentation", + "parents": [ + "a", + "p", + "li", + "ol" + ] + }, + { + "id": 411, + "text": "You can specify the default values of the variables directly in the Inspector.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 412, + "text": "Overriding variables in BTPlayer", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 413, + "text": "Each ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 414, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 415, + "text": " node also has a “Blackboard Plan” property,\nproviding the ability to override values of the BehaviorTree’s blackboard variables.\nThese overrides are specific to the BTPlayer’s scene\nand do not impact other scenes using the same ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 416, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 417, + "text": ".\nTo modify these values:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 418, + "text": "Select the BTPlayer node in the scene tree.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 419, + "text": "In the Inspector, locate the “Blackboard Plan” property.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 420, + "text": "Override the desired values to tailor the blackboard variables for the specific scene.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 421, + "text": "Task parameters", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 422, + "text": "In some cases, it can be beneficial to allow behavior tree tasks to export parameters\nthat can either be ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 423, + "text": "bound to a blackboard variable or specified directly", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 424, + "text": " by the user.\nFor this purpose, LimboAI provides special parameter types that begin with “BB”,\nsuch as ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 425, + "text": "BBInt", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 426, + "text": "BBBool", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 427, + "text": "BBString", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 428, + "text": "BBFloat", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 429, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 430, + "text": ", and more.\nFor a complete list, please refer to the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 431, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 432, + "text": " class reference.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 433, + "text": "Usage example:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 434, + "text": "Connecting variables in BTs to HSMs: Variable mapping", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 435, + "text": "Each ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 436, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 437, + "text": " creates a new blackboard scope for its\nBehaviorTree instance. Because BehaviorTrees are reusable resources that can run\nin different contexts or on different agents, they do not automatically see\nvariables defined in the HSM. At runtime, HSM variables are usually accessible\ninside the BT via the parent scope blackboard, but the recommended way to access\nthem is through ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 438, + "text": "mapping", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 439, + "text": "Note", + "parents": [ + "p", + "div", + "section", + "section" + ] + }, + { + "id": 440, + "text": "To learn more about scopes, see ", + "parents": [ + "p", + "div", + "section", + "section" + ] + }, + { + "id": 441, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "div" + ] + }, + { + "id": 442, + "text": "When both the BehaviorTree and the HSM declare variables in their respective\n", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 443, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 444, + "text": " resources, the editor provides a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 445, + "text": "Mapping", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 446, + "text": "\nsection in the BlackboardPlan inspector. Mapping is the intended and recommended way to\nconnect variables between related plans.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 447, + "text": "Key points about mapping", + "parents": [ + "h4", + "section", + "section", + "section" + ] + }, + { + "id": 448, + "text": "Mapping connects two variables so they behave as a single logical variable at runtime.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 449, + "text": "Linked variables are updated immediately in both scopes — they literally share the\nsame state in memory (no polling or copying).", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 450, + "text": "Mapping is explicit: you decide which variables the BT exposes as inputs and outputs.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 451, + "text": "Linkage is bidirectional — there is no distinction between input and output.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 452, + "text": "Mapping does not create new variables automatically — the variables must already\nexist in both blackboard plans before they can be linked.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 453, + "text": "Inspector workflow", + "parents": [ + "h4", + "section", + "section", + "section" + ] + }, + { + "id": 454, + "text": "Define the required variables in each BlackboardPlan (HSM plan and BT plan, for example).", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 455, + "text": "Select the ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 456, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 457, + "text": " node in the scene or a ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 458, + "text": "BTSubtree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 459, + "text": "\ninside a behavior tree.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 460, + "text": "In the Inspector, select the Blackboard Plan property.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 461, + "text": "In the BlackboardPlan resource inspector, locate the ", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 462, + "text": "Mapping", + "parents": [ + "strong", + "p", + "li", + "ol" + ] + }, + { + "id": 463, + "text": " section.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 464, + "text": "Create mappings by pairing variables (", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 465, + "text": "On startup the mappings are applied, and the variables are automatically linked\nfor the running instance.", + "parents": [ + "p", + "li", + "ol", + "section" + ] + }, + { + "id": 466, + "text": "Programmatic alternative: linking variables in code", + "parents": [ + "h4", + "section", + "section", + "section" + ] + }, + { + "id": 467, + "text": "You can also link variables directly in code using ", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 468, + "text": "Blackboard.link_var", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 469, + "text": "Best practices", + "parents": [ + "h4", + "section", + "section", + "section" + ] + }, + { + "id": 470, + "text": "Declare all BT dependencies in the BT’s BlackboardPlan instead of relying on parent scopes.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 471, + "text": "Use ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 472, + "text": "Mapping", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 473, + "text": " to explicitly declare which variables should be shared with the HSM.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 474, + "text": "Prefer the inspector-based Mapping workflow for clarity and editor support; use\n", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 475, + "text": " only when runtime or programmatic setup is required.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 476, + "text": "Avoid writing to ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 477, + "text": " from inside BT tasks unless you have\na very specific reason and accept the coupling it introduces.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 478, + "text": "Advanced topic: Blackboard scopes", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 479, + "text": "The ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 480, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 481, + "text": " in LimboAI can act as a parent scope\nfor another ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 482, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 483, + "text": ".\nThis means that if a specific variable is not found in the active scope,\nthe system will look in the parent ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 484, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 485, + "text": " to find it.\nThis creates a “blackboard scope chain,” where each ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 486, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 487, + "text": " can have its own parent scope,\nand there is no limit to how many blackboards can be in this chain.\nIt’s important to note that the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 488, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 489, + "text": " doesn’t modify values in the parent scopes.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 490, + "text": "Scopes are created automatically to prevent naming collisions between contextually separate environments:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 491, + "text": "Within ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 492, + "text": "BTNewScope", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 493, + "text": "Under ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 494, + "text": "BTSubtree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 495, + "text": " decorators.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 496, + "text": "With ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 497, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 498, + "text": " that have a non-empty blackboard plan defined.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 499, + "text": "Under ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 500, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 501, + "text": " nodes: A new scope is created at the root level,\nand each ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 502, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 503, + "text": " child also receives its own separate scope.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 504, + "text": "Sharing data between several agents", + "parents": [ + "h4", + "section", + "section", + "section" + ] + }, + { + "id": 505, + "text": "The blackboard scope mechanism can also be used for sharing data between several agents.\nIn the following example, we have a group of agents, and we want to share a common target between them:", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 506, + "text": "In this example, ", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 507, + "text": "blackboard.top()", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 508, + "text": " accesses the root scope of the\n", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 509, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 510, + "text": " chain.\nWe assign that scope to each agent in a group through code:", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 511, + "text": "In conclusion, the ", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 512, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 513, + "text": " scope chain not only\nprevents naming conflicts that can occur between state machines, behavior trees, and sub-trees,\nbut it can also be used to share data between several agents.", + "parents": [ + "p", + "section", + "section", + "section" + ] + }, + { + "id": 514, + "text": "Debugging blackboard variables", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 515, + "text": "When debugging a running project, you can inspect ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 516, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 517, + "text": " variables\nin the remote Inspector. Click on a task in the LimboAI debugger to view its properties,\nthen click the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 518, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 519, + "text": " reference to see all variables across the full\nscope chain, grouped by scope. Variables can be edited live to aid in debugging.\nFor state machines, select a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 520, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 521, + "text": " node in the Remote Scene Tree\nto access its ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 522, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 523, + "text": " in the same way.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 524, + "text": "Accessing nodes in the scene tree", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 525, + "text": "There are several ways to access nodes in the agent’s scene tree from a ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 526, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 527, + "text": "🛈 Note:", + "parents": [ + "strong", + "p", + "div", + "blockquote" + ] + }, + { + "id": 528, + "text": " The root node of the agent’s scene tree can be accessed with the\n", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 529, + "text": "scene_root", + "parents": [ + "span", + "a", + "p", + "div" + ] + }, + { + "id": 530, + "text": " property.", + "parents": [ + "p", + "div", + "blockquote", + "section" + ] + }, + { + "id": 531, + "text": "With ", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 532, + "text": " property", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 533, + "text": "With ", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 534, + "text": " property", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 535, + "text": "Using blackboard plan", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 536, + "text": "You can ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 537, + "text": "create a blackboard variable", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 538, + "text": " in the editor with the type ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 539, + "text": "\nand point it to the proper node in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 540, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 541, + "text": " blackboard plan. By default,\nany ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 542, + "text": " variable will be replaced with the node instance when the blackboard is instantiated\nat runtime (see ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 543, + "text": "BlackboardPlan.prefetch_nodepath_vars", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 544, + "text": "The property ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 545, + "text": "BTPlayer.prefetch_nodepath_vars", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 546, + "text": " should be set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 547, + "text": "Create State Machines", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 548, + "text": "This guide will show how to set up and use a state machine using ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 549, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 550, + "text": "Initialization", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 551, + "text": "To use the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 552, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 553, + "text": " state machine, you first need to initialize it in your code.\nThis is typically done in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 554, + "text": " function of your script. Here’s an example of how to do this:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 555, + "text": "In this example, we first declare the state machine and the states we want to use.\nThen, in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 556, + "text": " function, we add transitions between the states.\nFinally, we initialize the state machine and set it to active.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 557, + "text": "State example", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 558, + "text": "You can define the behavior of a state in a script and attach it to the state node.\nHere’s an example of a state that plays an animation on an ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 559, + "text": " and waits for it to finish:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 560, + "text": "In this example, the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 561, + "text": " method is called when the state is entered, and it plays the specified animation.\nThe ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 562, + "text": " method is called every frame, and it checks if the animation is finished.\nIf it is, it dispatches the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 563, + "text": " event, which can result in a transition to the next state.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 564, + "text": "Events and transitions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 565, + "text": "The ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 566, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 567, + "text": " comes with an ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 568, + "text": "event system", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 569, + "text": " that helps\nto ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 570, + "text": "decouple transitions", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 571, + "text": " from the state implementations.\nA transition is associated with a specific event, a starting state, and a destination state,\nand it is performed automatically when such an event is dispatched.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 572, + "text": "To register a transition and associate it with a specific event, you can use the\n", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 573, + "text": "LimboHSM.add_transition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 574, + "text": " method:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 575, + "text": "In this example, we’re registering a transition from the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 576, + "text": " to the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 577, + "text": "\nwhen the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 578, + "text": " event is dispatched.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 579, + "text": "A transition can be also associated with no particular starting state:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 580, + "text": "Events are dispatched", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 581, + "text": " with the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 582, + "text": "LimboState.dispatch", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 583, + "text": " method.\nIt’s important to note that this method can be called from anywhere in the state machine hierarchy and outside of it.\nEvents are ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 584, + "text": "propagated from the leaf to the root", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 585, + "text": " state. This means that if an event is consumed by a state,\nit won’t be propagated to its parent states.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 586, + "text": "States can also define ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 587, + "text": "event handlers", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 588, + "text": ", which are methods that react to specific events.\nThese event handlers typically don’t result in a state transition;\nthey are simply a mechanism for states to react to particular events.\nYou can use the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 589, + "text": "LimboState.add_event_handler", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 590, + "text": " method\nto register event handlers in your states:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 591, + "text": "If the event handler returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 592, + "text": ", the event will be considered as consumed,\nand it won’t propagate further or result in a state transition.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 593, + "text": "State anatomy", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 594, + "text": "Using behavior trees with state machines", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 595, + "text": "The ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 596, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 597, + "text": " is a specialized state node in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 598, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 599, + "text": " that can host a behavior tree.\nWhen a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 600, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 601, + "text": " is active, it executes the hosted behavior tree each frame,\neffectively using the behavior tree as its implementation.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 602, + "text": "This allows you to combine the power of behavior trees with the structure and control of state machines.\nBehavior trees are excellent for defining complex, hierarchical behaviors,\nwhile state machines are great for managing the flow and transitions between different behaviors.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 603, + "text": "Once the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 604, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 605, + "text": " has been created, a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 606, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 607, + "text": " can be created for a given ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 608, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 609, + "text": "Single-file state machine setup", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 610, + "text": "In certain scenarios, such as prototyping or during game jams,\nit’s practical to keep the state machine code in a single file.\nFor such cases, ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 611, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 612, + "text": "supports delegation", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 613, + "text": " and provides ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 614, + "text": "chained methods", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 615, + "text": " for easier setup.\nLet’s illustrate this with a practical code example:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 616, + "text": "Important classes", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 617, + "text": "There are a lot of classes introduced in LimboAI. Here is a list of the most important ones you should know about:", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 618, + "text": "BTTask", + "parents": [ + "h3", + "section", + "div", + "section" + ] + }, + { + "id": 619, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 620, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 621, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 622, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 623, + "text": "BTComment", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 624, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 625, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 626, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 627, + "text": "Base class for all ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 628, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 629, + "text": " tasks.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 630, + "text": "Description", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 631, + "text": "Base class for all ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 632, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 633, + "text": " tasks. A task is a basic building block in a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 634, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 635, + "text": " that represents a specific behavior or control flow. Tasks are used to create complex behaviors by combining and nesting them in a hierarchy.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 636, + "text": "A task can be one of the following types: action, condition, composite, or decorator. Each type of task has its own corresponding subclass: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 637, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 638, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 639, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 640, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 641, + "text": "Tasks perform their work and return their status using the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 642, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 643, + "text": " method. Status values are defined in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 644, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 645, + "text": ". Tasks can be initialized using the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 646, + "text": "_setup", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 647, + "text": " method. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 648, + "text": "_enter", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 649, + "text": "_exit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 650, + "text": "Note:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 651, + "text": " Do not extend ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 652, + "text": "BTTask", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 653, + "text": " directly for your own tasks. Instead, extend one of the subtypes mentioned above.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 654, + "text": "Properties", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 655, + "text": "agent", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 656, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 657, + "text": "blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 658, + "text": "custom_name", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 659, + "text": "elapsed_time", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 660, + "text": "scene_root", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 661, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 662, + "text": "status", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 663, + "text": "Methods", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 664, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 665, + "text": "_enter", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 666, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 667, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 668, + "text": "_exit", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 669, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 670, + "text": "_generate_name", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 671, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 672, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 673, + "text": "_get_configuration_warnings", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 674, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 675, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 676, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 677, + "text": "_setup", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 678, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 679, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 680, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 681, + "text": "(delta: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 682, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 683, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 684, + "text": "abort", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 685, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 686, + "text": "add_child", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 687, + "text": "(task: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 688, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 689, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 690, + "text": "add_child_at_index", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 691, + "text": "(task: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 692, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 693, + "text": ", idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 694, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 695, + "text": "clone", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 696, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 697, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 698, + "text": "editor_get_behavior_tree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 699, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 700, + "text": "execute", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 701, + "text": "(delta: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 702, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 703, + "text": "get_child", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 704, + "text": "(idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 705, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 706, + "text": "get_child_count", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 707, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 708, + "text": "get_child_count_excluding_comments", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 709, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 710, + "text": "get_index", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 711, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 712, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 713, + "text": "get_parent", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 714, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 715, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 716, + "text": "get_root", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 717, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 718, + "text": "get_task_name", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 719, + "text": "has_child", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 720, + "text": "(task: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 721, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 722, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 723, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 724, + "text": "initialize", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 725, + "text": "(agent: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 726, + "text": ", blackboard: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 727, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 728, + "text": ", scene_root: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 729, + "text": "is_descendant_of", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 730, + "text": "(task: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 731, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 732, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 733, + "text": "is_root", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 734, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 735, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 736, + "text": "next_sibling", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 737, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 738, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 739, + "text": "print_tree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 740, + "text": "(initial_tabs: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 741, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 742, + "text": "remove_child", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 743, + "text": "(task: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 744, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 745, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 746, + "text": "remove_child_at_index", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 747, + "text": "(idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 748, + "text": "Property Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 749, + "text": "agent", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 750, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 751, + "text": "set_agent", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 752, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 753, + "text": "get_agent", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 754, + "text": "The agent is the contextual object for the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 755, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 756, + "text": " instance. This is usually the parent of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 757, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 758, + "text": " node that utilizes the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 759, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 760, + "text": " resource.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 761, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 762, + "text": "blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 763, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 764, + "text": "get_blackboard", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 765, + "text": "Provides access to the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 766, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 767, + "text": ". Blackboard is used to share data among tasks of the associated ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 768, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 769, + "text": "See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 770, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 771, + "text": " for additional info.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 772, + "text": "custom_name", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 773, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 774, + "text": "set_custom_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 775, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 776, + "text": "get_custom_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 777, + "text": "User-provided name for the task. If not empty, it is used by the editor to represent the task. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 778, + "text": "get_task_name", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 779, + "text": "elapsed_time", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 780, + "text": "get_elapsed_time", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 781, + "text": "Elapsed time since the task was “entered”. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 782, + "text": "_enter", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 783, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 784, + "text": " when task is not ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 785, + "text": "scene_root", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 786, + "text": "get_scene_root", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 787, + "text": "Root node of the scene the behavior tree is used in (e.g., the owner of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 788, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 789, + "text": " node). Can be uses to retrieve ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 790, + "text": " references.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 791, + "text": "Example:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 792, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 793, + "text": "status", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 794, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 795, + "text": "get_status", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 796, + "text": "Last execution ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 797, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 798, + "text": " returned by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 799, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 800, + "text": "Method Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 801, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 802, + "text": "_enter", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 803, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 804, + "text": "Called when task is “entered”, i.e. when task is executed while not having a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 805, + "text": "status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 806, + "text": "It is called before ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 807, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 808, + "text": " in the execution order. This method is used when preparation is needed before main work begins, usually when it takes more than one tick to finish the task. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 809, + "text": "execute", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 810, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 811, + "text": "_exit", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 812, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 813, + "text": "Called when task is “exited”, i.e. after ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 814, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 815, + "text": " returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 816, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 817, + "text": " status. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 818, + "text": "execute", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 819, + "text": "_generate_name", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 820, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 821, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 822, + "text": "Called to generate a display name for the task unless ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 823, + "text": "custom_name", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 824, + "text": " is set. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 825, + "text": "get_task_name", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 826, + "text": "_get_configuration_warnings", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 827, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 828, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 829, + "text": "The string returned by this method is shown as a warning message in the behavior tree editor. Any task script that overrides this method must include ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 830, + "text": " annotation at the top of the file.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 831, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 832, + "text": "_setup", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 833, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 834, + "text": "Called to initialize a task during initialization step. It is called only once before the task’s first execution tick. This method allows you to set up any necessary state or configurations for the task before it begins executing.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 835, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 836, + "text": "_tick", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 837, + "text": "(delta: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 838, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 839, + "text": "Called when task is “ticked”, i.e. executed by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 840, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 841, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 842, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 843, + "text": " during an update.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 844, + "text": "Returns execution status as defined in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 845, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 846, + "text": "Note:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 847, + "text": " Tasks perform their main function by implementing this method.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 848, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 849, + "text": "abort", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 850, + "text": "Resets the task and its children recursively. If a task is in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 851, + "text": " state, it is exited and its status is reset to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 852, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 853, + "text": "add_child", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 854, + "text": "(task: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 855, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 856, + "text": "Adds a child task. The ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 857, + "text": " is placed at the end of the children list.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 858, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 859, + "text": "add_child_at_index", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 860, + "text": "(task: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 861, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 862, + "text": ", idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 863, + "text": "Adds a child task. The ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 864, + "text": " is placed at ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 865, + "text": " position in the children list.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 866, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 867, + "text": "clone", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 868, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 869, + "text": "Duplicates the task and its children, copying the exported members. Sub-resources are shared for efficiency, except for ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 870, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 871, + "text": " subtypes, which are always copied. Used by the editor to instantiate ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 872, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 873, + "text": " and copy-paste tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 874, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 875, + "text": "editor_get_behavior_tree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 876, + "text": "Returns the behavior tree that owns this task. This is only available in the editor.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 877, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 878, + "text": "execute", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 879, + "text": "(delta: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 880, + "text": "Performs task’s execution. The execution follows a specific sequence:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 881, + "text": "If task’s current ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 882, + "text": "status", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 883, + "text": " is not ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 884, + "text": ", the ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 885, + "text": "_enter", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 886, + "text": " method is called first.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 887, + "text": "Next, the ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 888, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 889, + "text": " method is called next to perform the task’s work.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 890, + "text": "If the ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 891, + "text": "_tick", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 892, + "text": " method returns ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 893, + "text": " or ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 894, + "text": " status, the ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 895, + "text": "_exit", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 896, + "text": " method will be called next as part of the execution cleanup.", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 897, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 898, + "text": "get_child", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 899, + "text": "(idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 900, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 901, + "text": "Returns a child task by specifying its index.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 902, + "text": "get_child_count", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 903, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 904, + "text": "Returns the number of child tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 905, + "text": "get_child_count_excluding_comments", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 906, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 907, + "text": "Returns the number of child tasks not counting ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 908, + "text": "BTComment", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 909, + "text": " tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 910, + "text": "get_index", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 911, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 912, + "text": "Returns the task’s position in the behavior tree branch. Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 913, + "text": " if the task doesn’t belong to a task tree, i.e. doesn’t have a parent.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 914, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 915, + "text": "get_parent", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 916, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 917, + "text": "Returns the task’s parent.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 918, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 919, + "text": "get_root", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 920, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 921, + "text": "Returns the root task of the behavior tree.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 922, + "text": "get_task_name", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 923, + "text": "The string returned by this method is used to represent the task in the editor.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 924, + "text": "Method ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 925, + "text": "_generate_name", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 926, + "text": " is called to generate a display name for the task unless ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 927, + "text": "custom_name", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 928, + "text": " is set.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 929, + "text": "has_child", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 930, + "text": "(task: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 931, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 932, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 933, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 934, + "text": " if ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 935, + "text": " is a child of this task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 936, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 937, + "text": "initialize", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 938, + "text": "(agent: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 939, + "text": ", blackboard: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 940, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 941, + "text": ", scene_root: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 942, + "text": "Initilizes the task. Assigns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 943, + "text": "agent", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 944, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 945, + "text": "blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 946, + "text": ", and calls ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 947, + "text": "_setup", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 948, + "text": " for the task and its children.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 949, + "text": "The method is called recursively for each child task. ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 950, + "text": " should be the root node of the scene the behavior tree is used in (e.g., the owner of the node that contains the behavior tree).", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 951, + "text": "is_descendant_of", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 952, + "text": "(task: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 953, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 954, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 955, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 956, + "text": " if this task is a descendant of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 957, + "text": ". In other words, this task must be a child of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 958, + "text": " or one of its children or grandchildren.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 959, + "text": "is_root", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 960, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 961, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 962, + "text": " if this task is the root task of its behavior tree. A behavior tree can have only one root task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 963, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 964, + "text": "next_sibling", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 965, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 966, + "text": "Returns the next task after this task in the parent’s children list.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 967, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 968, + "text": " if this task has no parent or it is the last child in the parent’s children list.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 969, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 970, + "text": "print_tree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 971, + "text": "(initial_tabs: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 972, + "text": "Prints the subtree that starts with this task to the console.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 973, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 974, + "text": "remove_child", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 975, + "text": "(task: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 976, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 977, + "text": "Removes ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 978, + "text": " from children.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 979, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 980, + "text": "remove_child_at_index", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 981, + "text": "(idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 982, + "text": "Removes a child task at a specified index from children.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 983, + "text": "BTPlayer", + "parents": [ + "h3", + "section", + "div", + "section" + ] + }, + { + "id": 984, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 985, + "text": "Player of ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 986, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 987, + "text": " resources.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 988, + "text": "Description", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 989, + "text": "BTPlayer", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 990, + "text": " node is used to instantiate and play ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 991, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 992, + "text": " resources at runtime. During initialization, the behavior tree instance is given references to the agent, the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 993, + "text": "blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 994, + "text": ", and the current scene root. The agent can be specified by the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 995, + "text": "agent_node", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 996, + "text": " property (defaults to the BTPlayer’s parent node).", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 997, + "text": "For an introduction to behavior trees, see ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 998, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 999, + "text": "Properties", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1000, + "text": "active", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1001, + "text": "agent_node", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1002, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1003, + "text": "behavior_tree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1004, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1005, + "text": "blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1006, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1007, + "text": "blackboard_plan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1008, + "text": "monitor_performance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1009, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1010, + "text": "update_mode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1011, + "text": "Methods", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1012, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1013, + "text": "get_bt_instance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1014, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1015, + "text": "restart", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1016, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1017, + "text": "set_bt_instance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1018, + "text": "(bt_instance: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1019, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1020, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1021, + "text": "set_scene_root_hint", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1022, + "text": "(scene_root: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1023, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1024, + "text": "update", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1025, + "text": "(delta: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1026, + "text": "Signals", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1027, + "text": "behavior_tree_finished", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1028, + "text": "(status: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1029, + "text": "Deprecated:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1030, + "text": " Use ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1031, + "text": "updated", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1032, + "text": " signal instead.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1033, + "text": "Emitted when the behavior tree has finished executing and returned ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1034, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1035, + "text": "Argument ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1036, + "text": " holds the status returned by the behavior tree. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1037, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1038, + "text": "updated", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1039, + "text": "(status: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1040, + "text": "Emitted when BTPlayer has finished the behavior tree update.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1041, + "text": "Argument ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1042, + "text": " holds the status returned by the behavior tree. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1043, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1044, + "text": "Enumerations", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1045, + "text": "enum ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1046, + "text": "UpdateMode", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1047, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1048, + "text": "IDLE", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1049, + "text": "Execute behavior tree during the idle process.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1050, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1051, + "text": "PHYSICS", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1052, + "text": "Execute behavior tree during the physics process.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1053, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1054, + "text": "MANUAL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1055, + "text": "Behavior tree is executed manually by calling ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1056, + "text": "update", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1057, + "text": "Property Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1058, + "text": "active", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1059, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1060, + "text": "set_active", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1061, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1062, + "text": "get_active", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1063, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1064, + "text": ", the behavior tree will be executed during update.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1065, + "text": "agent_node", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1066, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1067, + "text": "set_agent_node", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1068, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1069, + "text": "get_agent_node", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1070, + "text": "Path to the node that will be used as the agent. Setting it after instantiation will have no effect.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1071, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1072, + "text": "behavior_tree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1073, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1074, + "text": "set_behavior_tree", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1075, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1076, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1077, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1078, + "text": "get_behavior_tree", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1079, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1080, + "text": " resource to instantiate and execute at runtime.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1081, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1082, + "text": "blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1083, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1084, + "text": "set_blackboard", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1085, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1086, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1087, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1088, + "text": "get_blackboard", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1089, + "text": "Holds data shared by the behavior tree tasks. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1090, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1091, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1092, + "text": "blackboard_plan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1093, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1094, + "text": "set_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1095, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1096, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1097, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1098, + "text": "get_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1099, + "text": "Stores and manages variables that will be used in constructing new ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1100, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1101, + "text": " instances.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1102, + "text": "monitor_performance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1103, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1104, + "text": "set_monitor_performance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1105, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1106, + "text": "get_monitor_performance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1107, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1108, + "text": ", adds a performance monitor to “Debugger->Monitors” for each instance of this ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1109, + "text": "BTPlayer", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1110, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1111, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1112, + "text": "update_mode", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1113, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1114, + "text": "set_update_mode", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1115, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1116, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1117, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1118, + "text": "get_update_mode", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1119, + "text": "Determines when the behavior tree is executed. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1120, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1121, + "text": "Method Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1122, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1123, + "text": "get_bt_instance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1124, + "text": "Returns the behavior tree instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1125, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1126, + "text": "restart", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1127, + "text": "Resets the behavior tree’s execution. Each running task will be aborted and the next tree execution will start anew. This method does not reset ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1128, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1129, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1130, + "text": "set_bt_instance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1131, + "text": "(bt_instance: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1132, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1133, + "text": "Sets the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1134, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1135, + "text": " to play. This method is useful when you want to switch to a different behavior tree instance at runtime. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1136, + "text": "BehaviorTree.instantiate", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1137, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1138, + "text": "set_scene_root_hint", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1139, + "text": "(scene_root: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1140, + "text": "Sets the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1141, + "text": " that will be used as the scene root for the newly instantiated behavior tree. Should be called before the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1142, + "text": "BTPlayer", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1143, + "text": " is added to the scene tree (before ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1144, + "text": "). This is typically useful when creating ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1145, + "text": "BTPlayer", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1146, + "text": " nodes dynamically from code.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1147, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1148, + "text": "update", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1149, + "text": "(delta: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1150, + "text": "Executes the root task of the behavior tree instance if ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1151, + "text": "active", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1152, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1153, + "text": ". Call this method when ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1154, + "text": "update_mode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1155, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1156, + "text": "MANUAL", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1157, + "text": ". When ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1158, + "text": "update_mode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1159, + "text": " is not ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1160, + "text": "MANUAL", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1161, + "text": ", the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1162, + "text": "update", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1163, + "text": " will be called automatically. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1164, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1165, + "text": "Blackboard", + "parents": [ + "h3", + "section", + "div", + "section" + ] + }, + { + "id": 1166, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1167, + "text": "A key/value storage for sharing among ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1168, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1169, + "text": " states and ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1170, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1171, + "text": " tasks.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1172, + "text": "Description", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1173, + "text": "Blackboard is where data is stored and shared between states in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1174, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1175, + "text": " system and tasks in a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1176, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1177, + "text": ". Each state and task in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1178, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1179, + "text": " can access this Blackboard, allowing them to read and write data. This makes it easy to share information between different actions and behaviors.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1180, + "text": "Blackboard can also act as a parent scope for another Blackboard. If a specific variable is not found in the active scope, it looks in the parent Blackboard to find it. A parent Blackboard can itself have its own parent scope, forming what we call a “blackboard scope chain.” Importantly, there is no limit to how many Blackboards can be in this chain, and the Blackboard doesn’t modify values in the parent scopes.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1181, + "text": "New scopes can be created using the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1182, + "text": "BTNewScope", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1183, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1184, + "text": "BTSubtree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1185, + "text": " decorators. Additionally, a new scope is automatically created for any ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1186, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1187, + "text": " that has defined non-empty Blackboard data or for any root-level ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1188, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1189, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1190, + "text": "Methods", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1191, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1192, + "text": "bind_var_to_property", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1193, + "text": "(var_name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1194, + "text": ", object: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1195, + "text": ", property: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1196, + "text": ", create: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1197, + "text": " = false)", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1198, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1199, + "text": "clear", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1200, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1201, + "text": "erase_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1202, + "text": "(var_name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1203, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1204, + "text": "get_parent", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1205, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1206, + "text": "get_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1207, + "text": "(var_name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1208, + "text": ", default: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1209, + "text": " = null, complain: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1210, + "text": " = true) ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1211, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1212, + "text": "get_vars_as_dict", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1213, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1214, + "text": "has_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1215, + "text": "(var_name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1216, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1217, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1218, + "text": "link_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1219, + "text": "(var_name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1220, + "text": ", target_blackboard: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1221, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1222, + "text": ", target_var: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1223, + "text": ", create: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1224, + "text": " = false)", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1225, + "text": "Array", + "parents": [ + "span", + "p", + "td", + "tr" + ] + }, + { + "id": 1226, + "text": "list_vars", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1227, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1228, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1229, + "text": "populate_from_dict", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1230, + "text": "(dictionary: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1231, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1232, + "text": "print_state", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1233, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1234, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1235, + "text": "set_parent", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1236, + "text": "(blackboard: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1237, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1238, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1239, + "text": "set_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1240, + "text": "(var_name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1241, + "text": ", value: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1242, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1243, + "text": "top", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1244, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1245, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1246, + "text": "unbind_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1247, + "text": "(var_name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1248, + "text": "Method Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1249, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1250, + "text": "bind_var_to_property", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1251, + "text": "(var_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1252, + "text": ", object: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1253, + "text": ", property: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1254, + "text": ", create: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1255, + "text": " = false) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1256, + "text": "Establish a binding between a variable and the object’s property specified by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1257, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1258, + "text": ". Changes to the variable update the property, and vice versa. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1259, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1260, + "text": ", the variable will be created if it doesn’t exist.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1261, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1262, + "text": "clear", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1263, + "text": "Removes all variables from the Blackboard. Parent scopes are not affected.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1264, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1265, + "text": "erase_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1266, + "text": "(var_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1267, + "text": "Removes a variable by its name.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1268, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1269, + "text": "get_parent", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1270, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1271, + "text": "Returns a Blackboard that serves as the parent scope for this instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1272, + "text": "get_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1273, + "text": "(var_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1274, + "text": ", default: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1275, + "text": " = null, complain: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1276, + "text": " = true) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1277, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1278, + "text": "Returns variable value or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1279, + "text": " if variable doesn’t exist. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1280, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1281, + "text": ", an error will be printed if variable doesn’t exist. If the variable doesn’t exist in the current ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1282, + "text": "Blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1283, + "text": " scope, it will look in the parent scope ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1284, + "text": "Blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1285, + "text": " to find it.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1286, + "text": "get_vars_as_dict", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1287, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1288, + "text": "Returns all variables in the Blackboard as a dictionary. Keys are the variable names, values are the variable values. Parent scopes are not included.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1289, + "text": "has_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1290, + "text": "(var_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1291, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1292, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1293, + "text": " if the Blackboard contains the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1294, + "text": " variable, including the parent scopes.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1295, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1296, + "text": "link_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1297, + "text": "(var_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1298, + "text": ", target_blackboard: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1299, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1300, + "text": ", target_var: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1301, + "text": ", create: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1302, + "text": " = false) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1303, + "text": "Links a variable to another Blackboard variable. If a variable is linked to another variable, their state will always be identical, and any change to one will be reflected in the other. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1304, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1305, + "text": ", the variable will be created if it doesn’t exist.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1306, + "text": "You can use this method to link a variable in the current scope to a variable in another scope, or in another Blackboard instance. A variable can only be linked to one other variable. Calling this method again will overwrite the previous link. However, it is possible to link to the same variable from multiple different variables.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1307, + "text": "Array", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 1308, + "text": "list_vars", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1309, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1310, + "text": "Returns all variable names in the Blackboard. Parent scopes are not included.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1311, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1312, + "text": "populate_from_dict", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1313, + "text": "(dictionary: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1314, + "text": "Fills the Blackboard with multiple variables from a dictionary. The dictionary keys must be variable names and the dictionary values must be variable values. Keys must be StringName or String.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1315, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1316, + "text": "print_state", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1317, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1318, + "text": "Prints the values of all variables in each scope.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1319, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1320, + "text": "set_parent", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1321, + "text": "(blackboard: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1322, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1323, + "text": "Assigns the parent scope. If a value isn’t in the current Blackboard scope, it will look in the parent scope Blackboard to find it.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1324, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1325, + "text": "set_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1326, + "text": "(var_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1327, + "text": ", value: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1328, + "text": "Assigns a value to a variable in the current Blackboard scope. If the variable doesn’t exist, it will be created. If the variable already exists in the parent scope, the parent scope value will NOT be changed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1329, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1330, + "text": "top", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1331, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1332, + "text": "Returns the topmost ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1333, + "text": "Blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1334, + "text": " in the scope chain.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1335, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1336, + "text": "unbind_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1337, + "text": "(var_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1338, + "text": "Remove binding from a variable.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1339, + "text": "BBParam", + "parents": [ + "h3", + "section", + "div", + "section" + ] + }, + { + "id": 1340, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1341, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1342, + "text": "BBAabb", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1343, + "text": "BBArray", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1344, + "text": "BBBasis", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1345, + "text": "BBBool", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1346, + "text": "BBByteArray", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1347, + "text": "BBColor", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1348, + "text": "BBColorArray", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1349, + "text": "BBDictionary", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1350, + "text": "BBFloat", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1351, + "text": "BBFloat32Array", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1352, + "text": "BBFloat64Array", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1353, + "text": "BBInt", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1354, + "text": "BBInt32Array", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1355, + "text": "BBInt64Array", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1356, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1357, + "text": "BBPlane", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1358, + "text": "BBProjection", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1359, + "text": "BBQuaternion", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1360, + "text": "BBRect2", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1361, + "text": "BBRect2i", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1362, + "text": "BBString", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1363, + "text": "BBStringArray", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1364, + "text": "BBStringName", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1365, + "text": "BBTransform2D", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1366, + "text": "BBTransform3D", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1367, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1368, + "text": "BBVector2", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1369, + "text": "BBVector2Array", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1370, + "text": "BBVector2i", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1371, + "text": "BBVector3", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1372, + "text": "BBVector3Array", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1373, + "text": "BBVector3i", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1374, + "text": "BBVector4", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1375, + "text": "BBVector4i", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1376, + "text": "A base class for LimboAI typed parameters.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1377, + "text": "Description", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1378, + "text": "A base class for LimboAI typed parameters, with the ability to reference a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1379, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1380, + "text": " variable or hold a raw value of a specific ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1381, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 1382, + "text": "Note", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1383, + "text": ": Don’t instantiate. Use specific subtypes instead.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1384, + "text": "Properties", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1385, + "text": "saved_value", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1386, + "text": "ValueSource", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1387, + "text": "value_source", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1388, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1389, + "text": "Methods", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1390, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "td", + "tr" + ] + }, + { + "id": 1391, + "text": "get_type", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1392, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1393, + "text": "get_value", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1394, + "text": "(scene_root: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1395, + "text": ", blackboard: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1396, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1397, + "text": ", default: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1398, + "text": " = null)", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1399, + "text": "Enumerations", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1400, + "text": "enum ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1401, + "text": "ValueSource", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1402, + "text": "ValueSource", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1403, + "text": "SAVED_VALUE", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1404, + "text": "The value is stored directly within the BBParam resource.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1405, + "text": "ValueSource", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1406, + "text": "BLACKBOARD_VAR", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1407, + "text": "The value is referenced by a variable name and retrieved from the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1408, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1409, + "text": ". The variable name is stored within the BBParam resource.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1410, + "text": "Property Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1411, + "text": "saved_value", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1412, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1413, + "text": "set_saved_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1414, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1415, + "text": "get_saved_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1416, + "text": "Stores the parameter value when ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1417, + "text": "value_source", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1418, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1419, + "text": "SAVED_VALUE", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1420, + "text": ". The data type of the value is determined by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1421, + "text": "get_type", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1422, + "text": "ValueSource", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1423, + "text": "value_source", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1424, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1425, + "text": "set_value_source", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1426, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1427, + "text": "ValueSource", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1428, + "text": "ValueSource", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1429, + "text": "get_value_source", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1430, + "text": "Specifies the source of the value for BBParam. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1431, + "text": "ValueSource", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1432, + "text": "variable", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1433, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1434, + "text": "set_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1435, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1436, + "text": "get_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1437, + "text": "Stores the name of a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1438, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1439, + "text": " variable when ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1440, + "text": "value_source", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1441, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1442, + "text": "BLACKBOARD_VAR", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1443, + "text": "Method Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1444, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 1445, + "text": "get_type", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1446, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1447, + "text": "Returns the expected data type of the parameter.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1448, + "text": "get_value", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1449, + "text": "(scene_root: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1450, + "text": ", blackboard: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1451, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1452, + "text": ", default: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1453, + "text": " = null) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1454, + "text": "Returns the value of the parameter.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1455, + "text": "LimboState", + "parents": [ + "h3", + "section", + "div", + "section" + ] + }, + { + "id": 1456, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1457, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1458, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1459, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1460, + "text": "A state node for Hierarchical State Machines (HSM).", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1461, + "text": "Description", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1462, + "text": "A LimboAI state node for Hierarchical State Machines (HSM).", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1463, + "text": "You can create your state behavior by extending this class. To implement your state logic, you can override ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1464, + "text": "_enter", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1465, + "text": "_exit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1466, + "text": "_setup", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1467, + "text": ", and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1468, + "text": "_update", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1469, + "text": ". Alternatively, you can delegate state implementation to external methods using the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1470, + "text": " methods.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1471, + "text": "For additional details on state machines, refer to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1472, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1473, + "text": "Properties", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1474, + "text": "EVENT_FINISHED", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1475, + "text": "agent", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1476, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1477, + "text": "blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1478, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1479, + "text": "blackboard_plan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1480, + "text": "Methods", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1481, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1482, + "text": "_enter", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1483, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1484, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1485, + "text": "_exit", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1486, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1487, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1488, + "text": "_setup", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1489, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1490, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1491, + "text": "_update", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1492, + "text": "(delta: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1493, + "text": "virtual", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1494, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1495, + "text": "add_event_handler", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1496, + "text": "(event: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1497, + "text": ", handler: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1498, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1499, + "text": "call_on_enter", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1500, + "text": "(callable: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1501, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1502, + "text": "call_on_exit", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1503, + "text": "(callable: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1504, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1505, + "text": "call_on_update", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1506, + "text": "(callable: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1507, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1508, + "text": "clear_guard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1509, + "text": "dispatch", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1510, + "text": "(event: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1511, + "text": ", cargo: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1512, + "text": " = null)", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1513, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1514, + "text": "get_root", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1515, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1516, + "text": "is_active", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1517, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1518, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1519, + "text": "named", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1520, + "text": "(name: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1521, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1522, + "text": "set_guard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1523, + "text": "(guard_callable: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1524, + "text": "Signals", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1525, + "text": "entered", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1526, + "text": "Emitted when the state is entered.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1527, + "text": "exited", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1528, + "text": "Emitted when the state is exited.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1529, + "text": "setup", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1530, + "text": "Emitted when the state is initialized.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1531, + "text": "updated", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1532, + "text": "(delta: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1533, + "text": "Emitted when the state is updated.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1534, + "text": "Property Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1535, + "text": "EVENT_FINISHED", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1536, + "text": "event_finished", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1537, + "text": "A commonly used event that indicates that the state has finished its work.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1538, + "text": "agent", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1539, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1540, + "text": "set_agent", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1541, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1542, + "text": "get_agent", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1543, + "text": "An agent associated with the state, assigned during initialization.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1544, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1545, + "text": "blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1546, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1547, + "text": "get_blackboard", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1548, + "text": "A key/value data store shared by states within the state machine to which this state belongs.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1549, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1550, + "text": "blackboard_plan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1551, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1552, + "text": "set_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1553, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1554, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1555, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1556, + "text": "get_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1557, + "text": "Stores and manages variables that will be used in constructing new ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1558, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1559, + "text": " instances.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1560, + "text": "Method Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1561, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1562, + "text": "_enter", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1563, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1564, + "text": "Called when the state is entered.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1565, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1566, + "text": "_exit", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1567, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1568, + "text": "Called when the state is exited. This happens on a transition to another state, and when the state machine is removed from the scene tree (e.g., when the node is freed with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1569, + "text": "Node.queue_free", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 1570, + "text": " or the scene changes). Due to implementation details, ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1571, + "text": "_exit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1572, + "text": " will not be called on ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1573, + "text": "Object.free", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 1574, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1575, + "text": "_setup", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1576, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1577, + "text": "Called once during initialization. Use this method to initialize your state.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1578, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1579, + "text": "_update", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1580, + "text": "(delta: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1581, + "text": "virtual", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1582, + "text": "Called during the update. Implement your state’s behavior with this method.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1583, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1584, + "text": "add_event_handler", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1585, + "text": "(event: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1586, + "text": ", handler: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1587, + "text": "Registers a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1588, + "text": " to be called when ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1589, + "text": " is dispatched. The handler function should have the following signature:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1590, + "text": "If the handler returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1591, + "text": ", the event will be consumed. Cargo is an optional parameter that can be passed to the handler. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1592, + "text": "dispatch", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1593, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1594, + "text": "call_on_enter", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1595, + "text": "(callable: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1596, + "text": "A chained method that connects the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1597, + "text": "entered", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1598, + "text": " signal to a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1599, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1600, + "text": "call_on_exit", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1601, + "text": "(callable: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1602, + "text": "A chained method that connects the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1603, + "text": "exited", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1604, + "text": " signal to a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1605, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1606, + "text": "call_on_update", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1607, + "text": "(callable: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1608, + "text": "A chained method that connects the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1609, + "text": "updated", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1610, + "text": " signal to a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1611, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1612, + "text": "clear_guard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1613, + "text": "Clears the guard function, removing the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1614, + "text": " previously set by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1615, + "text": "set_guard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1616, + "text": "dispatch", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1617, + "text": "(event: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1618, + "text": ", cargo: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1619, + "text": " = null) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1620, + "text": "Recursively dispatches a state machine event named ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1621, + "text": " with an optional argument ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1622, + "text": ". Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1623, + "text": " if the event was consumed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1624, + "text": "Events propagate from the leaf state to the root state, and propagation stops as soon as any state consumes the event. States will consume the event if they have a related transition or event handler. For more information on event handlers, see ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1625, + "text": "add_event_handler", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1626, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1627, + "text": "get_root", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1628, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1629, + "text": "Returns the root ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1630, + "text": "LimboState", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1631, + "text": "is_active", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1632, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1633, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1634, + "text": " if it is currently active, meaning it is the active substate of the parent ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1635, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1636, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1637, + "text": "named", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1638, + "text": "(name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1639, + "text": "A chained method for setting the name of this state.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1640, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1641, + "text": "set_guard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1642, + "text": "(guard_callable: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1643, + "text": "Sets the guard function, which is a function called each time a transition to this state is considered. If the function returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1644, + "text": ", the transition will be disallowed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1645, + "text": "LimboHSM", + "parents": [ + "h3", + "section", + "div", + "section" + ] + }, + { + "id": 1646, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1647, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1648, + "text": "Event-based Hierarchical State Machine (HSM).", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1649, + "text": "Description", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1650, + "text": "Event-based Hierarchical State Machine (HSM) that manages ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1651, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1652, + "text": " instances and facilitates transitions between them. LimboHSM is a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1653, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1654, + "text": " in itself and can also serve as a child of another LimboHSM node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1655, + "text": "Properties", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1656, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1657, + "text": "ANYSTATE", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1658, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1659, + "text": "initial_state", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1660, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1661, + "text": "update_mode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1662, + "text": "Methods", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1663, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1664, + "text": "add_transition", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1665, + "text": "(from_state: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1666, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1667, + "text": ", to_state: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1668, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1669, + "text": ", event: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1670, + "text": ", guard: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1671, + "text": " = Callable())", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1672, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1673, + "text": "change_active_state", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1674, + "text": "(state: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1675, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1676, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1677, + "text": "get_active_state", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1678, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1679, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1680, + "text": "get_leaf_state", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1681, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1682, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1683, + "text": "get_previous_active_state", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1684, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1685, + "text": "has_transition", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1686, + "text": "(from_state: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1687, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1688, + "text": ", event: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1689, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1690, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1691, + "text": "initialize", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1692, + "text": "(agent: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1693, + "text": ", parent_scope: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1694, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1695, + "text": " = null)", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1696, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1697, + "text": "remove_transition", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1698, + "text": "(from_state: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1699, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1700, + "text": ", event: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1701, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1702, + "text": "set_active", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1703, + "text": "(active: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1704, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1705, + "text": "update", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1706, + "text": "(delta: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1707, + "text": "Signals", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1708, + "text": "active_state_changed", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1709, + "text": "(current: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1710, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1711, + "text": ", previous: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1712, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1713, + "text": "Emitted when the currently active substate is switched to a different substate.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1714, + "text": "Enumerations", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1715, + "text": "enum ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1716, + "text": "UpdateMode", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1717, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1718, + "text": "IDLE", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1719, + "text": "Update the state machine during the idle process.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1720, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1721, + "text": "PHYSICS", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1722, + "text": "Update the state machine during the physics process.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1723, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1724, + "text": "MANUAL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1725, + "text": "Manually update the state machine by calling ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1726, + "text": "update", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1727, + "text": " from a script.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1728, + "text": "Property Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1729, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1730, + "text": "ANYSTATE", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1731, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1732, + "text": "anystate", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1733, + "text": "Useful for defining a transition from any state.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1734, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1735, + "text": "initial_state", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1736, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1737, + "text": "set_initial_state", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1738, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1739, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1740, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1741, + "text": "get_initial_state", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1742, + "text": "The substate that becomes active when the state machine is activated using the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1743, + "text": "set_active", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1744, + "text": " method. If not explicitly set, the first child of the LimboHSM will be considered the initial state.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1745, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1746, + "text": "update_mode", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1747, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1748, + "text": "set_update_mode", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1749, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1750, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1751, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1752, + "text": "get_update_mode", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1753, + "text": "Specifies when the state machine should be updated. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1754, + "text": "UpdateMode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1755, + "text": "Method Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1756, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1757, + "text": "add_transition", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1758, + "text": "(from_state: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1759, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1760, + "text": ", to_state: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1761, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1762, + "text": ", event: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1763, + "text": ", guard: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1764, + "text": " = Callable()) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1765, + "text": "Establishes a transition from one state to another when ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1766, + "text": " is dispatched. Both ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1767, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1768, + "text": " must be immediate children of this ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1769, + "text": "LimboHSM", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1770, + "text": "Optionally, a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1771, + "text": " function can be specified, which must return a boolean value. If the guard function returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1772, + "text": ", the transition will not occur. The guard function is called immediately before the transition is considered. For a state-wide guard function, check out ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1773, + "text": "LimboState.set_guard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1774, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1775, + "text": "change_active_state", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1776, + "text": "(state: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1777, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1778, + "text": "Changes the currently active substate to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1779, + "text": ". If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1780, + "text": " is already active, it will be exited and reentered.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1781, + "text": " must be a child of this ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1782, + "text": "LimboHSM", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1783, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1784, + "text": "get_active_state", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1785, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1786, + "text": "Returns the currently active substate.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1787, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1788, + "text": "get_leaf_state", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1789, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1790, + "text": "Returns the currently active leaf state within the state machine.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1791, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1792, + "text": "get_previous_active_state", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1793, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1794, + "text": "Returns the previously active substate.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1795, + "text": "has_transition", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1796, + "text": "(from_state: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1797, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1798, + "text": ", event: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1799, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1800, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1801, + "text": " if there is a transition from ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1802, + "text": " for a given ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1803, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1804, + "text": "initialize", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1805, + "text": "(agent: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1806, + "text": ", parent_scope: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1807, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1808, + "text": " = null) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1809, + "text": "Initiates the state and calls ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1810, + "text": "LimboState._setup", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1811, + "text": " for both itself and all substates.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1812, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1813, + "text": "remove_transition", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1814, + "text": "(from_state: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1815, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1816, + "text": ", event: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1817, + "text": "Removes a transition from a state associated with specific ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1818, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1819, + "text": "set_active", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1820, + "text": "(active: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1821, + "text": "When set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1822, + "text": ", switches the state to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1823, + "text": "initial_state", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1824, + "text": " and activates state processing according to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1825, + "text": "update_mode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1826, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1827, + "text": "update", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1828, + "text": "(delta: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1829, + "text": "Calls ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1830, + "text": "LimboState._update", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1831, + "text": " on itself and the active substate, with the call cascading down to the leaf state. This method is automatically triggered if ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1832, + "text": "update_mode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1833, + "text": " is not set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1834, + "text": "MANUAL", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1835, + "text": "BTState", + "parents": [ + "h3", + "section", + "div", + "section" + ] + }, + { + "id": 1836, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1837, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1838, + "text": "A state node for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1839, + "text": "LimboHSM", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1840, + "text": " that hosts a ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1841, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1842, + "text": "Description", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1843, + "text": "BTState is a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1844, + "text": "LimboState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1845, + "text": " node that manages a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1846, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1847, + "text": " to provide behavior logic for the state. It instantiates and runs the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1848, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1849, + "text": " resource, dispatching a state machine event upon ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1850, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1851, + "text": ". Event names are customizable through ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1852, + "text": "success_event", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1853, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1854, + "text": "failure_event", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1855, + "text": ". For further details on state machine events, see ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1856, + "text": "LimboState.dispatch", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1857, + "text": "Properties", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1858, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1859, + "text": "behavior_tree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1860, + "text": "failure_event", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1861, + "text": "monitor_performance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1862, + "text": "success_event", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1863, + "text": "Methods", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1864, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1865, + "text": "get_bt_instance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1866, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1867, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 1868, + "text": "set_scene_root_hint", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 1869, + "text": "(scene_root: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 1870, + "text": "Property Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1871, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1872, + "text": "behavior_tree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1873, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1874, + "text": "set_behavior_tree", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1875, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1876, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1877, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 1878, + "text": "get_behavior_tree", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1879, + "text": "A ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1880, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1881, + "text": " resource that defines state behavior.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1882, + "text": "failure_event", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1883, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1884, + "text": "set_failure_event", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1885, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1886, + "text": "get_failure_event", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1887, + "text": "HSM event that will be dispatched when the behavior tree results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1888, + "text": ". See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1889, + "text": "LimboState.dispatch", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1890, + "text": "monitor_performance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1891, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1892, + "text": "set_monitor_performance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1893, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1894, + "text": "get_monitor_performance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1895, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1896, + "text": ", adds a performance monitor to “Debugger->Monitors” for each instance of this ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1897, + "text": "BTState", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1898, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1899, + "text": "success_event", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1900, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 1901, + "text": "set_success_event", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1902, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 1903, + "text": "get_success_event", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 1904, + "text": "HSM event that will be dispatched when the behavior tree results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1905, + "text": ". See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1906, + "text": "LimboState.dispatch", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1907, + "text": "Method Descriptions", + "parents": [ + "h4", + "section", + "section", + "div" + ] + }, + { + "id": 1908, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1909, + "text": "get_bt_instance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1910, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1911, + "text": "Returns the behavior tree instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1912, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 1913, + "text": "set_scene_root_hint", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1914, + "text": "(scene_root: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1915, + "text": "Sets the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1916, + "text": " that will be used as the scene root for the newly instantiated behavior tree. Should be called before the state machine is initialized. This is typically useful when creating ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1917, + "text": "BTState", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 1918, + "text": " nodes dynamically from code.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 1919, + "text": "Full class reference is available in the side bar.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1920, + "text": "BBAabb", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1921, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1922, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1923, + "text": "AABB-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1924, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1925, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1926, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1927, + "text": "BBArray", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1928, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1929, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1930, + "text": "Array-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1931, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1932, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1933, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1934, + "text": "BBBasis", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1935, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1936, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1937, + "text": "Basis-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1938, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1939, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1940, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1941, + "text": "BBBool", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1942, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1943, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1944, + "text": "Bool-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1945, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1946, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1947, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1948, + "text": "BBByteArray", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1949, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1950, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1951, + "text": "ByteArray-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1952, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1953, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1954, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1955, + "text": "BBColor", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1956, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1957, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1958, + "text": "Color-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1959, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1960, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1961, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1962, + "text": "BBColorArray", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1963, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1964, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1965, + "text": "ColorArray-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1966, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1967, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1968, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1969, + "text": "BBDictionary", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1970, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1971, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1972, + "text": "Dictionary-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1973, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1974, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1975, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1976, + "text": "BBFloat", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1977, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1978, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1979, + "text": "Float-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1980, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1981, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1982, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1983, + "text": "BBFloat32Array", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1984, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1985, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1986, + "text": "PackedFloat32Array-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1987, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1988, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1989, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1990, + "text": "BBFloat64Array", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1991, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1992, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1993, + "text": "PackedFloat64Array-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1994, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1995, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 1996, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 1997, + "text": "BBInt", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 1998, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 1999, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2000, + "text": "Integer-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2001, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2002, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2003, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2004, + "text": "BBInt32Array", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2005, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2006, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2007, + "text": "PackedInt32Array-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2008, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2009, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2010, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2011, + "text": "BBInt64Array", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2012, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2013, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2014, + "text": "PackedInt64Array-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2015, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2016, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2017, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2018, + "text": "BBNode", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2019, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2020, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2021, + "text": "Node-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2022, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2023, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2024, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2025, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2026, + "text": "Node-type parameter intended for use with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2027, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2028, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2029, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2030, + "text": "If the source is a blackboard variable, it allows any type extended from ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2031, + "text": "BBPlane", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2032, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2033, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2034, + "text": "Plane-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2035, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2036, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2037, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2038, + "text": "BBProjection", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2039, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2040, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2041, + "text": "Projection-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2042, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2043, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2044, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2045, + "text": "BBQuaternion", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2046, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2047, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2048, + "text": "Quaternion-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2049, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2050, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2051, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2052, + "text": "BBRect2", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2053, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2054, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2055, + "text": "Rect2-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2056, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2057, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2058, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2059, + "text": "BBRect2i", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2060, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2061, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2062, + "text": "Rect2i-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2063, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2064, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2065, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2066, + "text": "BBString", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2067, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2068, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2069, + "text": "String-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2070, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2071, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2072, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2073, + "text": "BBStringArray", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2074, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2075, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2076, + "text": "StringArray-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2077, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2078, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2079, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2080, + "text": "BBStringName", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2081, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2082, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2083, + "text": "StringName-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2084, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2085, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2086, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2087, + "text": "BBTransform2D", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2088, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2089, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2090, + "text": "Transform2D-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2091, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2092, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2093, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2094, + "text": "BBTransform3D", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2095, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2096, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2097, + "text": "Transform3D-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2098, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2099, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2100, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2101, + "text": "BBVariant", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2102, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2103, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2104, + "text": "Variant-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2105, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2106, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2107, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2108, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2109, + "text": "Variant-type parameter intended for use with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2110, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2111, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2112, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2113, + "text": "The data type is specified by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2114, + "text": "type", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2115, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2116, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "td", + "tr" + ] + }, + { + "id": 2117, + "text": "type", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2118, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2119, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 2120, + "text": "type", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2121, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2122, + "text": "set_type", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2123, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2124, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "li", + "ul" + ] + }, + { + "id": 2125, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "li", + "ul" + ] + }, + { + "id": 2126, + "text": "get_type", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2127, + "text": "Specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2128, + "text": "Variant.Type", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 2129, + "text": " for the parameter value.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2130, + "text": "BBVector2", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2131, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2132, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2133, + "text": "Vector2-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2134, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2135, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2136, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2137, + "text": "BBVector2Array", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2138, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2139, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2140, + "text": "Vector2Array-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2141, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2142, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2143, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2144, + "text": "BBVector2i", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2145, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2146, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2147, + "text": "Vector2i-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2148, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2149, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2150, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2151, + "text": "BBVector3", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2152, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2153, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2154, + "text": "Vector3-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2155, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2156, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2157, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2158, + "text": "BBVector3Array", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2159, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2160, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2161, + "text": "Vector3Array-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2162, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2163, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2164, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2165, + "text": "BBVector3i", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2166, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2167, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2168, + "text": "Vector3i-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2169, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2170, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2171, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2172, + "text": "BBVector4", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2173, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2174, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2175, + "text": "Vector4-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2176, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2177, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2178, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2179, + "text": "BBVector4i", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2180, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2181, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2182, + "text": "Vector4i-type parameter for ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2183, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2184, + "text": " tasks. See ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2185, + "text": "BBParam", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2186, + "text": "BehaviorTree", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2187, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2188, + "text": "Contains Behavior Tree data.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2189, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2190, + "text": "Behavior Trees are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2191, + "text": "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2192, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2193, + "text": "BTSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2194, + "text": ", and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2195, + "text": "BTInvert", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2196, + "text": ". Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2197, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2198, + "text": " class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2199, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2200, + "text": ". See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2201, + "text": "BTTask.blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2202, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2203, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2204, + "text": "Note:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2205, + "text": " To create your own actions, extend the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2206, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2207, + "text": " class.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2208, + "text": "The BehaviorTree is executed from the root task and follows the rules specified by the control tasks, all the way down to the leaf tasks, which represent the actual actions that the agent should perform or conditions that should be checked. Each task returns a status when it is executed. It can be ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2209, + "text": ", or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2210, + "text": ". These statuses determine how the tree progresses. They are defined in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2211, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2212, + "text": "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2213, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2214, + "text": " based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2215, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2216, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2217, + "text": "BTSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2218, + "text": " to craft your decision-making logic.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2219, + "text": "Note", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2220, + "text": ": To create your own conditions, extend the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2221, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2222, + "text": " class.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2223, + "text": "Check out the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2224, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2225, + "text": " class, which provides the foundation for various building blocks of Behavior Trees.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2226, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2227, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2228, + "text": "blackboard_plan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2229, + "text": "description", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2230, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2231, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2232, + "text": "clone", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2233, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2234, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2235, + "text": "copy_other", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2236, + "text": "(other: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2237, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2238, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2239, + "text": "get_root_task", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2240, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2241, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2242, + "text": "instantiate", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2243, + "text": "(agent: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2244, + "text": ", blackboard: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2245, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2246, + "text": ", instance_owner: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2247, + "text": ", custom_scene_root: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2248, + "text": " = null) ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2249, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2250, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2251, + "text": "set_root_task", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2252, + "text": "(task: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2253, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2254, + "text": "Signals", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2255, + "text": "plan_changed", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2256, + "text": "Emitted when the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2257, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2258, + "text": " changes.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2259, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2260, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2261, + "text": "blackboard_plan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2262, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2263, + "text": "set_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2264, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2265, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2266, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2267, + "text": "get_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2268, + "text": "Stores and manages variables that will be used in constructing new ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2269, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2270, + "text": " instances.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2271, + "text": "description", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2272, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2273, + "text": "set_description", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2274, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2275, + "text": "get_description", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2276, + "text": "User-provided description of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2277, + "text": "BehaviorTree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2278, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2279, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2280, + "text": "clone", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2281, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2282, + "text": "Makes a copy of the BehaviorTree resource.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2283, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2284, + "text": "copy_other", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2285, + "text": "(other: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2286, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2287, + "text": "Become a copy of another behavior tree.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2288, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2289, + "text": "get_root_task", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2290, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2291, + "text": "Returns the root task of the BehaviorTree resource.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2292, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2293, + "text": "instantiate", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2294, + "text": "(agent: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2295, + "text": ", blackboard: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2296, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2297, + "text": ", instance_owner: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2298, + "text": ", custom_scene_root: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2299, + "text": " = null) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2300, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2301, + "text": "Instantiates the behavior tree and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2302, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2303, + "text": " should be the scene node that will own the behavior tree instance. This is typically a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2304, + "text": "BTPlayer", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2305, + "text": "BTState", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2306, + "text": ", or a custom player node that controls the behavior tree execution. Make sure to pass a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2307, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2308, + "text": " with values populated from ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2309, + "text": "blackboard_plan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2310, + "text": ". See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2311, + "text": "BlackboardPlan.populate_blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2312, + "text": "BlackboardPlan.create_blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2313, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2314, + "text": " is not ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2315, + "text": ", it will be used as the scene root for the newly instantiated behavior tree; otherwise, the scene root will be set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2316, + "text": ". Scene root is essential for ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2317, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2318, + "text": " instances to work properly.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2319, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2320, + "text": "set_root_task", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2321, + "text": "(task: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2322, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2323, + "text": "Assigns a new root task to the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2324, + "text": "BehaviorTree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2325, + "text": " resource.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2326, + "text": "BehaviorTreeData", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2327, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2328, + "text": "Represents current state of a ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2329, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2330, + "text": " instance.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2331, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2332, + "text": "This class is used by the LimboAI debugger for the serialization and deserialization of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2333, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2334, + "text": " instance data.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2335, + "text": "Additionally, it can be used with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2336, + "text": "BehaviorTreeView", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2337, + "text": " to visualize the current state of a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2338, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2339, + "text": " instance. It is meant to be utilized in custom in-game tools.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2340, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2341, + "text": "BehaviorTreeData", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2342, + "text": "create_from_bt_instance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2343, + "text": "(bt_instance: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2344, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2345, + "text": "static", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2346, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2347, + "text": "BehaviorTreeData", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2348, + "text": "create_from_bt_instance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2349, + "text": "(bt_instance: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2350, + "text": "BTInstance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2351, + "text": "static", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2352, + "text": "Returns current state of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2353, + "text": " encoded as a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2354, + "text": "BehaviorTreeData", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2355, + "text": ", suitable for use with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2356, + "text": "BehaviorTreeView", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2357, + "text": "Behavior tree instance can be acquired with ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2358, + "text": "BTPlayer.get_bt_instance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2359, + "text": "BehaviorTreeView", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2360, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2361, + "text": "Visualizes the current state of a ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2362, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2363, + "text": " instance.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2364, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2365, + "text": "Visualizes the current state of a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2366, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2367, + "text": " instance. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2368, + "text": "BehaviorTreeData", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2369, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2370, + "text": "update_interval_msec", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2371, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2372, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2373, + "text": "clear", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2374, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2375, + "text": "update_tree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2376, + "text": "(behavior_tree_data: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2377, + "text": "BehaviorTreeData", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2378, + "text": "Signals", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2379, + "text": "task_selected", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2380, + "text": "(type_name: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2381, + "text": ", script_path: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2382, + "text": "Emitted when a task item is selected in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2383, + "text": "BehaviorTreeView", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2384, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2385, + "text": "update_interval_msec", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2386, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2387, + "text": "set_update_interval_msec", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2388, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2389, + "text": "get_update_interval_msec", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2390, + "text": "Minimum delay between two updates (in milliseconds). Set to higher values for a lower CPU load.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2391, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2392, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2393, + "text": "clear", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2394, + "text": "Clears the tree view.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2395, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2396, + "text": "update_tree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2397, + "text": "(behavior_tree_data: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2398, + "text": "BehaviorTreeData", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2399, + "text": "Updates the representation of a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2400, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2401, + "text": " instance. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2402, + "text": "BehaviorTreeData", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2403, + "text": "BlackboardPlan", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2404, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2405, + "text": "Stores and manages variables that will be used in constructing new ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2406, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2407, + "text": " instances.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2408, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2409, + "text": "prefetch_nodepath_vars", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2410, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2411, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2412, + "text": "create_blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2413, + "text": "(prefetch_root: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2414, + "text": ", parent_scope: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2415, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2416, + "text": " = null, prefetch_root_for_base_plan: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2417, + "text": " = null)", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2418, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2419, + "text": "get_base_plan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2420, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2421, + "text": "get_parent_scope_plan_provider", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2422, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2423, + "text": "is_derived", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2424, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2425, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2426, + "text": "populate_blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2427, + "text": "(blackboard: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2428, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2429, + "text": ", overwrite: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2430, + "text": ", prefetch_root: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2431, + "text": ", prefetch_root_for_base_plan: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2432, + "text": " = null)", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2433, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2434, + "text": "set_base_plan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2435, + "text": "(blackboard_plan: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2436, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2437, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2438, + "text": "set_parent_scope_plan_provider", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2439, + "text": "(callable: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 2440, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 2441, + "text": "sync_with_base_plan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2442, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2443, + "text": "prefetch_nodepath_vars", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2444, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2445, + "text": "set_prefetch_nodepath_vars", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2446, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2447, + "text": "is_prefetching_nodepath_vars", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2448, + "text": "Enables or disables ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2449, + "text": " variable prefetching. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2450, + "text": " values will be replaced with node instances when the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2451, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2452, + "text": " is created.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2453, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2454, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2455, + "text": "create_blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2456, + "text": "(prefetch_root: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2457, + "text": ", parent_scope: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2458, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2459, + "text": " = null, prefetch_root_for_base_plan: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2460, + "text": " = null) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2461, + "text": "Constructs a new instance of a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2462, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2463, + "text": " using this plan. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2464, + "text": " prefetching is enabled, ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2465, + "text": " will be used to retrieve node instances for ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2466, + "text": " variables and substitute their values.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2467, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2468, + "text": "get_base_plan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2469, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2470, + "text": "Returns the base plan. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2471, + "text": "is_derived", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2472, + "text": "get_parent_scope_plan_provider", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2473, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2474, + "text": "Returns the parent scope plan provider - a callable that returns a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2475, + "text": "BlackboardPlan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2476, + "text": "is_derived", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2477, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2478, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2479, + "text": " if this plan is derived from another, i.e., the base plan is not ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2480, + "text": ". A derived plan can only contain variables that are present in the base plan, and only variable values can be different.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2481, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2482, + "text": "populate_blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2483, + "text": "(blackboard: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2484, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2485, + "text": ", overwrite: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2486, + "text": ", prefetch_root: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2487, + "text": ", prefetch_root_for_base_plan: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2488, + "text": " = null) ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2489, + "text": "Populates ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2490, + "text": " with the variables from this plan. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2491, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2492, + "text": ", existing variables with the same names will be overwritten. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2493, + "text": " prefetching is enabled, ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2494, + "text": " will be used to retrieve node instances for ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2495, + "text": " variables and substitute their values.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2496, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2497, + "text": "set_base_plan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2498, + "text": "(blackboard_plan: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2499, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2500, + "text": "Sets the base plan. If assigned, this plan will be derived from the base plan.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2501, + "text": "Use with caution, as it will remove variables not present in the base plan. Only use this for custom tooling.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2502, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2503, + "text": "set_parent_scope_plan_provider", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2504, + "text": "(callable: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2505, + "text": "Sets the parent scope plan provider - a callable that returns a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2506, + "text": "BlackboardPlan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2507, + "text": ". Used to provide hints in the inspector. When set, mapping feature becomes available.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2508, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 2509, + "text": "sync_with_base_plan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2510, + "text": "Synchronizes this plan with the base plan: removes variables not present in the base plan, and updates type information. Only use this for custom tooling.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2511, + "text": "BT", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2512, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2513, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2514, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2515, + "text": "Base of ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2516, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2517, + "text": "Enumerations", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2518, + "text": "enum ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2519, + "text": "Status", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2520, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2521, + "text": "FRESH", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2522, + "text": "Task wasn’t executed yet or it was aborted and reset.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2523, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2524, + "text": "RUNNING", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2525, + "text": "Task is being performed and hasn’t finished yet.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2526, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2527, + "text": "FAILURE", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2528, + "text": "Task has finished with failure.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2529, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2530, + "text": "SUCCESS", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2531, + "text": "Task has finished with success.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2532, + "text": "BTAction", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2533, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2534, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2535, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2536, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2537, + "text": "BTAwaitAnimation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2538, + "text": "BTCallMethod", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2539, + "text": "BTConsolePrint", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2540, + "text": "BTEvaluateExpression", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2541, + "text": "BTFail", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2542, + "text": "BTPauseAnimation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2543, + "text": "BTPlayAnimation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2544, + "text": "BTRandomWait", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2545, + "text": "BTSetAgentProperty", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2546, + "text": "BTSetVar", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2547, + "text": "BTStopAnimation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2548, + "text": "BTWait", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2549, + "text": "BTWaitTicks", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2550, + "text": "Base class for all ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2551, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2552, + "text": " actions.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2553, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2554, + "text": "Base class for all actions within a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2555, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2556, + "text": ". You can create your own actions by extending the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2557, + "text": "BTAction", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2558, + "text": " class.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2559, + "text": "Represents a specific behavior or action in a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2560, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2561, + "text": " that an agent should execute. Actions are the lowest level of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2562, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2563, + "text": " hierarchy and are responsible for performing the actual work required to achieve a goal. Actions do not have child tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2564, + "text": "A single action can perform a task within one or multiple ticks. If it takes more than one tick to complete the task, the action should return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2565, + "text": " status. When the task is finished, the action returns either ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2566, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2567, + "text": " to indicate the outcome.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2568, + "text": "BTAlwaysFail", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2569, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2570, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2571, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2572, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2573, + "text": "BT decorator that converts ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2574, + "text": " into ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2575, + "text": "BTAlwaysSucceed", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2576, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2577, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2578, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2579, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2580, + "text": "BT decorator that converts ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2581, + "text": " into ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2582, + "text": "BTAwaitAnimation", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2583, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2584, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2585, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2586, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2587, + "text": "BT action that waits for an animation to finish playing.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2588, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2589, + "text": "BTAwaitAnimation action waits for an animation on the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2590, + "text": " node to finish playing and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2591, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2592, + "text": " if the specified animation has finished playing or if the specified animation is not currently playing.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2593, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2594, + "text": " if the specified animation doesn’t exist or if the action fails to get the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2595, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2596, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2597, + "text": "animation_name", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2598, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2599, + "text": "animation_player", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2600, + "text": "max_time", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2601, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2602, + "text": "animation_name", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2603, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2604, + "text": "set_animation_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2605, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2606, + "text": "get_animation_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2607, + "text": "Animation’s key within the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2608, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2609, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2610, + "text": "animation_player", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2611, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2612, + "text": "set_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2613, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2614, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2615, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2616, + "text": "get_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2617, + "text": "Parameter that specifies the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2618, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2619, + "text": "max_time", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2620, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2621, + "text": "set_max_time", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2622, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2623, + "text": "get_max_time", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2624, + "text": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTAwaitAnimation will stop waiting and return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2625, + "text": "BTCallMethod", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2626, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2627, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2628, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2629, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2630, + "text": "BT action that calls a method on a specified ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2631, + "text": " or ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2632, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2633, + "text": "BTCallMethod action calls a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2634, + "text": "method", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2635, + "text": " on the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2636, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2637, + "text": " instance and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2638, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2639, + "text": " if the action encounters an issue during the method execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2640, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2641, + "text": "Array", + "parents": [ + "span", + "p", + "td", + "tr" + ] + }, + { + "id": 2642, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2643, + "text": "args", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2644, + "text": "args_include_delta", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2645, + "text": "method", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2646, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2647, + "text": "node", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2648, + "text": "result_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2649, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2650, + "text": "Array", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 2651, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2652, + "text": "args", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2653, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2654, + "text": "set_args", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2655, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2656, + "text": "Array", + "parents": [ + "span", + "p", + "li", + "ul" + ] + }, + { + "id": 2657, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2658, + "text": "Array", + "parents": [ + "span", + "p", + "li", + "ul" + ] + }, + { + "id": 2659, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2660, + "text": "get_args", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2661, + "text": "The arguments to be passed when calling the method.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2662, + "text": "args_include_delta", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2663, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2664, + "text": "set_include_delta", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2665, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2666, + "text": "is_delta_included", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2667, + "text": "Include delta as a first parameter and shift the position of the rest of the arguments if any.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2668, + "text": "method", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2669, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2670, + "text": "set_method", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2671, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2672, + "text": "get_method", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2673, + "text": "The name of the method to be called.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2674, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2675, + "text": "node", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2676, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2677, + "text": "set_node_param", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2678, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2679, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2680, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2681, + "text": "get_node_param", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2682, + "text": "Specifies the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2683, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2684, + "text": " instance containing the method to be called.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2685, + "text": "result_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2686, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2687, + "text": "set_result_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2688, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2689, + "text": "get_result_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2690, + "text": "if non-empty, assign the result of the method call to the blackboard variable specified by this property.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2691, + "text": "BTCheckAgentProperty", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2692, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2693, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2694, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2695, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2696, + "text": "BT condition that checks agent’s property value.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2697, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2698, + "text": "BTCheckAgentProperty examines the agent’s property value and compares it to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2699, + "text": "value", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2700, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2701, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2702, + "text": " based on the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2703, + "text": "check_type", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2704, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2705, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2706, + "text": "check_type", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2707, + "text": "property", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2708, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2709, + "text": "value", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2710, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2711, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2712, + "text": "check_type", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2713, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2714, + "text": "set_check_type", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2715, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2716, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2717, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2718, + "text": "get_check_type", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2719, + "text": "The type of check to be performed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2720, + "text": "property", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2721, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2722, + "text": "set_property", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2723, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2724, + "text": "get_property", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2725, + "text": "Parameter that specifies the agent’s property to be compared.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2726, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2727, + "text": "value", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2728, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2729, + "text": "set_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2730, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2731, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2732, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2733, + "text": "get_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2734, + "text": "Parameter that specifies the value against which an agent’s property will be compared.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2735, + "text": "BTCheckTrigger", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2736, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2737, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2738, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2739, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2740, + "text": "BT condition that checks a trigger (a boolean variable).", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2741, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2742, + "text": "BTCheckTrigger", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2743, + "text": " verifies whether the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2744, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2745, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2746, + "text": ". If it is, the task switches it to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2747, + "text": " and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2748, + "text": ". Otherwise, it returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2749, + "text": "BTCheckTrigger", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2750, + "text": " can function as a “gate” within a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2751, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2752, + "text": ": when the trigger variable is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2753, + "text": ", it permits the execution of subsequent tasks and then changes the variable to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2754, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2755, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2756, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2757, + "text": "variable", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2758, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2759, + "text": "set_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2760, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2761, + "text": "get_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2762, + "text": "A boolean variable on the blackboard used as a trigger. See also ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2763, + "text": "BTTask.blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2764, + "text": "If variable’s value is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2765, + "text": "BTCheckTrigger", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2766, + "text": " will switch it to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2767, + "text": " and return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2768, + "text": "If variable’s value is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2769, + "text": "BTCheckTrigger", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2770, + "text": " will return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2771, + "text": "BTCheckVar", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2772, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2773, + "text": "BTCondition", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2774, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2775, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2776, + "text": "BT condition that checks a variable on the blackboard.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2777, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2778, + "text": "BTCheckVar evaluates the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2779, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2780, + "text": " against ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2781, + "text": "value", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2782, + "text": " and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2783, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2784, + "text": " based on the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2785, + "text": "check_type", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2786, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2787, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2788, + "text": "check_type", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2789, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2790, + "text": "value", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2791, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2792, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2793, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2794, + "text": "check_type", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2795, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2796, + "text": "set_check_type", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2797, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2798, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2799, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2800, + "text": "get_check_type", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2801, + "text": "The type of check to be performed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2802, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2803, + "text": "value", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2804, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2805, + "text": "set_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2806, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2807, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2808, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 2809, + "text": "get_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2810, + "text": "A parameter that specifies the value against which the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2811, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2812, + "text": " will be compared.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2813, + "text": "variable", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2814, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2815, + "text": "set_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2816, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2817, + "text": "get_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2818, + "text": "The name of the variable to check its value.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2819, + "text": "BTComment", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2820, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2821, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2822, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2823, + "text": "BTComment adds annotations or explanatory notes to a ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2824, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2825, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2826, + "text": "BTComment is used to add annotations or explanatory notes to a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2827, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2828, + "text": "Comments are not executed as part of the tree and are removed from runtime instances of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2829, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2830, + "text": "BTComposite", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2831, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2832, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2833, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2834, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2835, + "text": "BTDynamicSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2836, + "text": "BTDynamicSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2837, + "text": "BTParallel", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2838, + "text": "BTProbabilitySelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2839, + "text": "BTRandomSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2840, + "text": "BTRandomSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2841, + "text": "BTSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2842, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2843, + "text": "Base class for BT composite tasks.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2844, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2845, + "text": "Base class for all ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2846, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2847, + "text": " composite tasks. You can create your own composite tasks by extending the BTComposite class.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2848, + "text": "Composite is a control task within a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2849, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2850, + "text": " that contains one or more child tasks. It defines the structure and flow of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2851, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2852, + "text": " by specifying how child tasks are executed. Composites can be used to group related tasks into a single unit, making it easier to manage and maintain the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2853, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2854, + "text": ". Examples of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2855, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2856, + "text": " composites include ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2857, + "text": "BTSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2858, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2859, + "text": ", and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2860, + "text": "BTParallel", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2861, + "text": "BTCondition", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2862, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2863, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2864, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2865, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2866, + "text": "BTCheckAgentProperty", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2867, + "text": "BTCheckTrigger", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2868, + "text": "BTCheckVar", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2869, + "text": "Base class for BT conditions.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2870, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2871, + "text": "Base class for all ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2872, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2873, + "text": " conditions. You can create your own conditions by extending the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2874, + "text": "BTCondition", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2875, + "text": " class.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2876, + "text": "Condition is a task within a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2877, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2878, + "text": " that checks for a specific condition before executing subsequent tasks. It is often used inside composite tasks to control the execution flow. Conditions are used to verify the state of the environment, check for the presence of an enemy, or evaluate the health status of the agent. The use of condition tasks in a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2879, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2880, + "text": " can improve system efficiency and prevent unnecessary actions. However, they may not be suitable for complex decision-making processes, and too many condition tasks can make the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2881, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2882, + "text": " difficult to read.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2883, + "text": "Conditions typically don’t take multiple ticks to finish and return either ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2884, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2885, + "text": " immediately.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2886, + "text": "BTConsolePrint", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2887, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2888, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2889, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2890, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2891, + "text": "BT action task that outputs text to the console.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2892, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2893, + "text": "BTConsolePrint action outputs text to the console and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2894, + "text": ". It can include placeholders for format arguments similar to GDScript’s % operator.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2895, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2896, + "text": "bb_format_parameters", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2897, + "text": "text", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2898, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2899, + "text": "bb_format_parameters", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2900, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2901, + "text": "set_bb_format_parameters", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2902, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2903, + "text": "get_bb_format_parameters", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2904, + "text": "The values of format parameters are used as format arguments for the text that will be printed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2905, + "text": "Note:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2906, + "text": " The returned array is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2907, + "text": "copied", + "parents": [ + "em", + "p", + "section", + "section" + ] + }, + { + "id": 2908, + "text": " and any changes to it will not update the original property value. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2909, + "text": " for more details.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2910, + "text": "text", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2911, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2912, + "text": "set_text", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2913, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2914, + "text": "get_text", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2915, + "text": "The text to be printed, which can include multiple placeholders to be substituted with format arguments. These placeholders follow the same format as GDScript’s % operator and typically start with ‘%’ followed by a format specifier. For instance: %s for string, %d for integer, %f for real.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2916, + "text": "BTCooldown", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2917, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2918, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2919, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2920, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2921, + "text": "BT decorator that executes its child task only if ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2922, + "text": "duration", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2923, + "text": " time has passed since the previous execution.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 2924, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2925, + "text": "BTCooldown runs its child task only if ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2926, + "text": "duration", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2927, + "text": " time has passed since the last successful child task execution. It will only consider successful executions unless ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2928, + "text": "trigger_on_failure", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2929, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2930, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2931, + "text": ", if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2932, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2933, + "text": ", if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2934, + "text": ", and triggers the cooldown timer.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2935, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2936, + "text": ", if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2937, + "text": " or if ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2938, + "text": "duration", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2939, + "text": " time didn’t pass since the previous execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2940, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2941, + "text": "cooldown_state_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2942, + "text": "duration", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2943, + "text": "process_pause", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2944, + "text": "start_cooled", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2945, + "text": "trigger_on_failure", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 2946, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 2947, + "text": "cooldown_state_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2948, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2949, + "text": "set_cooldown_state_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2950, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2951, + "text": "get_cooldown_state_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2952, + "text": "A boolean variable used to store the cooldown state in the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2953, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2954, + "text": ". If left empty, the variable will be automatically generated and assigned.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2955, + "text": "If the variable’s value is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2956, + "text": ", it indicates that the cooldown is activated. This feature is useful for checking the cooldown state from other parts of the tree or sharing it among different sections of the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2957, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2958, + "text": "duration", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2959, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2960, + "text": "set_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2961, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2962, + "text": "get_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2963, + "text": "Time to wait before permitting another child’s execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2964, + "text": "process_pause", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2965, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2966, + "text": "set_process_pause", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2967, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2968, + "text": "get_process_pause", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2969, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2970, + "text": ", process cooldown when the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2971, + "text": " is paused.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2972, + "text": "start_cooled", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2973, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2974, + "text": "set_start_cooled", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2975, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2976, + "text": "get_start_cooled", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2977, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2978, + "text": ", initiate a cooldown as if the child had been executed before the first BT tick.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2979, + "text": "trigger_on_failure", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 2980, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 2981, + "text": "set_trigger_on_failure", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2982, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 2983, + "text": "get_trigger_on_failure", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 2984, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2985, + "text": ", the cooldown will be activated if the child task also returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2986, + "text": ". Otherwise, the cooldown will only be triggered when the child task returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 2987, + "text": "BTDecorator", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 2988, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2989, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2990, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2991, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 2992, + "text": "BTAlwaysFail", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2993, + "text": "BTAlwaysSucceed", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2994, + "text": "BTCooldown", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2995, + "text": "BTDelay", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2996, + "text": "BTForEach", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2997, + "text": "BTInvert", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2998, + "text": "BTNewScope", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 2999, + "text": "BTProbability", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3000, + "text": "BTRepeat", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3001, + "text": "BTRepeatUntilFailure", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3002, + "text": "BTRepeatUntilSuccess", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3003, + "text": "BTRunLimit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3004, + "text": "BTTimeLimit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3005, + "text": "Base class for BT decorators.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3006, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3007, + "text": "Base class for all ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3008, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3009, + "text": " decorators. You can create your own decorators by extending the BTDecorator class.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3010, + "text": "A decorator is a task within a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3011, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3012, + "text": " that alters the behavior of its child task. Decorators can have only one child task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3013, + "text": "Decorators can be used to add conditions, limits, or other constraints to the execution of a task. Examples of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3014, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3015, + "text": " decorators include ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3016, + "text": "BTInvert", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3017, + "text": "BTRepeat", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3018, + "text": ", and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3019, + "text": "BTCooldown", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3020, + "text": ". The use of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3021, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3022, + "text": " decorators can simplify the design and implementation of complex behaviors by adding additional logic to existing tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3023, + "text": "BTDelay", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3024, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3025, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3026, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3027, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3028, + "text": "BT decorator that introduces a delay before executing its child task.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3029, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3030, + "text": "BTDelay introduces a delay of ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3031, + "text": "seconds", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3032, + "text": " before executing its child task. Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3033, + "text": " during the delay period.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3034, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3035, + "text": "seconds", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3036, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3037, + "text": "seconds", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3038, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3039, + "text": "set_seconds", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3040, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3041, + "text": "get_seconds", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3042, + "text": "Delay duration in seconds.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3043, + "text": "BTDynamicSelector", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3044, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3045, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3046, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3047, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3048, + "text": "BT composite that executes tasks from scratch every tick until first ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3049, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3050, + "text": "BTDynamicSelector executes its child tasks sequentially, from first to last, until any child returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3051, + "text": ". Unlike ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3052, + "text": "BTSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3053, + "text": ", it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to retry higher-priority behaviors in every tick.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3054, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3055, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3056, + "text": ". BTDynamicSelector will remember the last ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3057, + "text": " child, but, unlike ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3058, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3059, + "text": ", on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3060, + "text": ", it will abort the remembered ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3061, + "text": " task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3062, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3063, + "text": " if all child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3064, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3065, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3066, + "text": "BTDynamicSequence", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3067, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3068, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3069, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3070, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3071, + "text": "BT composite that executes tasks from scratch every tick as long as they return ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3072, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3073, + "text": "BTDynamicSequence executes its child tasks sequentially, from first to last, for as long as they return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3074, + "text": ". Unlike ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3075, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3076, + "text": ", it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to recheck conditions preceding a long-running action during each tick and abort the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3077, + "text": " action when any condition results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3078, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3079, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3080, + "text": ". BTDynamicSequence will remember the last ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3081, + "text": " child, but, unlike ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3082, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3083, + "text": ", on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3084, + "text": ", it will abort the remembered ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3085, + "text": " task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3086, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3087, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3088, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3089, + "text": " if all child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3090, + "text": "BTEvaluateExpression", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3091, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3092, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3093, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3094, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3095, + "text": "BT action that evaluates an ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3096, + "text": " against a specified ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3097, + "text": " or ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3098, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3099, + "text": "BTEvaluateExpression action evaluates an ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3100, + "text": "expression_string", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3101, + "text": " on the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3102, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3103, + "text": " instance and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3104, + "text": " when the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3105, + "text": " executes successfully.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3106, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3107, + "text": " if the action encounters an issue during the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3108, + "text": " parsing or execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3109, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3110, + "text": "expression_string", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3111, + "text": "input_include_delta", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3112, + "text": "input_names", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3113, + "text": "Array", + "parents": [ + "span", + "p", + "td", + "tr" + ] + }, + { + "id": 3114, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3115, + "text": "input_values", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3116, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3117, + "text": "node", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3118, + "text": "result_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3119, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3120, + "text": "Error", + "parents": [ + "span", + "p", + "td", + "tr" + ] + }, + { + "id": 3121, + "text": "parse", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3122, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3123, + "text": "expression_string", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3124, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3125, + "text": "set_expression_string", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3126, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3127, + "text": "get_expression_string", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3128, + "text": "The expression string to be parsed and executed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3129, + "text": "Warning:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3130, + "text": " Call ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3131, + "text": "parse", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3132, + "text": " after updating ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3133, + "text": "expression_string", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3134, + "text": " to update the internal ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3135, + "text": " as it won’t be updated automatically.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3136, + "text": "input_include_delta", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3137, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3138, + "text": "set_input_include_delta", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3139, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3140, + "text": "is_input_delta_included", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3141, + "text": "If enabled, the input variable ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3142, + "text": " will be added to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3143, + "text": "input_names", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3144, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3145, + "text": "input_values", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3146, + "text": "Warning:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3147, + "text": " Call ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3148, + "text": "parse", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3149, + "text": " after toggling ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3150, + "text": "input_include_delta", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3151, + "text": " to update the internal ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3152, + "text": " as it won’t be updated automatically.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3153, + "text": "input_names", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3154, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3155, + "text": "set_input_names", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3156, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3157, + "text": "get_input_names", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3158, + "text": "List of variable names within ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3159, + "text": "expression_string", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3160, + "text": " for which the user will provide values for through ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3161, + "text": "input_values", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3162, + "text": "Warning:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3163, + "text": " Call ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3164, + "text": "parse", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3165, + "text": " after updating ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3166, + "text": "input_names", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3167, + "text": " to update the internal ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3168, + "text": " as it won’t be updated automatically.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3169, + "text": "Note:", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3170, + "text": " The returned array is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3171, + "text": "copied", + "parents": [ + "em", + "p", + "section", + "section" + ] + }, + { + "id": 3172, + "text": " and any changes to it will not update the original property value. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3173, + "text": " for more details.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3174, + "text": "Array", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 3175, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3176, + "text": "input_values", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3177, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3178, + "text": "set_input_values", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3179, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3180, + "text": "Array", + "parents": [ + "span", + "p", + "li", + "ul" + ] + }, + { + "id": 3181, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3182, + "text": "Array", + "parents": [ + "span", + "p", + "li", + "ul" + ] + }, + { + "id": 3183, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3184, + "text": "get_input_values", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3185, + "text": "List of values for variables specified in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3186, + "text": "input_names", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3187, + "text": ". The values are mapped to the variables by their array index.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3188, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3189, + "text": "node", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3190, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3191, + "text": "set_node_param", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3192, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3193, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3194, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3195, + "text": "get_node_param", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3196, + "text": "Specifies the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3197, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3198, + "text": " instance containing the method to be called.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3199, + "text": "result_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3200, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3201, + "text": "set_result_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3202, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3203, + "text": "get_result_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3204, + "text": "if non-empty, assign the result of the method call to the blackboard variable specified by this property.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3205, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3206, + "text": "Error", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 3207, + "text": "parse", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3208, + "text": "Calls ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3209, + "text": "Expression.parse", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 3210, + "text": " considering ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3211, + "text": "input_include_delta", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3212, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3213, + "text": "input_names", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3214, + "text": " and returns its error code.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3215, + "text": "BTFail", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3216, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3217, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3218, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3219, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3220, + "text": "BT action that always returns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3221, + "text": "BTForEach", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3222, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3223, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3224, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3225, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3226, + "text": "BT decorator that executes its child task for each element of an ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3227, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3228, + "text": "BTForEach executes its child task for each element of an ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3229, + "text": ". During each iteration, the next element is stored in the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3230, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3231, + "text": " variable.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3232, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3233, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3234, + "text": " or if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3235, + "text": " on a non-last iteration.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3236, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3237, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3238, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3239, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3240, + "text": " on the last iteration.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3241, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3242, + "text": "array_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3243, + "text": "save_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3244, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3245, + "text": "array_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3246, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3247, + "text": "set_array_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3248, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3249, + "text": "get_array_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3250, + "text": "A variable within the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3251, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3252, + "text": " that holds an ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3253, + "text": ", which is used for the iteration process.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3254, + "text": "save_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3255, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3256, + "text": "set_save_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3257, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3258, + "text": "get_save_var", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3259, + "text": "A ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3260, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3261, + "text": " variable used to store an element of the array referenced by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3262, + "text": "array_var", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3263, + "text": "BTInstance", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3264, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3265, + "text": "Represents a runtime instance of a ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3266, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3267, + "text": " resource.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3268, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3269, + "text": "Can be created using the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3270, + "text": "BehaviorTree.instantiate", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3271, + "text": " method.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3272, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3273, + "text": "monitor_performance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3274, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3275, + "text": "get_agent", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3276, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3277, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3278, + "text": "get_blackboard", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3279, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3280, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3281, + "text": "get_last_status", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3282, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3283, + "text": "get_owner_node", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3284, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3285, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3286, + "text": "get_root_task", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3287, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3288, + "text": "get_source_bt_path", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3289, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3290, + "text": "is_instance_valid", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3291, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3292, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3293, + "text": "register_with_debugger", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3294, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3295, + "text": "unregister_with_debugger", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3296, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3297, + "text": "update", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3298, + "text": "(delta: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3299, + "text": "Signals", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3300, + "text": "freed", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3301, + "text": "Emitted when the behavior tree instance is freed. Used by debugger to unregister.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3302, + "text": "updated", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3303, + "text": "(status: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3304, + "text": "Emitted when the behavior tree instance has finished updating.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3305, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3306, + "text": "monitor_performance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3307, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3308, + "text": "set_monitor_performance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3309, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3310, + "text": "get_monitor_performance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3311, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3312, + "text": ", adds a performance monitor for this instance to “Debugger->Monitors” in the editor.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3313, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3314, + "text": "get_agent", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3315, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3316, + "text": "Returns the agent of the behavior tree instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3317, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3318, + "text": "get_blackboard", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3319, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3320, + "text": "Returns the blackboard of the behavior tree instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3321, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3322, + "text": "get_last_status", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3323, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3324, + "text": "Returns the execution status of the last update.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3325, + "text": "get_owner_node", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3326, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3327, + "text": "Returns the scene ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3328, + "text": " that owns this behavior tree instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3329, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3330, + "text": "get_root_task", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3331, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3332, + "text": "Returns the root task of the behavior tree instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3333, + "text": "get_source_bt_path", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3334, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3335, + "text": "Returns the file path to the behavior tree resource that was used to create this instance.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3336, + "text": "is_instance_valid", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3337, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3338, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3339, + "text": " if the behavior tree instance is properly initialized and can be used.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3340, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3341, + "text": "register_with_debugger", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3342, + "text": "Registers the behavior tree instance with the debugger.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3343, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3344, + "text": "unregister_with_debugger", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3345, + "text": "Unregisters the behavior tree instance from the debugger. This is typically not necessary, as the debugger will automatically unregister the instance when it is freed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3346, + "text": "Status", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3347, + "text": "update", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3348, + "text": "(delta: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3349, + "text": "Ticks the behavior tree instance and returns its status.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3350, + "text": "BTInvert", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3351, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3352, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3353, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3354, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3355, + "text": "BT decorator that transforms ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3356, + "text": " into ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3357, + "text": " and ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3358, + "text": " into ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3359, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3360, + "text": "BTInvert transforms ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3361, + "text": " into ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3362, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3363, + "text": " into ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3364, + "text": "BTNewScope", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3365, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3366, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3367, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3368, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3369, + "text": "Inherited By:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3370, + "text": "BTSubtree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3371, + "text": "BT decorator that creates a new ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3372, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3373, + "text": " scope.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3374, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3375, + "text": "BTNewScope creates a new ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3376, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3377, + "text": " scope during initialization and populates it with data. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3378, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3379, + "text": "Returns the status of the child task execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3380, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3381, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3382, + "text": "blackboard_plan", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3383, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3384, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3385, + "text": "blackboard_plan", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3386, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3387, + "text": "set_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3388, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3389, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3390, + "text": "BlackboardPlan", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3391, + "text": "get_blackboard_plan", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3392, + "text": "Stores and manages variables that will be used in constructing new ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3393, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3394, + "text": " instances.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3395, + "text": "BTParallel", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3396, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3397, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3398, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3399, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3400, + "text": "BT composite that executes all of its child tasks simultaneously.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3401, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3402, + "text": "BTParallel executes all of its child tasks simultaneously. Note that BTParallel doesn’t involve multithreading. It processes each task sequentially, from first to last, in the same tick before returning a result. If one of the abort criterea is met, any tasks currently ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3403, + "text": " will be terminated, and the result will be either ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3404, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3405, + "text": ". The ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3406, + "text": "num_failures_required", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3407, + "text": " determines when BTParallel fails and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3408, + "text": "num_successes_required", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3409, + "text": " when it succeeds. When both are fullfilled, it gives priority to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3410, + "text": "num_failures_required", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3411, + "text": "If set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3412, + "text": "repeat", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3413, + "text": ", all child tasks will be re-executed each tick, regardless of whether they previously resulted in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3414, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3415, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3416, + "text": " when the required number of child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3417, + "text": ". When ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3418, + "text": "repeat", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3419, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3420, + "text": ", if none of the criteria were met and all child tasks resulted in either ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3421, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3422, + "text": ", BTParallel will return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3423, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3424, + "text": " when the required number of child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3425, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3426, + "text": " if none of the criterea were fulfilled, and either ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3427, + "text": "repeat", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3428, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3429, + "text": " or a child task resulted in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3430, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3431, + "text": "num_failures_required", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3432, + "text": "num_successes_required", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3433, + "text": "repeat", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3434, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3435, + "text": "num_failures_required", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3436, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3437, + "text": "set_num_failures_required", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3438, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3439, + "text": "get_num_failures_required", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3440, + "text": "If the specified number of child tasks return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3441, + "text": ", BTParallel will also return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3442, + "text": "num_successes_required", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3443, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3444, + "text": "set_num_successes_required", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3445, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3446, + "text": "get_num_successes_required", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3447, + "text": "If the specified number of child tasks return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3448, + "text": ", BTParallel will also return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3449, + "text": "repeat", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3450, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3451, + "text": "set_repeat", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3452, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3453, + "text": "get_repeat", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3454, + "text": "When ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3455, + "text": ", the child tasks will be executed again, regardless of whether they previously resulted in a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3456, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3457, + "text": "When ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3458, + "text": ", if none of the criteria were met, and all child tasks resulted in a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3459, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3460, + "text": ", BTParallel will return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3461, + "text": "BTPauseAnimation", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3462, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3463, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3464, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3465, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3466, + "text": "BT action that pauses the playback of an animation on the specified ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3467, + "text": " node.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3468, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3469, + "text": "BTPauseAnimation action pauses the playback of an animation on the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3470, + "text": " node and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3471, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3472, + "text": " if the action fails to get the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3473, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3474, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3475, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3476, + "text": "animation_player", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3477, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3478, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3479, + "text": "animation_player", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3480, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3481, + "text": "set_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3482, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3483, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3484, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3485, + "text": "get_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3486, + "text": "Parameter that specifies the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3487, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3488, + "text": "BTPlayAnimation", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3489, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3490, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3491, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3492, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3493, + "text": "BT action that plays an animation on the specified ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3494, + "text": " node.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3495, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3496, + "text": "BTPlayAnimation action plays an animation on the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3497, + "text": " node. If the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3498, + "text": "await_completion", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3499, + "text": " is greater than ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3500, + "text": ", the action will wait for the animation to complete, with the maximum waiting time equal to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3501, + "text": "await_completion", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3502, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3503, + "text": " if the animation finishes playing or if the elapsed time exceeds ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3504, + "text": "await_completion", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3505, + "text": ". When ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3506, + "text": "await_completion", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3507, + "text": " is set to ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3508, + "text": ", BTPlayAnimation doesn’t wait for the animation to finish and immediately returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3509, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3510, + "text": " if the animation is still playing and the elapsed time is less than ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3511, + "text": "await_completion", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3512, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3513, + "text": " if the action fails to play the requested animation.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3514, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3515, + "text": "animation_name", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3516, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3517, + "text": "animation_player", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3518, + "text": "await_completion", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3519, + "text": "blend", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3520, + "text": "from_end", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3521, + "text": "speed", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3522, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3523, + "text": "animation_name", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3524, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3525, + "text": "set_animation_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3526, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3527, + "text": "get_animation_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3528, + "text": "Animation’s key within the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3529, + "text": " node. If empty, BTPlayAnimation will resume the last played animation if the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3530, + "text": " was previously paused.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3531, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3532, + "text": "animation_player", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3533, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3534, + "text": "set_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3535, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3536, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3537, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3538, + "text": "get_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3539, + "text": "Parameter that specifies the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3540, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3541, + "text": "await_completion", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3542, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3543, + "text": "set_await_completion", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3544, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3545, + "text": "get_await_completion", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3546, + "text": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTPlayAnimation will stop waiting and return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3547, + "text": "blend", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3548, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3549, + "text": "set_blend", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3550, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3551, + "text": "get_blend", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3552, + "text": "Custom blend time (in seconds). See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3553, + "text": "AnimationPlayer.play", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 3554, + "text": "from_end", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3555, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3556, + "text": "set_from_end", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3557, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3558, + "text": "get_from_end", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3559, + "text": "Play animation from the end. Used in combination with negative ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3560, + "text": "speed", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3561, + "text": " to play animation in reverse. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3562, + "text": "AnimationPlayer.play", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 3563, + "text": "speed", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3564, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3565, + "text": "set_speed", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3566, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3567, + "text": "get_speed", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3568, + "text": "Custom playback speed scaling ratio. See ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3569, + "text": "AnimationPlayer.play", + "parents": [ + "span", + "p", + "section", + "section" + ] + }, + { + "id": 3570, + "text": "BTProbability", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3571, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3572, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3573, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3574, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3575, + "text": "BT decorator that executes its child task with a given probability.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3576, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3577, + "text": "BTProbability executes its child task with a given probability defined by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3578, + "text": "run_chance", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3579, + "text": "Returns the result of the child task if it was executed; otherwise, it returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3580, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3581, + "text": "run_chance", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3582, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3583, + "text": "run_chance", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3584, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3585, + "text": "set_run_chance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3586, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3587, + "text": "get_run_chance", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3588, + "text": "Probability that defines how likely the child task will be executed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3589, + "text": "BTProbabilitySelector", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3590, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3591, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3592, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3593, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3594, + "text": "BT composite that chooses a child task to execute based on attached probabilities.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3595, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3596, + "text": "BTProbabilitySelector chooses a child task to execute based on attached probabilities. It is typically used for decision-making purposes. Probability distribution is calculated based on weights assigned to each child task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3597, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3598, + "text": " when a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3599, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3600, + "text": " when a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3601, + "text": "The behavior of BTProbabilitySelector when a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3602, + "text": " depends on the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3603, + "text": "abort_on_failure", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3604, + "text": " value:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3605, + "text": "If ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3606, + "text": "abort_on_failure", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3607, + "text": " is ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3608, + "text": ", when a child task results in ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3609, + "text": ", BTProbabilitySelector will normalize the probability distribution over the remaining children and choose a new child task to be executed. If all child tasks fail, the composite will return ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3610, + "text": "If ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3611, + "text": "abort_on_failure", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3612, + "text": " is ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3613, + "text": ", when a child task results in ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3614, + "text": ", BTProbabilitySelector will not choose another child task to be executed and will immediately return ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3615, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3616, + "text": "abort_on_failure", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3617, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3618, + "text": "get_probability", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3619, + "text": "(child_idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3620, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3621, + "text": "get_total_weight", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3622, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3623, + "text": "get_weight", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3624, + "text": "(child_idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3625, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3626, + "text": "has_probability", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3627, + "text": "(child_idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3628, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3629, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3630, + "text": "set_probability", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3631, + "text": "(child_idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3632, + "text": ", probability: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3633, + "text": "void", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 3634, + "text": "set_weight", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3635, + "text": "(child_idx: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3636, + "text": ", weight: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 3637, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3638, + "text": "abort_on_failure", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3639, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3640, + "text": "set_abort_on_failure", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3641, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3642, + "text": "get_abort_on_failure", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3643, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3644, + "text": ", BTProbabilitySelector will not choose another child to execute and will return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3645, + "text": " when a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3646, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3647, + "text": "get_probability", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3648, + "text": "(child_idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3649, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3650, + "text": "Returns the child task’s selection probability.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3651, + "text": "get_total_weight", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3652, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3653, + "text": "Returns the total weight of all child tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3654, + "text": "get_weight", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3655, + "text": "(child_idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3656, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3657, + "text": "Returns the child task’s weight within the weighted probability selection algorithm.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3658, + "text": "has_probability", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3659, + "text": "(child_idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3660, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3661, + "text": "Returns whether the child task at index ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3662, + "text": " participates within the weighted probability selection algorithm and has a probability assigned to it. Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3663, + "text": " for ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3664, + "text": "BTComment", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3665, + "text": " tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3666, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3667, + "text": "set_probability", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3668, + "text": "(child_idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3669, + "text": ", probability: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3670, + "text": "Sets the child task’s weight calculated based on the desired probability.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3671, + "text": "void", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 3672, + "text": "set_weight", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3673, + "text": "(child_idx: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3674, + "text": ", weight: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3675, + "text": "Sets the child task’s weight for the weighted probability selection algorithm.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3676, + "text": "BTRandomSelector", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3677, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3678, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3679, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3680, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3681, + "text": "BT composite that executes tasks in random order until first ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3682, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3683, + "text": "BTRandomSelector executes its child tasks in a random order until any child returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3684, + "text": ". If a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3685, + "text": ", BTRandomSelector will immediately execute another child task until one of them returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3686, + "text": " or all of them result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3687, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3688, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3689, + "text": ". BTRandomSelector will remember the execution order and the last child task that returned ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3690, + "text": ", ensuring it resumes from that point in the next tick.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3691, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3692, + "text": " if all child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3693, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3694, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3695, + "text": "BTRandomSequence", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3696, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3697, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3698, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3699, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3700, + "text": "BT composite that executes tasks in random order as long as they return ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3701, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3702, + "text": "BTRandomSequence executes its child tasks in a random order as long as they return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3703, + "text": ". If a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3704, + "text": ", BTRandomSequence will immediately execute the next child task until one of them returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3705, + "text": " or all of them result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3706, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3707, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3708, + "text": ". BTRandomSequence will remember the execution order and the last child task that returned ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3709, + "text": ", ensuring it resumes from that point in the next tick.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3710, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3711, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3712, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3713, + "text": " if all child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3714, + "text": "BTRandomWait", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3715, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3716, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3717, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3718, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3719, + "text": "BT action that waits for a randomized duration to elapse and then returns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3720, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3721, + "text": "BTRandomWait action waits for a randomized duration to elapse and then returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3722, + "text": ". The duration is randomized within the specified range, defined by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3723, + "text": "min_duration", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3724, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3725, + "text": "max_duration", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3726, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3727, + "text": "max_duration", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3728, + "text": "min_duration", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3729, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3730, + "text": "max_duration", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3731, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3732, + "text": "set_max_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3733, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3734, + "text": "get_max_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3735, + "text": "Maximum duration for the wait.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3736, + "text": "min_duration", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3737, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3738, + "text": "set_min_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3739, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3740, + "text": "get_min_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3741, + "text": "Minimum duration for the wait.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3742, + "text": "BTRepeat", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3743, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3744, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3745, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3746, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3747, + "text": "BT decorator that repeats its child a specified number of ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3748, + "text": "times", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3749, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3750, + "text": "BTRepeat iterates its child task a specified number of times, as defined by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3751, + "text": "times", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3752, + "text": ". If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3753, + "text": "forever", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3754, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3755, + "text": ", the child’s execution will be repeated indefinitely.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3756, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3757, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3758, + "text": ". If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3759, + "text": "forever", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3760, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3761, + "text": ", BTRepeat will always return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3762, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3763, + "text": " if the specified number of successful executions is reached. If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3764, + "text": "abort_on_failure", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3765, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3766, + "text": ", a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3767, + "text": " status returned by the child is also considered a successful execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3768, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3769, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3770, + "text": " when ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3771, + "text": "abort_on_failure", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3772, + "text": " is ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3773, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3774, + "text": "abort_on_failure", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3775, + "text": "forever", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3776, + "text": "times", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3777, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3778, + "text": "abort_on_failure", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3779, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3780, + "text": "set_abort_on_failure", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3781, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3782, + "text": "get_abort_on_failure", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3783, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3784, + "text": " status returned by the child task is also considered as a successful execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3785, + "text": "forever", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3786, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3787, + "text": "set_forever", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3788, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3789, + "text": "get_forever", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3790, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3791, + "text": ", the child’s execution will be repeated indefinitely, always returning ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3792, + "text": "times", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3793, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3794, + "text": "set_times", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3795, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3796, + "text": "get_times", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3797, + "text": "The number of times to repeat execution of the child task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3798, + "text": "BTRepeatUntilFailure", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3799, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3800, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3801, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3802, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3803, + "text": "BT decorator that repeats its child task until ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3804, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3805, + "text": "BTRepeatUntilFailure repeats its child task until it results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3806, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3807, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3808, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3809, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3810, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3811, + "text": "BTRepeatUntilSuccess", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3812, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3813, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3814, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3815, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3816, + "text": "BT decorator that repeats its child task until ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3817, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3818, + "text": "BTRepeatUntilSuccess repeats its child task until it results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3819, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3820, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3821, + "text": " or ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3822, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3823, + "text": " if the child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3824, + "text": "BTRunLimit", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3825, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3826, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3827, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3828, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3829, + "text": "BT decorator that restricts the execution of its child a limited number of times.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3830, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3831, + "text": "BTRunLimit restricts the execution of the child task to a maximum number of times, defined by ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3832, + "text": "run_limit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3833, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3834, + "text": " if the limit on executions is exceeded; otherwise, it returns the status of the child task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3835, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3836, + "text": "CountPolicy", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3837, + "text": "count_policy", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3838, + "text": "run_limit", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3839, + "text": "Enumerations", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3840, + "text": "enum ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3841, + "text": "CountPolicy", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3842, + "text": "CountPolicy", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3843, + "text": "COUNT_SUCCESSFUL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3844, + "text": "Count only successful runs towards the limit.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3845, + "text": "CountPolicy", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3846, + "text": "COUNT_FAILED", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3847, + "text": "Count only failed runs towards the limit.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3848, + "text": "CountPolicy", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3849, + "text": "COUNT_ALL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3850, + "text": "Count successful and failed runs towards the limit.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3851, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3852, + "text": "CountPolicy", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3853, + "text": "count_policy", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3854, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3855, + "text": "set_count_policy", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3856, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3857, + "text": "CountPolicy", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3858, + "text": "CountPolicy", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3859, + "text": "get_count_policy", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3860, + "text": "Which runs should be counted towards the limit: successful, failed, or all?", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3861, + "text": "run_limit", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3862, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3863, + "text": "set_run_limit", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3864, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3865, + "text": "get_run_limit", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3866, + "text": "The maximum number of times the child is permitted to be executed.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3867, + "text": "BTSelector", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3868, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3869, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3870, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3871, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3872, + "text": "BT composite that sequentially executes tasks until first ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3873, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3874, + "text": "BTSelector executes its child tasks sequentially, from first to last, until any child returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3875, + "text": ". If a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3876, + "text": ", BTSelector will immediately execute the next child task until one of them returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3877, + "text": " or all of them result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3878, + "text": ". BTSelector and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3879, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3880, + "text": " are two of the most common building blocks of behavior trees. Essentially, while ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3881, + "text": "BTSequence", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3882, + "text": " is similar to a boolean AND operation, BTSelector is similar to a boolean OR operation. Selectors enable the behavior tree to respond to changes in the environment and trigger transitions between various fallback behaviors.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3883, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3884, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3885, + "text": ". BTSelector will remember the last child task that returned ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3886, + "text": ", ensuring it resumes from that point in the next execution tick.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3887, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3888, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3889, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3890, + "text": " if all child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3891, + "text": "BTSequence", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3892, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3893, + "text": "BTComposite", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3894, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3895, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3896, + "text": "BT composite that sequentially executes tasks as long as they return ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3897, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3898, + "text": "BTSequence executes its child tasks sequentially, from first to last, as long as they return ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3899, + "text": ". If a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3900, + "text": ", BTSequence will immediately execute the next child task until one of them returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3901, + "text": " or all of them result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3902, + "text": ". BTSequence and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3903, + "text": "BTSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3904, + "text": " are two of the most common building blocks of behavior trees. Essentially, while ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3905, + "text": "BTSelector", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3906, + "text": " is similar to a boolean OR operation, BTSequence is similar to a boolean AND operation. Sequences enable the behavior tree to compose complex behaviors from a chain of simpler tasks.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3907, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3908, + "text": " if any child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3909, + "text": ". BTSequence will remember the last child task that returned ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3910, + "text": ", ensuring it resumes from that point in the next execution tick.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3911, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3912, + "text": " if all child tasks result in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3913, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3914, + "text": " if a child task results in ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3915, + "text": "BTSetAgentProperty", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3916, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3917, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3918, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3919, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3920, + "text": "BT action that assigns a value to the specified agent’s property.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3921, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3922, + "text": "BTSetAgentProperty assigns the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3923, + "text": "value", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3924, + "text": " to the agent’s property identified by the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3925, + "text": "property", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3926, + "text": " and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3927, + "text": ". Optionally, it can perform a specific ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3928, + "text": "operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3929, + "text": " before assignment.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3930, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3931, + "text": " if it fails to set the property.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3932, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3933, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3934, + "text": "operation", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3935, + "text": "property", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3936, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3937, + "text": "value", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3938, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3939, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3940, + "text": "operation", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3941, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3942, + "text": "set_operation", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3943, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3944, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3945, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3946, + "text": "get_operation", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3947, + "text": "Specifies the operation to be performed before assignment. Operation is executed as follows:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3948, + "text": "property", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3949, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3950, + "text": "set_property", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3951, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3952, + "text": "get_property", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3953, + "text": "Parameter that specifies the agent’s property name.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3954, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3955, + "text": "value", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3956, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3957, + "text": "set_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3958, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3959, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3960, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3961, + "text": "get_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3962, + "text": "Parameter that specifies the value that will be assigned to agent’s property.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3963, + "text": "BTSetVar", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 3964, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 3965, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3966, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3967, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3968, + "text": "BT action that assigns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3969, + "text": "value", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3970, + "text": " to the ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3971, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3972, + "text": " and then returns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 3973, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3974, + "text": "BTSetVar assigns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3975, + "text": "value", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3976, + "text": " to the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3977, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3978, + "text": " and then returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3979, + "text": ". Optionally, it can perform a specific ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3980, + "text": "operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3981, + "text": " before assignment.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3982, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3983, + "text": " if it fails to set the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 3984, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3985, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3986, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3987, + "text": "operation", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3988, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3989, + "text": "value", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3990, + "text": "variable", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 3991, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 3992, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 3993, + "text": "operation", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 3994, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 3995, + "text": "set_operation", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 3996, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 3997, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3998, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 3999, + "text": "get_operation", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4000, + "text": "Specifies the operation to be performed before assignment. Operation is executed as follows:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4001, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4002, + "text": "value", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4003, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4004, + "text": "set_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4005, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4006, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 4007, + "text": "BBVariant", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 4008, + "text": "get_value", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4009, + "text": "Parameter that specifies the value to be assigned to the variable.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4010, + "text": "variable", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4011, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4012, + "text": "set_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4013, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4014, + "text": "get_variable", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4015, + "text": "Name of the variable to which the value will be assigned.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4016, + "text": "BTStopAnimation", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 4017, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 4018, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4019, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4020, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4021, + "text": "BT action that stops the playback of an animation on the specified ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4022, + "text": " node.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4023, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4024, + "text": "BTStopAnimation action stops the playback of an animation on the specified ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4025, + "text": " node and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4026, + "text": ". If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4027, + "text": "animation_name", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4028, + "text": " is set, it will only stop the playback if the specified animation is currently playing.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4029, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4030, + "text": " if the action fails to get the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4031, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4032, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4033, + "text": "animation_name", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4034, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4035, + "text": "animation_player", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4036, + "text": "keep_state", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4037, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4038, + "text": "animation_name", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4039, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4040, + "text": "set_animation_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4041, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4042, + "text": "get_animation_name", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4043, + "text": "Animation’s key within the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4044, + "text": " node. If not empty, BTStopAnimation will only stop the playback if the specified animation is currently playing.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4045, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4046, + "text": "animation_player", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4047, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4048, + "text": "set_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4049, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4050, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 4051, + "text": "BBNode", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 4052, + "text": "get_animation_player", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4053, + "text": "Parameter that specifies the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4054, + "text": " node.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4055, + "text": "keep_state", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4056, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4057, + "text": "set_keep_state", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4058, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4059, + "text": "get_keep_state", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4060, + "text": "If ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4061, + "text": ", the animation state is not updated visually.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4062, + "text": "BTSubtree", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 4063, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 4064, + "text": "BTNewScope", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4065, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4066, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4067, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4068, + "text": "BT decorator that instantiates and runs a subtree within the larger tree.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4069, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4070, + "text": "BTSubtree instantiates a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4071, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4072, + "text": " and includes its root task as a child during initialization, while also creating a new ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4073, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4074, + "text": " scope.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4075, + "text": "Returns the status of the subtree’s execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4076, + "text": "Subtree blackboard variables can be mapped to the main tree blackboard plan variables. Check out mapping section in the inspector.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4077, + "text": "Note: BTSubTree is designed as a simpler loader, and does not support updating ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4078, + "text": "subtree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4079, + "text": " at runtime. A custom subtree decorator is better suited:", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4080, + "text": "This allows for the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4081, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4082, + "text": " to load a specific behavior tree from a variable in the blackboard, or from some other location, and use that new behavior tree at runtime.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4083, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4084, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4085, + "text": "subtree", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4086, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4087, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4088, + "text": "subtree", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4089, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4090, + "text": "set_subtree", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4091, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4092, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 4093, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "li" + ] + }, + { + "id": 4094, + "text": "get_subtree", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4095, + "text": "A ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4096, + "text": "BehaviorTree", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4097, + "text": " resource that will be instantiated as a subtree.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4098, + "text": "BTTimeLimit", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 4099, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 4100, + "text": "BTDecorator", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4101, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4102, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4103, + "text": "BT decorator that sets a time limit for its child’s execution.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4104, + "text": "Description", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4105, + "text": "BTTimeLimit allocates a limited time for the child’s execution and aborts it, returning ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4106, + "text": " if the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4107, + "text": "time_limit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4108, + "text": " is exceeded.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4109, + "text": "Returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4110, + "text": " if the ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4111, + "text": "time_limit", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4112, + "text": " is exceeded; otherwise, it returns the status of the child task.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4113, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4114, + "text": "time_limit", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4115, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4116, + "text": "time_limit", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4117, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4118, + "text": "set_time_limit", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4119, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4120, + "text": "get_time_limit", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4121, + "text": "Time allocated for the child task’s execution.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4122, + "text": "BTWait", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 4123, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 4124, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4125, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4126, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4127, + "text": "BT action that waits for a specified ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4128, + "text": "duration", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4129, + "text": " to elapse and then returns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4130, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4131, + "text": "duration", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4132, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4133, + "text": "duration", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4134, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4135, + "text": "set_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4136, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4137, + "text": "get_duration", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4138, + "text": "There is currently no description for this property. Please help us by ", + "parents": [ + "p", + "div", + "section", + "section" + ] + }, + { + "id": 4139, + "text": "contributing one", + "parents": [ + "span", + "p", + "div", + "section" + ] + }, + { + "id": 4140, + "text": "BTWaitTicks", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 4141, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 4142, + "text": "BTAction", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4143, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4144, + "text": "BT", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4145, + "text": "BT action that waits for a specified number of ticks to elapse and then returns ", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4146, + "text": "Properties", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4147, + "text": "num_ticks", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4148, + "text": "Property Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4149, + "text": "num_ticks", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4150, + "text": "void", + "parents": [ + "abbr", + "p", + "li", + "ul" + ] + }, + { + "id": 4151, + "text": "set_num_ticks", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4152, + "text": "(value: ", + "parents": [ + "p", + "li", + "ul", + "section" + ] + }, + { + "id": 4153, + "text": "get_num_ticks", + "parents": [ + "strong", + "p", + "li", + "ul" + ] + }, + { + "id": 4154, + "text": "The number of ticks to wait before returning ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4155, + "text": "LimboUtility", + "parents": [ + "h2", + "section", + "div", + "section" + ] + }, + { + "id": 4156, + "text": "Inherits:", + "parents": [ + "strong", + "p", + "section", + "div" + ] + }, + { + "id": 4157, + "text": "Helper functions for LimboAI.", + "parents": [ + "p", + "section", + "div", + "section" + ] + }, + { + "id": 4158, + "text": "Methods", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4159, + "text": "decorate_output_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4160, + "text": "(variable: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4161, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 4162, + "text": "decorate_var", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4163, + "text": "(variable: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4164, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 4165, + "text": "get_check_operator_string", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4166, + "text": "(check: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4167, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4168, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 4169, + "text": "get_operation_string", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4170, + "text": "(operation: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4171, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4172, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 4173, + "text": "get_status_name", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4174, + "text": "(status: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4175, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 4176, + "text": "get_task_icon", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4177, + "text": "(class_or_script_path: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4178, + "text": "const", + "parents": [ + "abbr", + "p", + "td", + "tr" + ] + }, + { + "id": 4179, + "text": "perform_check", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4180, + "text": "(check: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4181, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4182, + "text": ", a: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4183, + "text": ", b: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4184, + "text": "perform_operation", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4185, + "text": "(operation: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4186, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "td" + ] + }, + { + "id": 4187, + "text": ", a: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4188, + "text": ", b: ", + "parents": [ + "p", + "td", + "tr", + "tbody" + ] + }, + { + "id": 4189, + "text": "Enumerations", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4190, + "text": "enum ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4191, + "text": "CheckType", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4192, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4193, + "text": "CHECK_EQUAL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4194, + "text": "Equality Check.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4195, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4196, + "text": "CHECK_LESS_THAN", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4197, + "text": "Less Than Check.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4198, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4199, + "text": "CHECK_LESS_THAN_OR_EQUAL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4200, + "text": "Less Than or Equal To Check.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4201, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4202, + "text": "CHECK_GREATER_THAN", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4203, + "text": "Greater Than Check.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4204, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4205, + "text": "CHECK_GREATER_THAN_OR_EQUAL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4206, + "text": "Greater Than or Equal To Check", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4207, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4208, + "text": "CHECK_NOT_EQUAL", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4209, + "text": "Inequality Check.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4210, + "text": "enum ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4211, + "text": "Operation", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4212, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4213, + "text": "OPERATION_NONE", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4214, + "text": "No operation.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4215, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4216, + "text": "OPERATION_ADDITION", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4217, + "text": "Arithmetic addition.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4218, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4219, + "text": "OPERATION_SUBTRACTION", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4220, + "text": "Arithmetic subtraction.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4221, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4222, + "text": "OPERATION_MULTIPLICATION", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4223, + "text": "Arithmetic multiplication.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4224, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4225, + "text": "OPERATION_DIVISION", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4226, + "text": "Arithmetic division.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4227, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4228, + "text": "OPERATION_MODULO", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4229, + "text": "Produces the remainder of an integer division.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4230, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4231, + "text": "OPERATION_POWER", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4232, + "text": "Multiply ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4233, + "text": " by itself ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4234, + "text": " times.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4235, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4236, + "text": "OPERATION_BIT_SHIFT_LEFT", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4237, + "text": "Bitwise left shift.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4238, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4239, + "text": "OPERATION_BIT_SHIFT_RIGHT", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4240, + "text": "Bitwise right shift.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4241, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4242, + "text": "OPERATION_BIT_AND", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4243, + "text": "Bitwise AND.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4244, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4245, + "text": "OPERATION_BIT_OR", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4246, + "text": "Bitwise OR.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4247, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4248, + "text": "OPERATION_BIT_XOR", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4249, + "text": "Bitwise XOR.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4250, + "text": "Method Descriptions", + "parents": [ + "h3", + "section", + "section", + "div" + ] + }, + { + "id": 4251, + "text": "decorate_output_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4252, + "text": "(variable: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4253, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 4254, + "text": "Just like ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4255, + "text": "decorate_var", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4256, + "text": ", produces a string with a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4257, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4258, + "text": " variable name that is formatted for display, and also adds an additional symbol to indicate that the variable is used as an output.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4259, + "text": "decorate_var", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4260, + "text": "(variable: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4261, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 4262, + "text": "Produces a string with a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4263, + "text": "Blackboard", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4264, + "text": " variable name that is formatted for display or console output.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4265, + "text": "get_check_operator_string", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4266, + "text": "(check: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4267, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4268, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 4269, + "text": "Returns an operator string for a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4270, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4271, + "text": " enum value. For example, ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4272, + "text": "CHECK_EQUAL", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4273, + "text": " returns “==”.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4274, + "text": "get_operation_string", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4275, + "text": "(operation: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4276, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4277, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 4278, + "text": "Returns a string representation of an ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4279, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4280, + "text": " enum value.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4281, + "text": "get_status_name", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4282, + "text": "(status: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4283, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 4284, + "text": "Returns a name of a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4285, + "text": "BTTask", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4286, + "text": " status code.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4287, + "text": "get_task_icon", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4288, + "text": "(class_or_script_path: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4289, + "text": "const", + "parents": [ + "abbr", + "p", + "section", + "section" + ] + }, + { + "id": 4290, + "text": "Returns the icon texture associated with a task based on its class name or script resource path.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4291, + "text": "perform_check", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4292, + "text": "(check: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4293, + "text": "CheckType", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4294, + "text": ", a: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4295, + "text": ", b: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4296, + "text": "Performs a ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4297, + "text": " on two values, ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4298, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4299, + "text": ", and returns ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4300, + "text": " if the check passes.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4301, + "text": "perform_operation", + "parents": [ + "strong", + "p", + "section", + "section" + ] + }, + { + "id": 4302, + "text": "(operation: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4303, + "text": "Operation", + "parents": [ + "span", + "a", + "p", + "section" + ] + }, + { + "id": 4304, + "text": ", a: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4305, + "text": ", b: ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4306, + "text": "Performs an ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4307, + "text": " on two values, ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4308, + "text": " and ", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4309, + "text": ", and returns the result.", + "parents": [ + "p", + "section", + "section", + "div" + ] + }, + { + "id": 4310, + "text": "© Copyright 2023-present Serhii Snitsaruk and the LimboAI contributors.", + "parents": [ + "p", + "div", + "footer", + "div" + ] + }, + { + "id": 4311, + "text": "\n\n Built with ", + "parents": [ + "footer", + "div", + "div", + "section" + ] + }, + { + "id": 4312, + "text": "Sphinx", + "parents": [ + "a", + "footer", + "div", + "div" + ] + }, + { + "id": 4313, + "text": " using a\n ", + "parents": [ + "footer", + "div", + "div", + "section" + ] + }, + { + "id": 4314, + "text": "theme", + "parents": [ + "a", + "footer", + "div", + "div" + ] + }, + { + "id": 4315, + "text": "\n provided by ", + "parents": [ + "footer", + "div", + "div", + "section" + ] + }, + { + "id": 4316, + "text": "Read the Docs", + "parents": [ + "a", + "footer", + "div", + "div" + ] + } +] \ No newline at end of file diff --git a/docs/limboai-stable/_i18n/trans/batch01.json b/docs/limboai-stable/_i18n/trans/batch01.json new file mode 100644 index 0000000..67d69f8 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch01.json @@ -0,0 +1,89 @@ +{ +"1": "LimboAI 文档", +"2": "LimboAI 是一个面向 Godot Engine 4 的开源 C++ 模块,将行为树与状态机结合在一起,用于打造你游戏的 AI。它自带行为树编辑器、内置文档、可视化调试器等!虽然它是用 C++ 实现的,但完全支持用 GDScript 来创建你自己的任务和状态。完整功能列表见 LimboAI GitHub 页面。", +"3": "行为树是一种强大的层次结构,用于建模和控制游戏中智能体(例如角色、敌人、实体)的行为。它旨在让你更轻松地为游戏创建复杂且高度模块化的行为。想进一步了解行为树,请参阅行为树简介。", +"4": "分层状态机是一种有限状态机,允许任意状态拥有自己的子状态机。这样你就可以把一个庞大的状态机拆解为多个较小的状态机,从而应对 AI 在状态与状态转换上的复杂度。", +"5": "获取 LimboAI", +"6": "LimboAI 既可以作为 C++ 模块使用,也可以作为 GDExtension 共享库使用。两者之间存在一些差异。简而言之,GDExtension 版本使用起来更方便,但功能上略有受限。模块版本提供更好的编辑器体验,性能也稍好一些,但需要使用包含导出模板的自定义引擎构建。无论你选择哪种方式,你的项目都能同时兼容两者,随时可以互相切换。", +"7": "选择你想使用的版本。如果拿不定主意,就从 GDExtension 版本开始。你随时可以改变决定 —— 两个版本完全兼容。", +"8": "获取 GDExtension 版本", +"9": "官方 LimboAI GitHub 页面以及资源库(Asset Library)中都提供了预编译版本。", +"10": "GDExtension 是使用 LimboAI 插件最便捷的方式,但它有一些限制:", +"11": "不提供文档提示(tooltip)。", +"12": "由于依赖 Godot API 中不存在的引擎类,扩展版本中无法使用便捷的 BBParam 属性编辑器。", +"13": "🛈 另见:什么是 GDExtension?", +"14": "安装步骤:", +"15": "确认你正在使用最新稳定版的 Godot 编辑器。", +"16": "为你的 LimboAI 实验创建一个新项目。", +"17": "在 Godot 中点击屏幕顶部的 AssetLib 标签,搜索 LimboAI 并下载。LimboAI 插件会连同示例项目文件一起下载。此时打印出的错误可以忽略,那是因为扩展库尚未加载。", +"18": "用 Project -> Reload project 重新加载项目。现在应该不会再打印任何错误了。", +"19": "在项目文件中找到名为 showcase.tscn 的场景文件并运行它。它是示例的入口点。", +"20": "获取模块版本", +"21": "官方 LimboAI GitHub 页面提供预编译版本。", +"22": "在 GitHub releases 中,下载适用于你平台的最新预编译发行版。", +"23": "从同一个发行版中下载示例项目压缩包。", +"24": "解压预编译编辑器与示例项目文件。", +"25": "启动预编译的编辑器可执行文件,导入并打开示例项目。", +"26": "运行项目。", +"27": "重要:使用模块版 LimboAI 导出游戏时,请务必使用同一个 GitHub 发行版构建中附带的预编译导出模板。", +"28": "在 C# 中使用 LimboAI", +"29": "下面介绍如何使用模块版本配合 C# 编写你的任务和状态。", +"30": "找到 LimboAI 的 NuGet 包文件。", +"31": "每个提供的构建都带有 GodotSharp 文件夹,其中的包位于 “GodotSharp/Tools/nupkgs/” 下。记下该目录路径,下一步会用到。", +"32": "使用以下命令添加一个本地 NuGet 包源:", +"33": "你的 C# 项目应该就能看到 LimboAI 的类并成功编译。", +"34": "关于 GDExtension,目前我只能确认模块版本与 C# 可以正常工作。遗憾的是,我在 GDExtension 版本上还没有成功过。如果你用 GDExtension 成功了,请通过 Discord 或邮件告诉我。", +"35": "参与贡献", +"36": "在 Godot 发布第三个 beta 或候选版本之前,我们以 Godot 引擎的最新稳定版作为开发目标。如果你想为本项目做贡献,请确保使用对应的 Godot 版本。", +"37": "我们遵循 Godot 代码风格指南。请使用 <2/> 来保持风格一致。你可以用 <4/> 为 Git 安装 <3/> 钩子,把这一过程自动化。", +"38": "提交拉取请求(Pull Request)时,请保持次版本向后兼容。", +"39": "我们支持把 LimboAI 构建为 Godot 引擎的模块,也支持构建为 GDExtension 库。请确保你的贡献在两种方式下都兼容。我们的 CI 工作流会验证你的改动能否在两种配置下都编译通过。", +"40": "作为 Godot 引擎模块编译", +"41": "克隆 Godot 引擎仓库。", +"42": "切换到最新的稳定版 tag。", +"43": "把 LimboAI 仓库克隆到 <1/> 目录中。", +"44": "详细的引擎构建说明请参考 Godot 引擎文档。", +"45": "使用 <1/> 构建选项可以编译单元测试。要运行它们,请带上 <2/> 命令行选项运行编译好的 Godot 可执行文件。", +"46": "构建 C# 包", +"47": "如果你希望从源码构建时启用 LimboAI 的 C# 支持,请按照 Godot 关于带 C# 支持从源码构建的说明操作:使用 .NET 编译。LimboAI 的类会包含在该构建流程的输出中。", +"48": "作为 GDExtension 库编译", +"49": "你需要 SCons 构建工具和一个 C++ 编译器。另见编译。运行 <2/> 即可为你当前的平台构建插件库。", +"50": "如果 <2/> 目录中还没有 <1/> 仓库,SCons 会自动克隆它。", +"51": "默认情况下,构建产物会被放到示例项目中:<1/>。", +"52": "其他选项与目标请查看 <1/>。", +"53": "为文档做贡献", +"54": "在线文档使用 Sphinx 生成。源文件以 RST 格式放在 <2/> 目录中,可以在本地用 <3/> 构建。更多细节请参阅 Sphinx 文档。", +"55": "类文档存放在 <1/> 目录下的 XML 文件中。如果你新建了类或修改了已有类,可以在 Godot 源码根目录下用 <2/> 选项运行编译好的 Godot 可执行文件,用来生成缺失的 XML 文件或类文档中对应文件的缺失片段。编辑完 XML 文件后,请再次用 <3/> 选项运行编译好的编辑器可执行文件,以更新并整理这些 XML 文件。", +"56": "类文档的 Sphinx RST 文件由 XML 文件经 Godot 脚本 <1/> 生成,并保存在 <2/> 目录中。该过程由我们自己的脚本 <3/> 完成。<4/> 中的 RST 文件不应手动编辑。", +"57": "行为树简介", +"58": "🛈 注意:示例项目中包含一个教程,通过直观的示例带你入门行为树。", +"59": "行为树(BT)是一种层次结构,用于建模和控制游戏中智能体(例如角色、敌人、实体)的行为。它旨在让你更轻松地为游戏创建复杂且高度模块化的行为。", +"60": "行为树由若干任务组成,这些任务代表具体的动作或决策规则。任务大致可分为两大类:控制任务和叶任务。控制任务决定树内的执行流程,包括 Sequence、Selector 和 Invert。叶任务代表要执行的具体动作(例如移动或攻击),或是需要检查的条件。BTTask 类为行为树的各种积木块提供了基础。这类任务可以通过 Blackboard 共享数据。", +"61": "🛈 注意:要创建你自己的动作,请继承 BTAction 类。", +"62": "行为树通常每一帧都会处理一次。它自上而下遍历,由控制任务决定控制流。每个任务都有一个 _tick 方法,负责执行任务的工作并返回表示进度的状态:<2/>、<3/> 或 <4/>。<5/> 和 <6/> 表示已完成工作的结果,而当一个任务需要不止一个 tick 才能完成时,就会返回 <7/> 状态。这些状态决定树的推进方式,其中 <8/> 状态通常意味着树会在下一帧继续执行。", +"63": "任务共有四种类型:", +"64": "动作(Actions)是执行实际工作的叶任务。", +"65": "例如:PlayAnimation、Wait。", +"66": "条件(Conditions)是执行各种检查的叶任务。", +"67": "例如:CheckVar、InRange。", +"68": "组合任务(Composites)可以拥有一个或多个子任务,并决定子任务的执行流程。", +"69": "例如:Sequence、Selector、Parallel。", +"70": "装饰器(Decorators)只能拥有一个子任务,用于改变其子任务的运行方式。", +"71": "例如:AlwaysSucceed、Invert、TimeLimit。", +"72": "Sequence 是核心组合任务之一。它按顺序从第一个到最后一个执行子任务,直到其中一个返回 <2/>,或者全部返回 <3/>。换句话说,只要有任一子任务返回 <4/>,Sequence 的执行就会被中止,并且 Sequence 自身会返回 <7/>。", +"73": "Selector 是另一个必不可少的组合任务。它按顺序从第一个到最后一个执行子任务,直到其中一个返回 <2/> 或全部返回 <3/>。换句话说,当某个子任务返回 <4/> 时,它就继续尝试下一个,直到找到那个返回 <5/> 的子任务。一旦某个子任务返回 <6/>,Selector 就会停止,并同样返回 <8/>。Selector 的目的就是找出一个能够成功的子任务。", +"74": "行为树通过条件任务来处理条件逻辑。这些任务检查特定条件,并根据智能体或其环境的状态返回 <1/> 或 <2/>(例如 “IsLowOnHealth”、“IsTargetInSight”)。条件可以与 Sequence 和 Selector 搭配使用,构建你的决策逻辑。", +"75": "🛈 注意:要创建你自己的条件,请继承 BTCondition 类。", +"76": "请查阅 BTTask 类的文档,它为行为树的各种积木块提供了基础。", +"77": "创建行为树", +"78": "本章介绍如何创建和调试行为树。", +"79": "为智能体添加行为树", +"80": "按照以下步骤,为新建或已有的智能体添加行为树:", +"81": "为你的智能体创建一个场景文件,或者打开一个已有的场景。", +"82": "在场景中添加一个 BTPlayer 节点。", +"83": "选中 BTPlayer,在检视面板(Inspector)中新建一个行为树。", +"84": "你也可以通过该属性的上下文菜单,把行为树保存到文件中。", +"85": "点击行为树属性,在 LimboAI 编辑器中打开它。", +"86": "调试行为树", +"87": "在 Godot 引擎中,依次打开 “Bottom Panel > Debugger > LimboAI” 标签页。借助 LimboAI 调试器,你可以查看运行中的项目里任何当前处于活动状态的行为树。调试器可以从主编辑器窗口中分离出来,如果你使用 HiDPI 显示器或第二块屏幕,这会特别有用。" +} diff --git a/docs/limboai-stable/_i18n/trans/batch02.json b/docs/limboai-stable/_i18n/trans/batch02.json new file mode 100644 index 0000000..4f455d0 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch02.json @@ -0,0 +1,94 @@ +{ +"88": "查看任务属性与黑板", +"89": "当你在 LimboAI 调试器中点击某个任务时,它的属性会显示在远程检视面板(Remote Inspector)中,其中包含 Blackboard 引用。点击 Blackboard 可以打开它,查看整条作用域链上的所有变量,并按作用域分组。你还可以实时修改变量值,这对测试和调试游戏 AI 很有帮助。", +"90": "创建自定义任务", +"91": "默认情况下,用户任务应放在 <1/> 目录中。你可以在 <2/> 中为用户任务设置其他位置(要看到这些选项,需要在项目设置中启用 <3/>)。", +"92": "用户任务目录下的每个子目录都会被当作一个分类。因此,如果你创建了一个名为 “motion_and_physics” 的子目录,其中的自定义任务会自动归类到 “Motion And Physics” 下。", +"93": "创建自定义任务时,请继承以下基类之一:BTAction、BTCondition、BTDecorator、BTComposite。关于任务类型的更多内容,可阅读行为树简介。", +"94": "🛈 注意:为了帮助你编写新任务,你可以通过 “Misc → Create script template” 菜单项向项目中添加脚本模板。", +"95": "Blackboard 的使用方法见在任务中访问黑板。", +"96": "任务的结构", +"97": "示例 1:一个简单的动作", +"98": "示例 2:InRange 条件", +"99": "用 C# 创建任务", +"100": "自定义任务可以使用以下脚本模板:", +"101": "使用 Blackboard 共享数据", +"102": "为了在不同任务与状态之间共享数据,我们用到了一个称为 Blackboard 的特性。Blackboard 充当中央仓库,任务和状态可以在其中存取具名变量,从而实现无缝的数据交换。每个行为树或状态机实例都拥有自己专属的 Blackboard。它可以存储多种数据类型,包括对象和资源。", +"103": "借助 Blackboard,你可以轻松地在行为树中共享数据,让行为树里的任务更加灵活。", +"104": "在任务中访问黑板", +"105": "每个 BTTask 都能访问 Blackboard,这为数据交换提供了直截了当的机制。下面是一个在 GDScript 中与 Blackboard 交互的示例:", +"106": "如果你访问的变量持有对象实例,并且该实例可能为 null 或已被释放,可以这样写:", +"107": "建议给变量名属性加上 <1/> 后缀,如上例所示。这样检视面板就能为该变量提供更便捷的属性编辑器。这个编辑器允许你选择变量,或把它加入黑板计划(blackboard plan),并在黑板计划中不存在该变量时显示警告图标。", +"108": "🛈 注意:在代码中设置变量时,该变量不需要事先存在。", +"109": "编辑黑板计划(Blackboard Plan)", +"110": "黑板计划与每个 BehaviorTree 资源相关联,它决定 Blackboard 在每个新的 BehaviorTree 实例中如何初始化。BlackboardPlan 资源存储 BehaviorTree 初始化所需的默认值、类型信息和数据绑定。", +"111": "要从黑板计划中添加、修改或删除变量,请按以下步骤操作:", +"112": "打开 LimboAI 编辑器,加载你想编辑的行为树。", +"113": "在编辑器中,点击标签页内的小按钮。这会在检视面板中打开 BlackboardPlan。", +"114": "在检视面板中点击 “Manage…” 按钮,显示黑板计划编辑器。", +"115": "在黑板计划编辑器中,你可以添加、删除或重新排列变量,并修改它们的数据类型与提示(hint)。", +"116": "提示会向检视面板提供关于该变量的附加信息,例如整数变量的最小值和最大值。更多内容请参阅 Godot 官方文档中的属性提示。", +"117": "你可以直接在检视面板中指定变量的默认值。", +"118": "在 BTPlayer 中覆盖变量", +"119": "每个 BTPlayer 节点也有一个 “Blackboard Plan” 属性,可以覆盖 BehaviorTree 中黑板变量的值。这些覆盖只对 BTPlayer 所在的场景生效,不会影响使用同一个 BehaviorTree 的其他场景。要修改这些值:", +"120": "在场景树中选中 BTPlayer 节点。", +"121": "在检视面板中找到 “Blackboard Plan” 属性。", +"122": "覆盖你想要的值,为特定场景定制黑板变量。", +"123": "任务参数", +"124": "在某些情况下,让行为树任务导出参数会很有帮助,这些参数既可以绑定到黑板变量,也可以由用户直接指定。为此,LimboAI 提供了一些以 “BB” 开头的特殊参数类型,例如 BBInt、BBBool、BBString、BBFloat、BBNode 等等。完整列表请查阅 BBParam 类文档。", +"125": "用法示例:", +"126": "把 BT 中的变量连接到 HSM:变量映射", +"127": "每个 BTState 都会为其 BehaviorTree 实例创建一个新的黑板作用域。由于 BehaviorTree 是可复用的资源,可以在不同上下文或不同智能体上运行,它们不会自动看到 HSM 中定义的变量。在运行时,HSM 变量通常可以通过父作用域黑板在 BT 中访问,但推荐的访问方式是通过映射(Mapping)。", +"128": "注意", +"129": "要了解更多关于作用域的内容,请参阅 Blackboard。", +"130": "当 BehaviorTree 和 HSM 各自在它们的 BlackboardPlan 资源中声明变量后,编辑器会在 BlackboardPlan 检视面板中提供映射(Mapping)区域。映射是连接相关计划之间变量的既定且推荐的方式。", +"131": "关于映射的要点", +"132": "映射会把两个变量连接起来,使它们在运行时表现为同一个逻辑变量。", +"133": "被链接的变量会在两个作用域中立即同步更新 —— 它们在内存中共享同一份状态(没有轮询,也没有复制)。", +"134": "映射是显式的:由你决定 BT 将哪些变量作为输入和输出暴露出来。", +"135": "链接是双向的 —— 输入与输出之间没有区别。", +"136": "映射不会自动创建新变量 —— 变量必须已经存在于两个黑板计划中,才能被链接。", +"137": "检视面板操作流程", +"138": "分别在各 BlackboardPlan(例如 HSM 计划和 BT 计划)中定义所需的变量。", +"139": "在场景中选中 BTState 节点,或选中行为树内的 BTSubtree。", +"140": "在检视面板中选择 Blackboard Plan 属性。", +"141": "在 BlackboardPlan 资源检视面板中,找到映射(Mapping)区域。", +"142": "通过配对变量(<1/>)来创建映射。", +"143": "启动时映射会被应用,变量会为运行中的实例自动建立链接。", +"144": "编程替代方案:在代码中链接变量", +"145": "你也可以直接用 Blackboard.link_var 在代码中链接变量:", +"146": "最佳实践", +"147": "在 BT 自己的 BlackboardPlan 中声明所有 BT 依赖,而不要依赖父作用域。", +"148": "使用映射(Mapping)明确声明哪些变量应与 HSM 共享。", +"149": "优先使用基于检视面板的映射流程,以获得更好的清晰度和编辑器支持;仅在需要运行时或编程式设置时才使用 <1/>。", +"150": "避免在 BT 任务内部写入 <1/>,除非你有非常明确的理由,并且接受由此带来的耦合。", +"151": "进阶话题:黑板作用域", +"152": "LimboAI 中的 Blackboard 可以作为另一个 Blackboard 的父作用域。这意味着,如果某个变量在当前作用域中找不到,系统就会到父级 Blackboard 中查找。这样就形成了“黑板作用域链”,链中每个 Blackboard 都可以拥有自己的父作用域,而且链中黑板的数量没有上限。需要注意的是,Blackboard 不会修改父作用域中的值。", +"153": "系统会自动创建作用域,以避免上下文相互独立的环境之间发生命名冲突:", +"154": "在 BTNewScope 内部。", +"155": "在 BTSubtree 装饰器之下。", +"156": "对于定义了非空黑板计划的 LimboState。", +"157": "在 LimboHSM 节点之下:会在根层级创建一个新作用域,每个 BTState 子节点也会获得自己独立的作用域。", +"158": "在多个智能体之间共享数据", +"159": "黑板作用域机制也可以用来在多个智能体之间共享数据。在下面的示例中,我们有一组智能体,希望让它们共享一个共同的目标:", +"160": "在这个示例中,blackboard.top() 访问 Blackboard 链的根作用域。我们通过代码把该作用域赋给组内的每个智能体:", +"161": "总而言之,Blackboard 作用域链不仅能避免状态机、行为树与子树之间可能出现的命名冲突,还可以用来在多个智能体之间共享数据。", +"162": "调试黑板变量", +"163": "调试运行中的项目时,你可以在远程检视面板中查看 Blackboard 变量。在 LimboAI 调试器中点击某个任务以查看其属性,然后点击 Blackboard 引用,即可看到整条作用域链上的所有变量,并按作用域分组。变量可以实时编辑,以辅助调试。对于状态机,在远程场景树(Remote Scene Tree)中选中 LimboState 节点,就能以同样的方式访问它的 Blackboard。", +"164": "访问场景树中的节点", +"165": "有几种方式可以从 BTTask 中访问智能体场景树里的节点。", +"166": "🛈 注意:智能体场景树的根节点可以通过 scene_root 属性访问。", +"167": "使用 <1/> 属性", +"168": "使用 <1/> 属性", +"169": "使用黑板计划", +"170": "你可以在编辑器中创建一个黑板变量,类型为 <2/>,并让它在 BTPlayer 的黑板计划中指向合适的节点。默认情况下,当运行时实例化黑板时,任何 <4/> 变量都会被替换为对应的节点实例(见 BlackboardPlan.prefetch_nodepath_vars)。", +"171": "BTPlayer.prefetch_nodepath_vars 属性应设置为 <1/>。", +"172": "创建状态机", +"173": "本指南将展示如何使用 LimboHSM 搭建并使用状态机。", +"174": "初始化", +"175": "要使用 LimboHSM 状态机,你首先需要在代码中初始化它。这通常是在脚本的 <2/> 函数中完成。下面是一个示例:", +"176": "在这个示例中,我们首先声明状态机以及要使用的各个状态。然后在 <1/> 函数中为各状态添加转换。最后初始化状态机,并将其设为活动状态。", +"177": "状态示例", +"178": "你可以在脚本中定义状态的行为,并把该脚本挂到状态节点上。下面是一个状态示例,它会在 <1/> 上播放动画并等待动画播放完毕:", +"179": "在这个示例中,<1/> 方法会在进入该状态时被调用,并播放指定的动画。<2/> 方法每帧都会被调用,用来检查动画是否播放完毕。如果已播放完毕,它就派发 <3/> 事件,从而可能转换到下一个状态。" +} diff --git a/docs/limboai-stable/_i18n/trans/batch03.json b/docs/limboai-stable/_i18n/trans/batch03.json new file mode 100644 index 0000000..fc7f763 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch03.json @@ -0,0 +1,144 @@ +{ +"180": "事件与转换", +"181": "LimboHSM 自带一套事件系统,有助于把状态转换与状态实现解耦。一个转换与特定的事件、起始状态和目标状态相关联,当该事件被派发时,转换会自动执行。", +"182": "要注册一个转换并把它与特定事件关联,可以使用 LimboHSM.add_transition 方法:", +"183": "在这个示例中,我们注册了一个从 <1/> 到 <2/> 的转换,它在 <3/> 事件被派发时发生。", +"184": "转换也可以不与任何特定的起始状态关联:", +"185": "事件通过 LimboState.dispatch 方法派发。需要注意的是,该方法可以从状态机层级中的任何位置调用,也可以在状态机之外调用。事件会从叶状态向根状态传播。这意味着,如果某个事件被某个状态消费掉,它就不会再传播到其父状态。", +"186": "状态还可以定义事件处理器,即对特定事件做出反应的方法。这些事件处理器通常不会导致状态转换;它们只是状态对特定事件做出反应的一种机制。你可以用 LimboState.add_event_handler 方法在状态中注册事件处理器:", +"187": "如果事件处理器返回 <1/>,该事件将被视为已被消费,不会再继续传播,也不会导致状态转换。", +"188": "状态的结构", +"189": "把行为树与状态机结合使用", +"190": "BTState 是 LimboHSM 中一种特殊的状态节点,它可以承载一个行为树。当 BTState 处于活动状态时,它每帧都会执行所承载的行为树,实际上就是把该行为树当作它的实现。", +"191": "这样你就可以把行为树的强大能力与状态机的结构与控制结合起来。行为树非常适合定义复杂的层次化行为,而状态机则擅长管理不同行为之间的流转与转换。", +"192": "创建好 LimboHSM 之后,就可以为给定的 LimboHSM 创建一个 BTState:", +"193": "单文件状态机配置", +"194": "在某些情况下,例如做原型或参加 Game Jam 时,把状态机代码放在单个文件里更实用。针对这类情况,LimboHSM 支持委托(delegation),并提供链式方法以便更轻松地完成配置。下面用一个实际的代码示例来说明:", +"195": "重要类", +"196": "LimboAI 中引入了很多类。下面列出你应该了解的最重要的那些:", +"197": "BTTask", +"198": "继承:BT", +"199": "被继承:BTAction、BTComment、BTComposite、BTCondition、BTDecorator", +"200": "所有 BehaviorTree 任务的基类。", +"201": "说明", +"202": "所有 BehaviorTree 任务的基类。任务是 BehaviorTree 中的基本积木块,代表某个具体行为或控制流。通过按层次组合和嵌套任务,可以构建出复杂的行为。", +"203": "任务可以是以下类型之一:动作、条件、组合或装饰器。每种任务类型都有对应的子类:BTAction、BTCondition、BTDecorator、BTComposite。", +"204": "任务通过 _tick 方法执行工作并返回状态。状态值定义在 Status 中。任务可以用 _setup 方法初始化。另见 _enter 与 _exit。", +"205": "注意:不要直接继承 BTTask 来实现你自己的任务,而应继承上面提到的某个子类型。", +"206": "属性", +"207": "agent", +"208": "Blackboard", +"209": "blackboard", +"210": "custom_name", +"211": "elapsed_time", +"212": "scene_root", +"213": "Status", +"214": "status", +"215": "方法", +"216": "_enter() <2/>", +"217": "_exit() <2/>", +"218": "_generate_name() <2/> <3/>", +"219": "_get_configuration_warnings() <2/> <3/>", +"220": "_setup() <2/>", +"221": "_tick(delta: <2/>) <3/>", +"222": "abort()", +"223": "add_child(task: BTTask)", +"224": "add_child_at_index(task: BTTask, idx: <3/>)", +"225": "BTTask", +"226": "clone() <2/>", +"227": "BehaviorTree", +"228": "editor_get_behavior_tree()", +"229": "execute(delta: <2/>)", +"230": "get_child(idx: <2/>) <3/>", +"231": "get_child_count() <2/>", +"232": "get_child_count_excluding_comments() <2/>", +"233": "get_index() <2/>", +"234": "get_parent() <2/>", +"235": "get_root() <2/>", +"236": "get_task_name()", +"237": "has_child(task: BTTask) <3/>", +"238": "initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>)", +"239": "is_descendant_of(task: BTTask) <3/>", +"240": "is_root() <2/>", +"241": "next_sibling() <2/>", +"242": "print_tree(initial_tabs: <2/> = 0)", +"243": "remove_child(task: BTTask)", +"244": "remove_child_at_index(idx: <2/>)", +"245": "属性说明", +"246": "<1/> agent 🔗", +"247": "<1/> set_agent(value: <2/>)", +"248": "<1/> get_agent()", +"249": "agent 是 BehaviorTree 实例的上下文对象。通常它是使用 BehaviorTree 资源的 BTPlayer 节点的父节点。", +"250": "Blackboard blackboard 🔗", +"251": "Blackboard get_blackboard()", +"252": "提供对 Blackboard 的访问。黑板用于在同一 BehaviorTree 的各任务之间共享数据。", +"253": "更多信息见 Blackboard。", +"254": "<1/> custom_name = <2/> 🔗", +"255": "<1/> set_custom_name(value: <2/>)", +"256": "<1/> get_custom_name()", +"257": "用户为任务提供的名称。如果不为空,编辑器会用它来表示该任务。见 get_task_name。", +"258": "<1/> elapsed_time 🔗", +"259": "<1/> get_elapsed_time()", +"260": "自任务被“进入”以来所经过的时间。见 _enter。", +"261": "当任务不处于 <2/> 状态时返回 <1/>。", +"262": "<1/> scene_root 🔗", +"263": "<1/> get_scene_root()", +"264": "行为树所在场景的根节点(例如 BTPlayer 节点的拥有者)。可用于获取 <2/> 引用。", +"265": "示例:", +"266": "Status status 🔗", +"267": "Status get_status()", +"268": "_tick 返回的最后一次执行 Status。", +"269": "方法说明", +"270": "<1/> _enter() <2/> 🔗", +"271": "当任务被“进入”时调用,即任务在不具有 <1/> status 的情况下被执行时。", +"272": "在执行顺序上,它先于 _tick 被调用。当主要工作开始前需要做准备时使用此方法,通常是在任务需要不止一个 tick 才能完成时。另见 execute。", +"273": "<1/> _exit() <2/> 🔗", +"274": "当任务被“退出”时调用,即在 _tick 返回 <2/> 或 <3/> 状态之后。另见 execute。", +"275": "<1/> _generate_name() <2/> <3/> 🔗", +"276": "在未设置 custom_name 时,调用它来为任务生成显示名称。见 get_task_name。", +"277": "<1/> _get_configuration_warnings() <2/> <3/> 🔗", +"278": "此方法返回的字符串会作为警告消息显示在行为树编辑器中。任何重写了此方法的任务脚本都必须在文件顶部包含 <1/> 注解。", +"279": "<1/> _setup() <2/> 🔗", +"280": "在初始化阶段调用,用于初始化任务。它只会在任务第一次执行 tick 之前被调用一次。借助这个方法,你可以在任务开始执行之前为它设置所需的状态或配置。", +"281": "Status _tick(delta: <2/>) <3/> 🔗", +"282": "当任务被“tick”时调用,也就是在更新过程中由 BTPlayer 或 BTState 执行它时。", +"283": "返回定义在 Status 中的执行状态。", +"284": "注意:任务通过实现这个方法来执行其主要功能。", +"285": "<1/> abort() 🔗", +"286": "递归地重置该任务及其子任务。如果任务处于 <1/> 状态,它会被退出,并且其状态被重置为 <2/>。", +"287": "<1/> add_child(task: BTTask) 🔗", +"288": "添加一个子任务。<1/> 会被放到子任务列表的末尾。", +"289": "<1/> add_child_at_index(task: BTTask, idx: <3/>) 🔗", +"290": "添加一个子任务。<1/> 会被放到子任务列表中的 <2/> 位置。", +"291": "BTTask clone() <2/> 🔗", +"292": "复制该任务及其子任务,并复制导出的成员。出于效率考虑,子资源是共享的,但 BBParam 的子类型例外,它们总是会被复制。编辑器用它来实例化 BehaviorTree,以及复制粘贴任务。", +"293": "BehaviorTree editor_get_behavior_tree() 🔗", +"294": "返回拥有此任务的行为树。仅在编辑器中可用。", +"295": "Status execute(delta: <2/>) 🔗", +"296": "执行该任务。执行遵循特定的顺序:", +"297": "如果任务当前的 status 不是 <2/>,会先调用 _enter 方法。", +"298": "接着调用 _tick 方法来执行任务的工作。", +"299": "如果 _tick 方法返回 <2/> 或 <3/> 状态,接下来会调用 _exit 方法,作为执行清理的一部分。", +"300": "BTTask get_child(idx: <2/>) <3/> 🔗", +"301": "通过指定索引返回一个子任务。", +"302": "<1/> get_child_count() <2/> 🔗", +"303": "返回子任务的数量。", +"304": "<1/> get_child_count_excluding_comments() <2/> 🔗", +"305": "返回子任务的数量,不把 BTComment 任务计算在内。", +"306": "<1/> get_index() <2/> 🔗", +"307": "返回该任务在行为树分支中的位置。如果该任务不属于任务树(也就是没有父任务),则返回 <1/>。", +"308": "BTTask get_parent() <2/> 🔗", +"309": "返回该任务的父任务。", +"310": "BTTask get_root() <2/> 🔗", +"311": "返回行为树的根任务。", +"312": "<1/> get_task_name() 🔗", +"313": "此方法返回的字符串用于在编辑器中表示该任务。", +"314": "除非设置了 custom_name,否则会调用 _generate_name 方法为任务生成显示名称。", +"315": "<1/> has_child(task: BTTask) <3/> 🔗", +"316": "如果 <2/> 是此任务的子任务,则返回 <1/>。", +"317": "<1/> initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>) 🔗", +"318": "初始化该任务。为它赋值 agent 和 blackboard,并对该任务及其子任务调用 _setup。", +"319": "该方法会对每个子任务递归调用。<1/> 应当是行为树所在场景的根节点(例如包含该行为树的节点的拥有者)。", +"320": "<1/> is_descendant_of(task: BTTask) <3/> 🔗", +"321": "如果此任务是 <2/> 的后代,则返回 <1/>。换句话说,此任务必须是 <3/> 的子任务,或者是它的子任务、孙任务之一。" +} diff --git a/docs/limboai-stable/_i18n/trans/batch04.json b/docs/limboai-stable/_i18n/trans/batch04.json new file mode 100644 index 0000000..a5cfdcc --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch04.json @@ -0,0 +1,140 @@ +{ +"322": "<1/> is_root() <2/> 🔗", +"323": "如果此任务是其行为树的根任务,则返回 <1/>。一棵行为树只能有一个根任务。", +"324": "BTTask next_sibling() <2/> 🔗", +"325": "返回父任务子任务列表中紧接在此任务之后的任务。", +"326": "如果此任务没有父任务,或者它是父任务子任务列表中的最后一个子任务,则返回 <1/>。", +"327": "<1/> print_tree(initial_tabs: <2/> = 0) 🔗", +"328": "把以此任务为起点的子树打印到控制台。", +"329": "<1/> remove_child(task: BTTask) 🔗", +"330": "从子任务中移除 <1/>。", +"331": "<1/> remove_child_at_index(idx: <2/>) 🔗", +"332": "从子任务中移除指定索引处的子任务。", +"333": "BTPlayer", +"334": "继承:", +"335": "BehaviorTree 资源的播放器。", +"336": "BTPlayer 节点用于在运行时实例化和播放 BehaviorTree 资源。初始化期间,行为树实例会获得对智能体、blackboard 以及当前场景根节点的引用。智能体可以通过 agent_node 属性指定(默认是 BTPlayer 的父节点)。", +"337": "行为树的入门介绍见 BehaviorTree。", +"338": "active", +"339": "agent_node", +"340": "behavior_tree", +"341": "blackboard", +"342": "BlackboardPlan", +"343": "blackboard_plan", +"344": "monitor_performance", +"345": "UpdateMode", +"346": "update_mode", +"347": "BTInstance", +"348": "get_bt_instance()", +"349": "restart()", +"350": "set_bt_instance(bt_instance: BTInstance)", +"351": "set_scene_root_hint(scene_root: <2/>)", +"352": "update(delta: <2/>)", +"353": "信号", +"354": "behavior_tree_finished(status: <1/>) 🔗", +"355": "已废弃:请改用 updated 信号。", +"356": "当行为树执行完毕并返回 <1/> 或 <2/> 时发出。", +"357": "参数 <1/> 保存行为树返回的状态。见 Status。", +"358": "updated(status: <1/>) 🔗", +"359": "当 BTPlayer 完成行为树更新时发出。", +"360": "枚举", +"361": "enum UpdateMode: 🔗", +"362": "UpdateMode IDLE = <2/>", +"363": "在空闲(idle)处理期间执行行为树。", +"364": "UpdateMode PHYSICS = <2/>", +"365": "在物理(physics)处理期间执行行为树。", +"366": "UpdateMode MANUAL = <2/>", +"367": "通过调用 update 手动执行行为树。", +"368": "<1/> active = <2/> 🔗", +"369": "<1/> set_active(value: <2/>)", +"370": "<1/> get_active()", +"371": "如果为 <1/>,行为树将在更新期间被执行。", +"372": "<1/> agent_node = <2/> 🔗", +"373": "<1/> set_agent_node(value: <2/>)", +"374": "<1/> get_agent_node()", +"375": "用作智能体的节点路径。在实例化之后再设置它不会生效。", +"376": "BehaviorTree behavior_tree 🔗", +"377": "<1/> set_behavior_tree(value: BehaviorTree)", +"378": "BehaviorTree get_behavior_tree()", +"379": "要在运行时实例化并执行的 BehaviorTree 资源。", +"380": "Blackboard blackboard 🔗", +"381": "<1/> set_blackboard(value: Blackboard)", +"382": "保存行为树各任务共享的数据。见 Blackboard。", +"383": "BlackboardPlan blackboard_plan 🔗", +"384": "<1/> set_blackboard_plan(value: BlackboardPlan)", +"385": "BlackboardPlan get_blackboard_plan()", +"386": "存储并管理用于构建新的 Blackboard 实例的变量。", +"387": "<1/> monitor_performance = <2/> 🔗", +"388": "<1/> set_monitor_performance(value: <2/>)", +"389": "<1/> get_monitor_performance()", +"390": "如果为 <1/>,会为此 BTPlayer 节点的每个实例在 “Debugger->Monitors” 中添加一个性能监视器。", +"391": "UpdateMode update_mode = <2/> 🔗", +"392": "<1/> set_update_mode(value: UpdateMode)", +"393": "UpdateMode get_update_mode()", +"394": "决定行为树何时执行。见 UpdateMode。", +"395": "BTInstance get_bt_instance() 🔗", +"396": "返回行为树实例。", +"397": "<1/> restart() 🔗", +"398": "重置行为树的执行。所有正在运行的任务都会被中止,下一次树执行会从头开始。此方法不会重置 Blackboard。", +"399": "<1/> set_bt_instance(bt_instance: BTInstance) 🔗", +"400": "设置要播放的 BTInstance。当你想在运行时切换到另一个行为树实例时,这个方法很有用。另见 BehaviorTree.instantiate。", +"401": "<1/> set_scene_root_hint(scene_root: <2/>) 🔗", +"402": "设置新实例化的行为树要使用的场景根节点 <1/>。应当在 BTPlayer 被加入场景树之前调用(即 <2/> 之前)。当你需要用代码动态创建 BTPlayer 节点时,这通常很有用。", +"403": "<1/> update(delta: <2/>) 🔗", +"404": "如果 active 为 <2/>,则执行行为树实例的根任务。当 update_mode 设为 MANUAL 时调用此方法。当 update_mode 不是 MANUAL 时,会自动调用 update。见 UpdateMode。", +"405": "Blackboard", +"406": "用于在 LimboHSM 状态与 BehaviorTree 任务之间共享数据的键值存储。", +"407": "Blackboard 是 LimboHSM 系统中的状态与 BehaviorTree 中的任务之间存储和共享数据的地方。BehaviorTree 中的每个状态和任务都能访问这个 Blackboard,从而可以读取和写入数据。这让不同动作与行为之间共享信息变得非常简单。", +"408": "Blackboard 也可以充当另一个 Blackboard 的父作用域。如果在当前作用域中找不到某个变量,它就会到父级 Blackboard 中查找。父级 Blackboard 本身也可以拥有自己的父作用域,从而形成我们所说的“黑板作用域链”。重要的是,这条链中 Blackboard 的数量没有上限,而且 Blackboard 不会修改父作用域中的值。", +"409": "可以用 BTNewScope 和 BTSubtree 装饰器创建新作用域。此外,对于任何定义了非空 Blackboard 数据的 LimboState,或任何根层级的 LimboHSM 节点,都会自动创建一个新作用域。", +"410": "bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false)", +"411": "clear()", +"412": "erase_var(var_name: <2/>)", +"413": "Blackboard", +"414": "get_parent() <2/>", +"415": "get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/>", +"416": "get_vars_as_dict() <2/>", +"417": "has_var(var_name: <2/>) <3/>", +"418": "link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false)", +"419": "Array[<1/>]", +"420": "list_vars() <2/>", +"421": "populate_from_dict(dictionary: <2/>)", +"422": "print_state() <2/>", +"423": "set_parent(blackboard: Blackboard)", +"424": "set_var(var_name: <2/>, value: <3/>)", +"425": "top() <2/>", +"426": "unbind_var(var_name: <2/>)", +"427": "<1/> bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false) 🔗", +"428": "在变量与由 <1/> 和 <2/> 指定的对象属性之间建立绑定。变量发生变化会更新该属性,反之亦然。如果 <3/> 为 <4/>,则变量不存在时会被创建。", +"429": "<1/> clear() 🔗", +"430": "从 Blackboard 中移除所有变量。父作用域不受影响。", +"431": "<1/> erase_var(var_name: <2/>) 🔗", +"432": "按名称移除一个变量。", +"433": "Blackboard get_parent() <2/> 🔗", +"434": "返回作为此实例父作用域的 Blackboard。", +"435": "<1/> get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/> 🔗", +"436": "返回变量值;如果变量不存在则返回 <1/>。如果 <2/> 为 <3/>,变量不存在时会打印错误。如果该变量在当前 Blackboard 作用域中不存在,它会在父作用域 Blackboard 中查找。", +"437": "<1/> get_vars_as_dict() <2/> 🔗", +"438": "以字典形式返回 Blackboard 中的所有变量。键是变量名,值是变量值。不包含父作用域。", +"439": "<1/> has_var(var_name: <2/>) <3/> 🔗", +"440": "如果 Blackboard 包含 <2/> 变量(含父作用域),则返回 <1/>。", +"441": "<1/> link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false) 🔗", +"442": "把一个变量链接到另一个 Blackboard 变量。如果一个变量被链接到另一个变量,它们的状态将始终一致,任何一方发生变化都会反映到另一方。如果 <1/> 为 <2/>,则变量不存在时会被创建。", +"443": "你可以用这个方法把当前作用域中的变量链接到另一个作用域或另一个 Blackboard 实例中的变量。一个变量只能链接到另一个变量。再次调用此方法会覆盖之前的链接。不过,同一个变量可以被多个不同的变量链接。", +"444": "Array[<1/>] list_vars() <2/> 🔗", +"445": "返回 Blackboard 中所有变量的名称。不包含父作用域。", +"446": "<1/> populate_from_dict(dictionary: <2/>) 🔗", +"447": "用字典中的多个变量填充 Blackboard。字典的键必须是变量名,字典的值必须是变量值。键必须是 StringName 或 String。", +"448": "<1/> print_state() <2/> 🔗", +"449": "打印每个作用域中所有变量的值。", +"450": "<1/> set_parent(blackboard: Blackboard) 🔗", +"451": "赋值父作用域。如果某个值不在当前 Blackboard 作用域中,它会在父作用域 Blackboard 中查找。", +"452": "<1/> set_var(var_name: <2/>, value: <3/>) 🔗", +"453": "为当前 Blackboard 作用域中的变量赋值。如果变量不存在,它会被创建。如果该变量已存在于父作用域中,父作用域的值不会被修改。", +"454": "Blackboard top() <2/> 🔗", +"455": "返回作用域链中最顶层的 Blackboard。", +"456": "<1/> unbind_var(var_name: <2/>) 🔗", +"457": "移除变量的绑定。", +"458": "BBParam", +"459": "被继承:BBAabb、BBArray、BBBasis、BBBool、BBByteArray、BBColor、BBColorArray、BBDictionary、BBFloat、BBFloat32Array、BBFloat64Array、BBInt、BBInt32Array、BBInt64Array、BBNode、BBPlane、BBProjection、BBQuaternion、BBRect2、BBRect2i、BBString、BBStringArray、BBStringName、BBTransform2D、BBTransform3D、BBVariant、BBVector2、BBVector2Array、BBVector2i、BBVector3、BBVector3Array、BBVector3i、BBVector4、BBVector4i" +} diff --git a/docs/limboai-stable/_i18n/trans/batch05.json b/docs/limboai-stable/_i18n/trans/batch05.json new file mode 100644 index 0000000..37daf30 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch05.json @@ -0,0 +1,165 @@ +{ +"460": "LimboAI 类型化参数的基类。", +"461": "LimboAI 类型化参数的基类,既可以引用 Blackboard 变量,也可以直接保存某个 Variant.Type 类型的原始值。", +"462": "注意:不要直接实例化,请改用具体的子类型。", +"463": "saved_value", +"464": "ValueSource", +"465": "value_source", +"466": "variable", +"467": "Variant.Type", +"468": "get_type() <2/>", +"469": "get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null)", +"470": "enum ValueSource: 🔗", +"471": "ValueSource SAVED_VALUE = <2/>", +"472": "值直接存储在 BBParam 资源中。", +"473": "ValueSource BLACKBOARD_VAR = <2/>", +"474": "值通过变量名引用,并从 Blackboard 中获取。变量名存储在 BBParam 资源中。", +"475": "<1/> saved_value = <2/> 🔗", +"476": "<1/> set_saved_value(value: <2/>)", +"477": "<1/> get_saved_value()", +"478": "当 value_source 设为 SAVED_VALUE 时,用于存储参数值。值的类型由 get_type 决定。", +"479": "ValueSource value_source = <2/> 🔗", +"480": "<1/> set_value_source(value: ValueSource)", +"481": "ValueSource get_value_source()", +"482": "指定 BBParam 取值的来源。见 ValueSource。", +"483": "<1/> variable 🔗", +"484": "<1/> set_variable(value: <2/>)", +"485": "<1/> get_variable()", +"486": "当 value_source 设为 BLACKBOARD_VAR 时,存储 Blackboard 变量的名称。", +"487": "Variant.Type get_type() <1/> 🔗", +"488": "返回该参数预期的数据类型。", +"489": "<1/> get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null) 🔗", +"490": "返回该参数的值。", +"491": "LimboState", +"492": "被继承:BTState、LimboHSM", +"493": "用于分层状态机(HSM)的状态节点。", +"494": "LimboAI 中用于分层状态机(HSM)的状态节点。", +"495": "你可以通过继承这个类来编写自己的状态行为。要实现状态逻辑,可以重写 _enter、_exit、_setup 和 _update。或者,你也可以用 <5/> 方法把状态实现委托给外部方法。", +"496": "关于状态机的更多细节,请参阅 LimboHSM。", +"497": "EVENT_FINISHED", +"498": "agent", +"499": "blackboard", +"500": "blackboard_plan", +"501": "_enter() <2/>", +"502": "_exit() <2/>", +"503": "_setup() <2/>", +"504": "_update(delta: <2/>) <3/>", +"505": "add_event_handler(event: <2/>, handler: <3/>)", +"506": "LimboState", +"507": "call_on_enter(callable: <2/>)", +"508": "call_on_exit(callable: <2/>)", +"509": "call_on_update(callable: <2/>)", +"510": "clear_guard()", +"511": "dispatch(event: <2/>, cargo: <3/> = null)", +"512": "get_root() <2/>", +"513": "is_active() <2/>", +"514": "named(name: <2/>)", +"515": "set_guard(guard_callable: <2/>)", +"516": "entered() 🔗", +"517": "当状态被进入时发出。", +"518": "exited() 🔗", +"519": "当状态被退出时发出。", +"520": "setup() 🔗", +"521": "当状态被初始化时发出。", +"522": "updated(delta: <1/>) 🔗", +"523": "当状态被更新时发出。", +"524": "<1/> EVENT_FINISHED 🔗", +"525": "<1/> event_finished()", +"526": "一个常用事件,表示状态已经完成其工作。", +"527": "<1/> agent 🔗", +"528": "与该状态关联的智能体,在初始化时赋值。", +"529": "Blackboard blackboard 🔗", +"530": "该状态所属状态机中各状态共享的键值数据存储。", +"531": "BlackboardPlan blackboard_plan 🔗", +"532": "<1/> _enter() <2/> 🔗", +"533": "当状态被进入时调用。", +"534": "<1/> _exit() <2/> 🔗", +"535": "当状态被退出时调用。这会在转换到另一个状态时发生,也会在状态机从场景树中被移除时发生(例如节点被 Node.queue_free 释放或场景切换)。由于实现细节,_exit 不会在调用 Object.free 时被执行!", +"536": "<1/> _setup() <2/> 🔗", +"537": "在初始化期间被调用一次。用这个方法初始化你的状态。", +"538": "<1/> _update(delta: <2/>) <3/> 🔗", +"539": "在更新期间调用。用这个方法实现你状态的行为。", +"540": "<1/> add_event_handler(event: <2/>, handler: <3/>) 🔗", +"541": "注册一个 <1/>,在 <2/> 被派发时调用。处理函数应具有以下签名:", +"542": "如果处理函数返回 <1/>,事件将被消费。Cargo 是可选参数,可以传给处理函数。另见 dispatch。", +"543": "LimboState call_on_enter(callable: <2/>) 🔗", +"544": "链式方法,把 entered 信号连接到一个 <2/>。", +"545": "LimboState call_on_exit(callable: <2/>) 🔗", +"546": "链式方法,把 exited 信号连接到一个 <2/>。", +"547": "LimboState call_on_update(callable: <2/>) 🔗", +"548": "链式方法,把 updated 信号连接到一个 <2/>。", +"549": "<1/> clear_guard() 🔗", +"550": "清除守卫函数,移除之前由 set_guard 设置的 <1/>。", +"551": "<1/> dispatch(event: <2/>, cargo: <3/> = null) 🔗", +"552": "递归派发一个名为 <1/> 的状态机事件,可选参数为 <2/>。如果事件被消费则返回 <3/>。", +"553": "事件会从叶状态向根状态传播,一旦某个状态消费了该事件,传播就会停止。如果状态有相关的转换或事件处理器,它就会消费该事件。关于事件处理器的更多信息,见 add_event_handler。", +"554": "LimboState get_root() <2/> 🔗", +"555": "返回根 LimboState。", +"556": "<1/> is_active() <2/> 🔗", +"557": "如果当前处于活动状态(即它是父级 LimboHSM 的活动子状态),则返回 <1/>。", +"558": "LimboState named(name: <2/>) 🔗", +"559": "用于设置此状态名称的链式方法。", +"560": "<1/> set_guard(guard_callable: <2/>) 🔗", +"561": "设置守卫(guard)函数,每当考虑转换到该状态时都会调用它。如果该函数返回 <1/>,该转换将被禁止。", +"562": "LimboHSM", +"563": "继承:LimboState", +"564": "基于事件的分层状态机(HSM)。", +"565": "基于事件的分层状态机(HSM),用于管理 LimboState 实例并处理它们之间的转换。LimboHSM 本身就是一个 LimboState,也可以作为另一个 LimboHSM 节点的子节点。", +"566": "LimboState", +"567": "ANYSTATE", +"568": "initial_state", +"569": "UpdateMode", +"570": "update_mode", +"571": "add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable())", +"572": "change_active_state(state: LimboState)", +"573": "get_active_state() <2/>", +"574": "get_leaf_state() <2/>", +"575": "get_previous_active_state() <2/>", +"576": "has_transition(from_state: LimboState, event: <3/>) <4/>", +"577": "initialize(agent: <2/>, parent_scope: Blackboard = null)", +"578": "remove_transition(from_state: LimboState, event: <3/>)", +"579": "set_active(active: <2/>)", +"580": "update(delta: <2/>)", +"581": "active_state_changed(current: LimboState, previous: LimboState) 🔗", +"582": "当当前活动的子状态切换到另一个子状态时发出。", +"583": "enum UpdateMode: 🔗", +"584": "UpdateMode IDLE = <2/>", +"585": "在空闲处理期间更新状态机。", +"586": "UpdateMode PHYSICS = <2/>", +"587": "在物理处理期间更新状态机。", +"588": "UpdateMode MANUAL = <2/>", +"589": "通过在脚本中调用 update 来手动更新状态机。", +"590": "LimboState ANYSTATE 🔗", +"591": "LimboState anystate()", +"592": "用于定义“从任意状态出发”的转换。", +"593": "LimboState initial_state 🔗", +"594": "<1/> set_initial_state(value: LimboState)", +"595": "LimboState get_initial_state()", +"596": "使用 set_active 方法激活状态机时会变为活动的子状态。如果没有显式设置,LimboHSM 的第一个子节点将被视为初始状态。", +"597": "UpdateMode update_mode = <2/> 🔗", +"598": "<1/> set_update_mode(value: UpdateMode)", +"599": "UpdateMode get_update_mode()", +"600": "指定状态机应在何时更新。见 UpdateMode。", +"601": "<1/> add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable()) 🔗", +"602": "建立从一个状态到另一个状态的转换,在 <1/> 被派发时触发。<2/> 和 <3/> 都必须是此 LimboHSM 的直接子节点。", +"603": "可选地,可以指定一个 <1/> 函数,它必须返回布尔值。如果守卫函数返回 <2/>,则不会发生转换。守卫函数会在考虑该转换之前立即被调用。关于状态级别的守卫函数,请查看 LimboState.set_guard。", +"604": "<1/> change_active_state(state: LimboState) 🔗", +"605": "把当前活动的子状态切换为 <1/>。如果 <2/> 已经处于活动状态,它会被退出并重新进入。", +"606": "<1/> 必须是此 LimboHSM 的子节点。", +"607": "LimboState get_active_state() <2/> 🔗", +"608": "返回当前活动的子状态。", +"609": "LimboState get_leaf_state() <2/> 🔗", +"610": "返回状态机中当前活动的叶状态。", +"611": "LimboState get_previous_active_state() <2/> 🔗", +"612": "返回上一个活动的子状态。", +"613": "<1/> has_transition(from_state: LimboState, event: <3/>) <4/> 🔗", +"614": "如果存在从 <2/> 出发、针对给定 <3/> 的转换,则返回 <1/>。", +"615": "<1/> initialize(agent: <2/>, parent_scope: Blackboard = null) 🔗", +"616": "初始化该状态,并为它自身及所有子状态调用 LimboState._setup。", +"617": "<1/> remove_transition(from_state: LimboState, event: <3/>) 🔗", +"618": "移除某个状态上与特定 <1/> 关联的转换。", +"619": "<1/> set_active(active: <2/>) 🔗", +"620": "设为 <1/> 时,会把状态切换到 initial_state,并根据 update_mode 激活状态处理。", +"621": "<1/> update(delta: <2/>) 🔗", +"622": "对它自身和活动子状态调用 LimboState._update,调用会逐级向下传递到叶状态。如果 update_mode 未设为 MANUAL,此方法会自动触发。" +} diff --git a/docs/limboai-stable/_i18n/trans/batch06.json b/docs/limboai-stable/_i18n/trans/batch06.json new file mode 100644 index 0000000..03ead12 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch06.json @@ -0,0 +1,158 @@ +{ +"623": "BTState", +"624": "用于 LimboHSM、承载 BehaviorTree 的状态节点。", +"625": "BTState 是一种 LimboState 节点,它通过管理 BehaviorTree 来为该状态提供行为逻辑。它会实例化并运行 BehaviorTree 资源,并在 <4/> 或 <5/> 时派发状态机事件。事件名称可以通过 success_event 和 failure_event 自定义。关于状态机事件的更多细节,见 LimboState.dispatch。", +"626": "behavior_tree", +"627": "failure_event", +"628": "monitor_performance", +"629": "success_event", +"630": "get_bt_instance() <2/>", +"631": "set_scene_root_hint(scene_root: <2/>)", +"632": "BehaviorTree behavior_tree 🔗", +"633": "定义状态行为的 BehaviorTree 资源。", +"634": "<1/> failure_event = <2/> 🔗", +"635": "<1/> set_failure_event(value: <2/>)", +"636": "<1/> get_failure_event()", +"637": "当行为树结果为 <1/> 时将被派发的 HSM 事件。见 LimboState.dispatch。", +"638": "<1/> monitor_performance = <2/> 🔗", +"639": "如果为 <1/>,会为此 BTState 节点的每个实例在 “Debugger->Monitors” 中添加一个性能监视器。", +"640": "<1/> success_event = <2/> 🔗", +"641": "<1/> set_success_event(value: <2/>)", +"642": "<1/> get_success_event()", +"643": "当行为树结果为 <1/> 时将被派发的 HSM 事件。见 LimboState.dispatch。", +"644": "BTInstance get_bt_instance() <2/> 🔗", +"645": "<1/> set_scene_root_hint(scene_root: <2/>) 🔗", +"646": "设置新实例化的行为树要使用的场景根节点 <1/>。应当在状态机初始化之前调用。当你需要用代码动态创建 BTState 节点时,这通常很有用。", +"647": "完整的类参考可以在侧边栏中找到。", +"648": "BBAabb", +"649": "继承:BBParam", +"650": "用于 BehaviorTree 任务的 AABB 类型参数。见 BBParam。", +"651": "BBArray", +"652": "用于 BehaviorTree 任务的 Array 类型参数。见 BBParam。", +"653": "BBBasis", +"654": "用于 BehaviorTree 任务的 Basis 类型参数。见 BBParam。", +"655": "BBBool", +"656": "用于 BehaviorTree 任务的 Bool 类型参数。见 BBParam。", +"657": "BBByteArray", +"658": "用于 BehaviorTree 任务的 ByteArray 类型参数。见 BBParam。", +"659": "BBColor", +"660": "用于 BehaviorTree 任务的 Color 类型参数。见 BBParam。", +"661": "BBColorArray", +"662": "用于 BehaviorTree 任务的 ColorArray 类型参数。见 BBParam。", +"663": "BBDictionary", +"664": "用于 BehaviorTree 任务的 Dictionary 类型参数。见 BBParam。", +"665": "BBFloat", +"666": "用于 BehaviorTree 任务的 Float 类型参数。见 BBParam。", +"667": "BBFloat32Array", +"668": "用于 BehaviorTree 任务的 PackedFloat32Array 类型参数。见 BBParam。", +"669": "BBFloat64Array", +"670": "用于 BehaviorTree 任务的 PackedFloat64Array 类型参数。见 BBParam。", +"671": "BBInt", +"672": "用于 BehaviorTree 任务的 Integer 类型参数。见 BBParam。", +"673": "BBInt32Array", +"674": "用于 BehaviorTree 任务的 PackedInt32Array 类型参数。见 BBParam。", +"675": "BBInt64Array", +"676": "用于 BehaviorTree 任务的 PackedInt64Array 类型参数。见 BBParam。", +"677": "BBNode", +"678": "用于 BehaviorTree 任务的 Node 类型参数。见 BBParam。", +"679": "面向 BehaviorTree 任务使用的 Node 类型参数。见 BBParam。", +"680": "如果来源是黑板变量,则允许任何继承自 <1/> 的类型。", +"681": "BBPlane", +"682": "用于 BehaviorTree 任务的 Plane 类型参数。见 BBParam。", +"683": "BBProjection", +"684": "用于 BehaviorTree 任务的 Projection 类型参数。见 BBParam。", +"685": "BBQuaternion", +"686": "用于 BehaviorTree 任务的 Quaternion 类型参数。见 BBParam。", +"687": "BBRect2", +"688": "用于 BehaviorTree 任务的 Rect2 类型参数。见 BBParam。", +"689": "BBRect2i", +"690": "用于 BehaviorTree 任务的 Rect2i 类型参数。见 BBParam。", +"691": "BBString", +"692": "用于 BehaviorTree 任务的 String 类型参数。见 BBParam。", +"693": "BBStringArray", +"694": "用于 BehaviorTree 任务的 StringArray 类型参数。见 BBParam。", +"695": "BBStringName", +"696": "用于 BehaviorTree 任务的 StringName 类型参数。见 BBParam。", +"697": "BBTransform2D", +"698": "用于 BehaviorTree 任务的 Transform2D 类型参数。见 BBParam。", +"699": "BBTransform3D", +"700": "用于 BehaviorTree 任务的 Transform3D 类型参数。见 BBParam。", +"701": "BBVariant", +"702": "用于 BehaviorTree 任务的 Variant 类型参数。见 BBParam。", +"703": "面向 BehaviorTree 任务使用的 Variant 类型参数。见 BBParam。", +"704": "数据类型由 type 指定。", +"705": "type", +"706": "Variant.Type type = <1/> 🔗", +"707": "<1/> set_type(value: Variant.Type)", +"708": "Variant.Type get_type()", +"709": "为该参数值指定的 Variant.Type。", +"710": "BBVector2", +"711": "用于 BehaviorTree 任务的 Vector2 类型参数。见 BBParam。", +"712": "BBVector2Array", +"713": "用于 BehaviorTree 任务的 Vector2Array 类型参数。见 BBParam。", +"714": "BBVector2i", +"715": "用于 BehaviorTree 任务的 Vector2i 类型参数。见 BBParam。", +"716": "BBVector3", +"717": "用于 BehaviorTree 任务的 Vector3 类型参数。见 BBParam。", +"718": "BBVector3Array", +"719": "用于 BehaviorTree 任务的 Vector3Array 类型参数。见 BBParam。", +"720": "BBVector3i", +"721": "用于 BehaviorTree 任务的 Vector3i 类型参数。见 BBParam。", +"722": "BBVector4", +"723": "用于 BehaviorTree 任务的 Vector4 类型参数。见 BBParam。", +"724": "BBVector4i", +"725": "用于 BehaviorTree 任务的 Vector4i 类型参数。见 BBParam。", +"726": "BehaviorTree", +"727": "包含行为树数据。", +"728": "行为树是一种层次结构,用于建模和控制游戏中智能体(例如角色、敌人、实体)的行为。它旨在让你更轻松地为游戏创建复杂且高度模块化的行为。", +"729": "行为树由若干任务组成,这些任务代表具体的动作或决策规则。任务大致可分为两大类:控制任务和叶任务。控制任务决定树内的执行流程,包括 BTSequence、BTSelector 和 BTInvert。叶任务代表要执行的具体动作(例如移动或攻击),或是需要检查的条件。BTTask 类为行为树的各种积木块提供了基础。BT 任务可以借助 Blackboard 共享数据。见 BTTask.blackboard 和 Blackboard。", +"730": "注意:要创建你自己的动作,请继承 BTAction 类。", +"731": "BehaviorTree 从根任务开始执行,遵循控制任务规定的规则,一路向下直到叶任务 —— 叶任务代表智能体应当执行的实际动作,或应当检查的条件。每个任务在执行时都会返回一个状态,可能是 <1/>、<2/> 或 <3/>。这些状态决定树的推进方式,它们定义在 Status 中。", +"732": "行为树通过条件任务处理条件逻辑。这些任务检查特定条件,并根据智能体或其环境的状态返回 <1/> 或 <2/>(例如 “IsLowOnHealth”、“IsTargetInSight”)。条件可以与 BTSequence 和 BTSelector 搭配使用,构建你的决策逻辑。", +"733": "注意:要创建你自己的条件,请继承 BTCondition 类。", +"734": "请查阅 BTTask 类,它为行为树的各种积木块提供了基础。", +"735": "blackboard_plan", +"736": "description", +"737": "BehaviorTree", +"738": "clone() <2/>", +"739": "copy_other(other: BehaviorTree)", +"740": "BTTask", +"741": "get_root_task() <2/>", +"742": "instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/>", +"743": "set_root_task(task: BTTask)", +"744": "plan_changed() 🔗", +"745": "当 BlackboardPlan 发生变化时发出。", +"746": "BlackboardPlan blackboard_plan 🔗", +"747": "<1/> description = <2/> 🔗", +"748": "<1/> set_description(value: <2/>)", +"749": "<1/> get_description()", +"750": "用户为 BehaviorTree 提供的描述。", +"751": "BehaviorTree clone() <2/> 🔗", +"752": "复制一份 BehaviorTree 资源。", +"753": "<1/> copy_other(other: BehaviorTree) 🔗", +"754": "变成另一棵行为树的副本。", +"755": "BTTask get_root_task() <2/> 🔗", +"756": "返回 BehaviorTree 资源的根任务。", +"757": "BTInstance instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/> 🔗", +"758": "实例化行为树并返回 BTInstance。<2/> 应当是拥有该行为树实例的场景节点,通常是 BTPlayer、BTState,或是负责控制行为树执行的自定义播放器节点。请确保传入的 Blackboard 已从 blackboard_plan 填充了值。另见 BlackboardPlan.populate_blackboard 与 BlackboardPlan.create_blackboard。", +"759": "如果 <1/> 不是 <2/>,它将被用作新实例化的行为树的场景根节点;否则场景根节点会被设为 <3/>。场景根节点对于 BBNode 实例正常工作至关重要。", +"760": "<1/> set_root_task(task: BTTask) 🔗", +"761": "为 BehaviorTree 资源指定一个新的根任务。", +"762": "BehaviorTreeData", +"763": "表示 BehaviorTree 实例的当前状态。", +"764": "该类被 LimboAI 调试器用于 BehaviorTree 实例数据的序列化与反序列化。", +"765": "此外,它还可以配合 BehaviorTreeView 可视化 BehaviorTree 实例的当前状态。它的设计用途是在自定义的运行时工具中使用。", +"766": "BehaviorTreeData", +"767": "create_from_bt_instance(bt_instance: BTInstance) <3/>", +"768": "BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) <3/> 🔗", +"769": "返回编码为 BehaviorTreeData 的 <1/> 当前状态,适合与 BehaviorTreeView 一起使用。", +"770": "行为树实例可以通过 BTPlayer.get_bt_instance 获取。", +"771": "BehaviorTreeView", +"772": "可视化 BehaviorTree 实例的当前状态。", +"773": "可视化 BehaviorTree 实例的当前状态。另见 BehaviorTreeData。", +"774": "update_interval_msec", +"775": "clear()", +"776": "update_tree(behavior_tree_data: BehaviorTreeData)", +"777": "task_selected(type_name: <1/>, script_path: <2/>) 🔗", +"778": "在 BehaviorTreeView 中选中某个任务项时发出。" +} diff --git a/docs/limboai-stable/_i18n/trans/batch07.json b/docs/limboai-stable/_i18n/trans/batch07.json new file mode 100644 index 0000000..e281f99 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch07.json @@ -0,0 +1,166 @@ +{ +"779": "<1/> update_interval_msec = <2/> 🔗", +"780": "<1/> set_update_interval_msec(value: <2/>)", +"781": "<1/> get_update_interval_msec()", +"782": "两次更新之间的最小延迟(毫秒)。设为更大的值可以降低 CPU 负载。", +"783": "<1/> clear() 🔗", +"784": "清除树视图。", +"785": "<1/> update_tree(behavior_tree_data: BehaviorTreeData) 🔗", +"786": "更新 BehaviorTree 实例的显示。另见 BehaviorTreeData。", +"787": "BlackboardPlan", +"788": "prefetch_nodepath_vars", +"789": "create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null)", +"790": "BlackboardPlan", +"791": "get_base_plan() <2/>", +"792": "get_parent_scope_plan_provider() <2/>", +"793": "is_derived() <2/>", +"794": "populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null)", +"795": "set_base_plan(blackboard_plan: BlackboardPlan)", +"796": "set_parent_scope_plan_provider(callable: <2/>)", +"797": "sync_with_base_plan()", +"798": "<1/> prefetch_nodepath_vars = <2/> 🔗", +"799": "<1/> set_prefetch_nodepath_vars(value: <2/>)", +"800": "<1/> is_prefetching_nodepath_vars()", +"801": "启用或禁用 <1/> 变量预取。如果为 <2/>,在创建 Blackboard 时,<3/> 值会被替换为对应的节点实例。", +"802": "Blackboard create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null) 🔗", +"803": "使用该计划构建一个新的 Blackboard 实例。如果启用了 <2/> 预取,将用 <3/> 为 <4/> 变量获取节点实例并替换其值。", +"804": "BlackboardPlan get_base_plan() <2/> 🔗", +"805": "返回基础计划。见 is_derived。", +"806": "<1/> get_parent_scope_plan_provider() <2/> 🔗", +"807": "返回父作用域计划提供者 —— 一个返回 BlackboardPlan 的可调用对象。", +"808": "<1/> is_derived() <2/> 🔗", +"809": "如果此计划派生自另一个计划(即基础计划不为 <2/>),则返回 <1/>。派生计划只能包含基础计划中已有的变量,并且只有变量值可以不同。", +"810": "<1/> populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null) 🔗", +"811": "用该计划中的变量填充 <1/>。如果 <2/> 为 <3/>,同名变量将被覆盖。如果启用了 <4/> 预取,将用 <5/> 为 <6/> 变量获取节点实例并替换其值。", +"812": "<1/> set_base_plan(blackboard_plan: BlackboardPlan) 🔗", +"813": "设置基础计划。一旦指定,该计划将从基础计划派生。", +"814": "请谨慎使用,它会移除基础计划中不存在的变量。仅用于自定义工具开发。", +"815": "<1/> set_parent_scope_plan_provider(callable: <2/>) 🔗", +"816": "设置父作用域计划提供者 —— 一个返回 BlackboardPlan 的可调用对象。用于在检视面板中提供提示。设置之后即可使用映射功能。", +"817": "<1/> sync_with_base_plan() 🔗", +"818": "将此计划与基础计划同步:移除基础计划中不存在的变量,并更新类型信息。仅用于自定义工具开发。", +"819": "BT", +"820": "被继承:BTTask", +"821": "BTTask 的基类。", +"822": "enum Status: 🔗", +"823": "Status FRESH = <2/>", +"824": "任务尚未执行,或者已被中止并重置。", +"825": "Status RUNNING = <2/>", +"826": "任务正在执行,尚未完成。", +"827": "Status FAILURE = <2/>", +"828": "任务以失败结束。", +"829": "Status SUCCESS = <2/>", +"830": "任务以成功结束。", +"831": "BTAction", +"832": "继承:BTTask < BT", +"833": "被继承:BTAwaitAnimation、BTCallMethod、BTConsolePrint、BTEvaluateExpression、BTFail、BTPauseAnimation、BTPlayAnimation、BTRandomWait、BTSetAgentProperty、BTSetVar、BTStopAnimation、BTWait、BTWaitTicks", +"834": "所有 BehaviorTree 动作的基类。", +"835": "BehaviorTree 中所有动作的基类。你可以通过继承 BTAction 类来创建自己的动作。", +"836": "表示 BehaviorTree 中智能体应当执行的某个具体行为或动作。动作是 BehaviorTree 层次结构的最底层,负责执行达成目标所需的实际工作。动作没有子任务。", +"837": "单个动作可以在一个或多个 tick 内完成任务。如果完成任务需要不止一个 tick,该动作应返回 <1/> 状态。任务完成时,动作返回 <2/> 或 <3/> 来表示结果。", +"838": "BTAlwaysFail", +"839": "继承:BTDecorator < BTTask < BT", +"840": "把 <1/> 转换为 <2/> 的 BT 装饰器。", +"841": "BTAlwaysSucceed", +"842": "把 <1/> 转换为 <2/> 的 BT 装饰器。", +"843": "BTAwaitAnimation", +"844": "继承:BTAction < BTTask < BT", +"845": "等待动画播放完毕的 BT 动作。", +"846": "BTAwaitAnimation 动作会等待指定 <1/> 节点上的动画播放完毕,然后返回 <2/>。", +"847": "如果指定动画已播放完毕,或者指定动画当前未在播放,则返回 <1/>。", +"848": "如果指定动画不存在,或者该动作获取 <2/> 节点失败,则返回 <1/>。", +"849": "animation_name", +"850": "BBNode", +"851": "animation_player", +"852": "max_time", +"853": "<1/> animation_name = <2/> 🔗", +"854": "<1/> set_animation_name(value: <2/>)", +"855": "<1/> get_animation_name()", +"856": "动画在 <1/> 节点中的键名。", +"857": "BBNode animation_player 🔗", +"858": "<1/> set_animation_player(value: BBNode)", +"859": "BBNode get_animation_player()", +"860": "指定 <1/> 节点的参数。", +"861": "<1/> max_time = <2/> 🔗", +"862": "<1/> set_max_time(value: <2/>)", +"863": "<1/> get_max_time()", +"864": "等待动画完成的最长时长(秒)。如果动画在此时间内没有播放完毕,BTAwaitAnimation 会停止等待并返回 <1/>。", +"865": "BTCallMethod", +"866": "在指定的 <1/> 或 <2/> 上调用方法的 BT 动作。", +"867": "BTCallMethod 动作会在指定的 <2/> 或 <3/> 实例上调用 method,然后返回 <4/>。", +"868": "如果该动作在方法执行期间遇到问题,则返回 <1/>。", +"869": "Array[BBVariant]", +"870": "args", +"871": "args_include_delta", +"872": "method", +"873": "node", +"874": "result_var", +"875": "Array[BBVariant] args = <2/> 🔗", +"876": "<1/> set_args(value: Array[BBVariant])", +"877": "Array[BBVariant] get_args()", +"878": "调用方法时要传入的实参。", +"879": "<1/> args_include_delta = <2/> 🔗", +"880": "<1/> set_include_delta(value: <2/>)", +"881": "<1/> is_delta_included()", +"882": "把 delta 作为第一个参数包含进来,并相应地后移其余参数的位置(如果有的话)。", +"883": "<1/> method = <2/> 🔗", +"884": "<1/> set_method(value: <2/>)", +"885": "<1/> get_method()", +"886": "要调用的方法名。", +"887": "BBNode node 🔗", +"888": "<1/> set_node_param(value: BBNode)", +"889": "BBNode get_node_param()", +"890": "指定包含要调用方法的 <1/> 或 <2/> 实例。", +"891": "<1/> result_var = <2/> 🔗", +"892": "<1/> set_result_var(value: <2/>)", +"893": "<1/> get_result_var()", +"894": "如果不为空,则把方法调用的结果赋给该属性指定的黑板变量。", +"895": "BTCheckAgentProperty", +"896": "继承:BTCondition < BTTask < BT", +"897": "检查智能体属性值的 BT 条件。", +"898": "BTCheckAgentProperty 会检查智能体的属性值,并将其与 value 进行比较。", +"899": "根据 check_type 返回 <1/> 或 <2/>。", +"900": "CheckType", +"901": "check_type", +"902": "property", +"903": "BBVariant", +"904": "value", +"905": "CheckType check_type = <2/> 🔗", +"906": "<1/> set_check_type(value: CheckType)", +"907": "CheckType get_check_type()", +"908": "要执行的检查类型。", +"909": "<1/> property = <2/> 🔗", +"910": "<1/> set_property(value: <2/>)", +"911": "<1/> get_property()", +"912": "指定要比较的智能体属性的参数。", +"913": "BBVariant value 🔗", +"914": "<1/> set_value(value: BBVariant)", +"915": "BBVariant get_value()", +"916": "指定智能体属性将与之比较的值的参数。", +"917": "BTCheckTrigger", +"918": "检查触发器(一个布尔变量)的 BT 条件。", +"919": "BTCheckTrigger 检查 variable 是否被设为 <2/>。如果是,它会把该变量切换为 <3/> 并返回 <4/>;否则返回 <5/>。", +"920": "BTCheckTrigger 可以在 BTSequence 中充当“门闩”:当触发器变量被设为 <2/> 时,它允许执行后续任务,随后把该变量改为 <3/>。", +"921": "variable", +"922": "<1/> variable = <2/> 🔗", +"923": "黑板上用作触发器的布尔变量。另见 BTTask.blackboard。", +"924": "如果变量的值为 <1/>,BTCheckTrigger 会把它切换为 <2/> 并返回 <3/>。", +"925": "如果变量的值为 <1/>,BTCheckTrigger 会返回 <2/>。", +"926": "BTCheckVar", +"927": "检查黑板上变量的 BT 条件。", +"928": "BTCheckVar 会把 variable 与 value 进行比较,并根据 check_type 返回 <3/> 或 <4/>。", +"929": "check_type", +"930": "value", +"931": "variable", +"932": "CheckType check_type = <2/> 🔗", +"933": "BBVariant value 🔗", +"934": "指定 variable 将与之比较的值的参数。", +"935": "<1/> variable = <2/> 🔗", +"936": "要检查其值的变量名。", +"937": "BTComment", +"938": "BTComment 为 BehaviorTree 添加注解或说明性文字。", +"939": "BTComment 用于为 BehaviorTree 添加注解或说明性备注。", +"940": "注释不会作为树的一部分被执行,并且在 BehaviorTree 的运行时实例中会被移除。", +"941": "BTComposite", +"942": "被继承:BTDynamicSelector、BTDynamicSequence、BTParallel、BTProbabilitySelector、BTRandomSelector、BTRandomSequence、BTSelector、BTSequence" +} diff --git a/docs/limboai-stable/_i18n/trans/batch08.json b/docs/limboai-stable/_i18n/trans/batch08.json new file mode 100644 index 0000000..6bc01d8 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch08.json @@ -0,0 +1,133 @@ +{ +"943": "BT 组合任务的基类。", +"944": "所有 BehaviorTree 组合任务的基类。你可以通过继承 BTComposite 类来创建自己的组合任务。", +"945": "组合任务(Composite)是 BehaviorTree 中的一种控制任务,包含一个或多个子任务。它通过规定子任务的执行方式,定义 BehaviorTree 的结构与流程。组合任务可以把相关任务归组为一个单元,让 BehaviorTree 更易管理和维护。BehaviorTree 组合任务的例子包括 BTSelector、BTSequence 和 BTParallel。", +"946": "BTCondition", +"947": "被继承:BTCheckAgentProperty、BTCheckTrigger、BTCheckVar", +"948": "BT 条件的基类。", +"949": "所有 BehaviorTree 条件的基类。你可以通过继承 BTCondition 类来创建自己的条件。", +"950": "条件(Condition)是 BehaviorTree 中的一种任务,它在执行后续任务之前检查特定条件。条件常用于组合任务内部以控制执行流程,用来验证环境状态、检查敌人是否存在,或评估智能体的生命值状态。在 BehaviorTree 中使用条件任务可以提高系统效率并避免不必要的动作。不过,它们可能不适合复杂的决策过程,而且条件任务过多会让 BehaviorTree 难以阅读。", +"951": "条件通常不需要多个 tick 就能完成,会立即返回 <1/> 或 <2/>。", +"952": "BTConsolePrint", +"953": "向控制台输出文本的 BT 动作任务。", +"954": "BTConsolePrint 动作会向控制台输出文本并返回 <1/>。它可以包含类似于 GDScript % 运算符的格式化参数占位符。", +"955": "bb_format_parameters", +"956": "text", +"957": "<1/> bb_format_parameters = <2/> 🔗", +"958": "<1/> set_bb_format_parameters(value: <2/>)", +"959": "<1/> get_bb_format_parameters()", +"960": "格式化参数的值会作为将要打印文本的格式化实参。", +"961": "注意:返回的数组是副本,对它的任何修改都不会更新原始属性值。更多细节见 <1/>。", +"962": "<1/> text = <2/> 🔗", +"963": "<1/> set_text(value: <2/>)", +"964": "<1/> get_text()", +"965": "要打印的文本,可以包含多个占位符,用于替换为格式化实参。这些占位符遵循与 GDScript % 运算符相同的格式,通常以 ‘%’ 开头并后接格式说明符。例如:%s 表示字符串,%d 表示整数,%f 表示实数。", +"966": "BTCooldown", +"967": "只有距上次执行已过去 duration 时间时,才执行其子任务的 BT 装饰器。", +"968": "只有距上次子任务成功执行已过去 duration 时间时,BTCooldown 才运行其子任务。除非把 trigger_on_failure 设为 <3/>,否则它只考虑成功的执行。", +"969": "如果子任务结果为 <2/>,返回 <1/>。", +"970": "如果子任务结果为 <2/>,返回 <1/>,并触发冷却计时器。", +"971": "如果子任务结果为 <2/>,或者距上次执行尚未过去 duration 时间,返回 <1/>。", +"972": "cooldown_state_var", +"973": "duration", +"974": "process_pause", +"975": "start_cooled", +"976": "trigger_on_failure", +"977": "<1/> cooldown_state_var = <2/> 🔗", +"978": "<1/> set_cooldown_state_var(value: <2/>)", +"979": "<1/> get_cooldown_state_var()", +"980": "用于在 Blackboard 中存储冷却状态的布尔变量。如果留空,该变量会被自动生成并赋值。", +"981": "如果该变量的值被设为 <1/>,表示冷却已激活。此特性可用于从树的其他部分检查冷却状态,或在 BehaviorTree 的不同部分之间共享它。", +"982": "<1/> duration = <2/> 🔗", +"983": "<1/> set_duration(value: <2/>)", +"984": "<1/> get_duration()", +"985": "允许下一次执行子任务之前需要等待的时间。", +"986": "<1/> process_pause = <2/> 🔗", +"987": "<1/> set_process_pause(value: <2/>)", +"988": "<1/> get_process_pause()", +"989": "如果为 <1/>,则在 <2/> 暂停时也处理冷却。", +"990": "<1/> start_cooled = <2/> 🔗", +"991": "<1/> set_start_cooled(value: <2/>)", +"992": "<1/> get_start_cooled()", +"993": "如果为 <1/>,则像子任务在第一次 BT tick 之前已执行过一样开始冷却。", +"994": "<1/> trigger_on_failure = <2/> 🔗", +"995": "<1/> set_trigger_on_failure(value: <2/>)", +"996": "<1/> get_trigger_on_failure()", +"997": "如果为 <1/>,当子任务结果为 <2/> 时也会激活冷却。否则,只有子任务结果为 <3/> 时才会触发冷却。", +"998": "BTDecorator", +"999": "被继承:BTAlwaysFail、BTAlwaysSucceed、BTCooldown、BTDelay、BTForEach、BTInvert、BTNewScope、BTProbability、BTRepeat、BTRepeatUntilFailure、BTRepeatUntilSuccess、BTRunLimit、BTTimeLimit", +"1000": "BT 装饰器的基类。", +"1001": "所有 BehaviorTree 装饰器的基类。你可以通过继承 BTDecorator 类来创建自己的装饰器。", +"1002": "装饰器是 BehaviorTree 中用于改变其子任务行为的一种任务。装饰器只能拥有一个子任务。", +"1003": "装饰器可以为任务的执行添加条件、限制或其他约束。BehaviorTree 装饰器的例子包括 BTInvert、BTRepeat 和 BTCooldown。使用 BehaviorTree 装饰器可以为现有任务添加额外逻辑,从而简化复杂行为的设计与实现。", +"1004": "BTDelay", +"1005": "在执行其子任务之前引入延迟的 BT 装饰器。", +"1006": "BTDelay 在执行其子任务之前引入 seconds 的延迟。在延迟期间返回 <2/>。", +"1007": "seconds", +"1008": "<1/> seconds = <2/> 🔗", +"1009": "<1/> set_seconds(value: <2/>)", +"1010": "<1/> get_seconds()", +"1011": "延迟时长(秒)。", +"1012": "BTDynamicSelector", +"1013": "继承:BTComposite < BTTask < BT", +"1014": "每个 tick 都从头执行任务、直到出现第一个 <1/> 的 BT 组合任务。", +"1015": "BTDynamicSelector 按顺序从第一个到最后一个执行子任务,直到任一子任务返回 <1/>。与 BTSelector 不同,它每个 tick 都会从头开始执行任务,重新评估它们的状态。当你希望每个 tick 都重试更高优先级的行为时,它非常有用。", +"1016": "如果某个子任务结果为 <2/>,返回 <1/>。BTDynamicSelector 会记住最后一个 <3/> 的子任务,但与 BTSequence 不同,在下一个执行 tick 中它会重新执行之前的任务并重新评估它们的返回状态。如果之前的任一任务没有返回 <5/>,它会中止所记住的那个 <6/> 任务。", +"1017": "如果所有子任务结果都为 <2/>,返回 <1/>。", +"1018": "如果某个子任务结果为 <2/>,返回 <1/>。", +"1019": "BTDynamicSequence", +"1020": "每个 tick 都从头执行任务、只要它们返回 <1/> 就继续的 BT 组合任务。", +"1021": "BTDynamicSequence 按顺序从第一个到最后一个执行子任务,只要它们返回 <1/> 就继续。与 BTSequence 不同,它每个 tick 都会从头开始执行任务,重新评估它们的状态。当你希望在每个 tick 都重新检查某个长时间运行动作之前的条件,并在任一条件结果为 <4/> 时中止那个 <3/> 动作时,它非常有用。", +"1022": "如果某个子任务结果为 <2/>,返回 <1/>。BTDynamicSequence 会记住最后一个 <3/> 的子任务,但与 BTSequence 不同,在下一个执行 tick 中它会重新执行之前的任务并重新评估它们的返回状态。如果之前的任一任务没有返回 <5/>,它会中止所记住的那个 <6/> 任务。", +"1023": "如果某个子任务结果为 <2/>,返回 <1/>。", +"1024": "如果所有子任务结果都为 <2/>,返回 <1/>。", +"1025": "BTEvaluateExpression", +"1026": "在指定的 <2/> 或 <3/> 上求值 <1/> 的 BT 动作。", +"1027": "BTEvaluateExpression 动作会在指定的 <2/> 或 <3/> 实例上求值 expression_string,当 <5/> 执行成功时返回 <4/>。", +"1028": "如果该动作在 <2/> 解析或执行期间遇到问题,则返回 <1/>。", +"1029": "expression_string", +"1030": "input_include_delta", +"1031": "input_names", +"1032": "input_values", +"1033": "node", +"1034": "result_var", +"1035": "Error", +"1036": "parse()", +"1037": "<1/> expression_string = <2/> 🔗", +"1038": "<1/> set_expression_string(value: <2/>)", +"1039": "<1/> get_expression_string()", +"1040": "要解析并执行的表达式字符串。", +"1041": "警告:更新 expression_string 后请调用 parse 来更新内部的 <3/>,因为它不会自动更新。", +"1042": "<1/> input_include_delta = <2/> 🔗", +"1043": "<1/> set_input_include_delta(value: <2/>)", +"1044": "<1/> is_input_delta_included()", +"1045": "如果启用,输入变量 <1/> 会被加入 input_names 和 input_values。", +"1046": "警告:切换 input_include_delta 后请调用 parse 来更新内部的 <3/>,因为它不会自动更新。", +"1047": "<1/> input_names = <2/> 🔗", +"1048": "<1/> set_input_names(value: <2/>)", +"1049": "<1/> get_input_names()", +"1050": "expression_string 中的变量名列表,用户将通过 input_values 为这些变量提供值。", +"1051": "警告:更新 input_names 后请调用 parse 来更新内部的 <3/>,因为它不会自动更新。", +"1052": "Array[BBVariant] input_values = <2/> 🔗", +"1053": "<1/> set_input_values(value: Array[BBVariant])", +"1054": "Array[BBVariant] get_input_values()", +"1055": "input_names 中指定变量对应的值列表。这些值通过数组索引与变量一一对应。", +"1056": "BBNode node 🔗", +"1057": "<1/> result_var = <2/> 🔗", +"1058": "Error parse() 🔗", +"1059": "在考虑 input_include_delta 和 input_names 的前提下调用 Expression.parse,并返回其错误码。", +"1060": "BTFail", +"1061": "总是返回 <1/> 的 BT 动作。", +"1062": "BTForEach", +"1063": "针对 <1/> 的每个元素执行其子任务的 BT 装饰器。", +"1064": "BTForEach 针对 <1/> 的每个元素执行其子任务。在每次迭代中,当前元素会被存入指定的 Blackboard 变量中。", +"1065": "如果子任务结果为 <2/>,或者子任务在非最后一次迭代中结果为 <3/>,则返回 <1/>。", +"1066": "如果子任务结果为 <2/>,返回 <1/>。", +"1067": "如果子任务在最后一次迭代中结果为 <2/>,返回 <1/>。", +"1068": "array_var", +"1069": "save_var", +"1070": "<1/> array_var = <2/> 🔗", +"1071": "<1/> set_array_var(value: <2/>)", +"1072": "<1/> get_array_var()", +"1073": "Blackboard 中存放 <2/> 的变量,用于迭代过程。" +} diff --git a/docs/limboai-stable/_i18n/trans/batch09.json b/docs/limboai-stable/_i18n/trans/batch09.json new file mode 100644 index 0000000..86b6ce6 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch09.json @@ -0,0 +1,160 @@ +{ +"1074": "<1/> save_var = <2/> 🔗", +"1075": "<1/> set_save_var(value: <2/>)", +"1076": "<1/> get_save_var()", +"1077": "用于存储 array_var 所引用数组中某个元素的 Blackboard 变量。", +"1078": "BTInstance", +"1079": "表示 BehaviorTree 资源的运行时实例。", +"1080": "可以使用 BehaviorTree.instantiate 方法创建。", +"1081": "monitor_performance", +"1082": "get_agent() <2/>", +"1083": "get_blackboard() <2/>", +"1084": "get_last_status() <2/>", +"1085": "get_owner_node() <2/>", +"1086": "get_root_task() <2/>", +"1087": "get_source_bt_path() <2/>", +"1088": "is_instance_valid() <2/>", +"1089": "register_with_debugger()", +"1090": "unregister_with_debugger()", +"1091": "update(delta: <2/>)", +"1092": "freed() 🔗", +"1093": "当行为树实例被释放时发出。调试器用它来注销实例。", +"1094": "updated(status: <1/>) 🔗", +"1095": "当行为树实例完成更新时发出。", +"1096": "<1/> monitor_performance = <2/> 🔗", +"1097": "如果为 <1/>,会在编辑器的 “Debugger->Monitors” 中为此实例添加一个性能监视器。", +"1098": "<1/> get_agent() <2/> 🔗", +"1099": "返回行为树实例的智能体。", +"1100": "Blackboard get_blackboard() <2/> 🔗", +"1101": "返回行为树实例的黑板。", +"1102": "Status get_last_status() <2/> 🔗", +"1103": "返回上一次更新的执行状态。", +"1104": "<1/> get_owner_node() <2/> 🔗", +"1105": "返回拥有此行为树实例的场景 <1/>。", +"1106": "BTTask get_root_task() <2/> 🔗", +"1107": "返回行为树实例的根任务。", +"1108": "<1/> get_source_bt_path() <2/> 🔗", +"1109": "返回用于创建此实例的行为树资源的文件路径。", +"1110": "<1/> is_instance_valid() <2/> 🔗", +"1111": "如果行为树实例已正确初始化并可以使用,则返回 <1/>。", +"1112": "<1/> register_with_debugger() 🔗", +"1113": "向调试器注册该行为树实例。", +"1114": "<1/> unregister_with_debugger() 🔗", +"1115": "从调试器注销该行为树实例。通常不需要这样做,因为实例被释放时调试器会自动注销它。", +"1116": "Status update(delta: <2/>) 🔗", +"1117": "对行为树实例执行一次 tick 并返回其状态。", +"1118": "BTInvert", +"1119": "把 <1/> 转换为 <2/>、把 <3/> 转换为 <4/> 的 BT 装饰器。", +"1120": "BTInvert 把 <1/> 转换为 <2/>、把 <3/> 转换为 <4/>。", +"1121": "BTNewScope", +"1122": "被继承:BTSubtree", +"1123": "创建新 Blackboard 作用域的 BT 装饰器。", +"1124": "BTNewScope 在初始化期间创建一个新的 Blackboard 作用域并向其中填充数据。见 Blackboard。", +"1125": "返回子任务的执行状态。", +"1126": "blackboard_plan", +"1127": "BlackboardPlan blackboard_plan 🔗", +"1128": "BTParallel", +"1129": "同时执行所有子任务的 BT 组合任务。", +"1130": "BTParallel 同时执行其所有子任务。注意 BTParallel 并不涉及多线程:它在同一个 tick 内按顺序从第一个到最后一个处理每个任务,然后返回结果。如果满足任一中止条件,所有当前处于 <1/> 的任务都会被终止,结果将是 <2/> 或 <3/> 之一。num_failures_required 决定 BTParallel 何时失败,num_successes_required 决定它何时成功。当两者都满足时,它优先考虑 num_failures_required。", +"1131": "如果设为 repeat,每个 tick 都会重新执行所有子任务,无论它们之前的结果是 <2/> 还是 <3/>。", +"1132": "当所需数量的子任务结果为 <2/> 时返回 <1/>。当 repeat 设为 <4/> 时,如果没有满足任何条件,且所有子任务的结果都是 <5/> 或 <6/>,BTParallel 将返回 <7/>。", +"1133": "当所需数量的子任务结果为 <2/> 时返回 <1/>。", +"1134": "如果没有任何条件被满足,并且 repeat 设为 <3/> 或某个子任务结果为 <4/>,则返回 <1/>。", +"1135": "num_failures_required", +"1136": "num_successes_required", +"1137": "repeat", +"1138": "<1/> num_failures_required = <2/> 🔗", +"1139": "<1/> set_num_failures_required(value: <2/>)", +"1140": "<1/> get_num_failures_required()", +"1141": "如果有指定数量的子任务返回 <1/>,BTParallel 也会返回 <2/>。", +"1142": "<1/> num_successes_required = <2/> 🔗", +"1143": "<1/> set_num_successes_required(value: <2/>)", +"1144": "<1/> get_num_successes_required()", +"1145": "如果有指定数量的子任务返回 <1/>,BTParallel 也会返回 <2/>。", +"1146": "<1/> repeat = <2/> 🔗", +"1147": "<1/> set_repeat(value: <2/>)", +"1148": "<1/> get_repeat()", +"1149": "为 <1/> 时,子任务会被再次执行,无论它们之前的结果是 <2/> 还是 <3/>。", +"1150": "为 <1/> 时,如果没有满足任何条件,且所有子任务的结果都是 <2/> 或 <3/>,BTParallel 将返回 <4/>。", +"1151": "BTPauseAnimation", +"1152": "暂停指定 <1/> 节点上动画播放的 BT 动作。", +"1153": "BTPauseAnimation 动作会暂停指定 <1/> 节点上的动画播放并返回 <2/>。", +"1154": "如果该动作获取 <2/> 节点失败,则返回 <1/>。", +"1155": "animation_player", +"1156": "BBNode animation_player 🔗", +"1157": "BTPlayAnimation", +"1158": "在指定 <1/> 节点上播放动画的 BT 动作。", +"1159": "BTPlayAnimation 动作会在指定的 <1/> 节点上播放动画。如果 await_completion 大于 <3/>,该动作会等待动画完成,最长等待时间等于 await_completion。", +"1160": "如果动画播放完毕,或者经过的时间超过 await_completion,则返回 <1/>。当 await_completion 设为 <4/> 时,BTPlayAnimation 不会等待动画结束,而是立即返回 <5/>。", +"1161": "如果动画仍在播放且经过的时间小于 await_completion,则返回 <1/>。", +"1162": "如果该动作播放所请求的动画失败,则返回 <1/>。", +"1163": "animation_name", +"1164": "animation_player", +"1165": "await_completion", +"1166": "blend", +"1167": "from_end", +"1168": "speed", +"1169": "<1/> animation_name = <2/> 🔗", +"1170": "动画在 <1/> 节点中的键名。如果为空,并且 <2/> 之前被暂停过,BTPlayAnimation 会继续播放上一次播放的动画。", +"1171": "BBNode animation_player 🔗", +"1172": "<1/> await_completion = <2/> 🔗", +"1173": "<1/> set_await_completion(value: <2/>)", +"1174": "<1/> get_await_completion()", +"1175": "等待动画完成的最长时长(秒)。如果动画在此时间内没有播放完毕,BTPlayAnimation 会停止等待并返回 <1/>。", +"1176": "<1/> blend = <2/> 🔗", +"1177": "<1/> set_blend(value: <2/>)", +"1178": "<1/> get_blend()", +"1179": "自定义混合时间(秒)。见 AnimationPlayer.play。", +"1180": "<1/> from_end = <2/> 🔗", +"1181": "<1/> set_from_end(value: <2/>)", +"1182": "<1/> get_from_end()", +"1183": "从末尾开始播放动画。配合负的 speed 可反向播放动画。见 AnimationPlayer.play。", +"1184": "<1/> speed = <2/> 🔗", +"1185": "<1/> set_speed(value: <2/>)", +"1186": "<1/> get_speed()", +"1187": "自定义播放速度缩放比例。见 AnimationPlayer.play。", +"1188": "BTProbability", +"1189": "以给定概率执行其子任务的 BT 装饰器。", +"1190": "BTProbability 以 run_chance 定义的给定概率执行其子任务。", +"1191": "如果子任务被执行,返回其结果;否则返回 <1/>。", +"1192": "run_chance", +"1193": "<1/> run_chance = <2/> 🔗", +"1194": "<1/> set_run_chance(value: <2/>)", +"1195": "<1/> get_run_chance()", +"1196": "定义子任务被执行的可能性的概率。", +"1197": "BTProbabilitySelector", +"1198": "根据所附加的概率选择要执行的子任务的 BT 组合任务。", +"1199": "BTProbabilitySelector 根据所附加的概率选择要执行的子任务,通常用于决策。概率分布根据分配给每个子任务的权重计算得出。", +"1200": "当某个子任务结果为 <2/> 时返回 <1/>。", +"1201": "当某个子任务结果为 <2/> 时返回 <1/>。", +"1202": "当某个子任务结果为 <1/> 时,BTProbabilitySelector 的行为取决于 abort_on_failure 的值:", +"1203": "如果 abort_on_failure 为 <2/>,当某个子任务结果为 <3/> 时,BTProbabilitySelector 会在剩余子任务上重新归一化概率分布,并选择一个新的子任务来执行。如果所有子任务都失败,该组合任务将返回 <4/>。", +"1204": "如果 abort_on_failure 为 <2/>,当某个子任务结果为 <3/> 时,BTProbabilitySelector 不会再选择其他子任务执行,而是立即返回 <4/>。", +"1205": "abort_on_failure", +"1206": "get_probability(child_idx: <2/>) <3/>", +"1207": "get_total_weight() <2/>", +"1208": "get_weight(child_idx: <2/>) <3/>", +"1209": "has_probability(child_idx: <2/>) <3/>", +"1210": "set_probability(child_idx: <2/>, probability: <3/>)", +"1211": "set_weight(child_idx: <2/>, weight: <3/>)", +"1212": "<1/> abort_on_failure = <2/> 🔗", +"1213": "<1/> set_abort_on_failure(value: <2/>)", +"1214": "<1/> get_abort_on_failure()", +"1215": "如果为 <1/>,当某个子任务结果为 <3/> 时,BTProbabilitySelector 不会再选择其他子任务执行,而是返回 <2/>。", +"1216": "<1/> get_probability(child_idx: <2/>) <3/> 🔗", +"1217": "返回该子任务被选中的概率。", +"1218": "<1/> get_total_weight() <2/> 🔗", +"1219": "返回所有子任务的权重总和。", +"1220": "<1/> get_weight(child_idx: <2/>) <3/> 🔗", +"1221": "返回该子任务在加权概率选择算法中的权重。", +"1222": "<1/> has_probability(child_idx: <2/>) <3/> 🔗", +"1223": "返回索引为 <1/> 的子任务是否参与加权概率选择算法并分配了概率。对于 BTComment 任务返回 <2/>。", +"1224": "<1/> set_probability(child_idx: <2/>, probability: <3/>) 🔗", +"1225": "根据期望的概率来设置该子任务的权重。", +"1226": "<1/> set_weight(child_idx: <2/>, weight: <3/>) 🔗", +"1227": "为加权概率选择算法设置该子任务的权重。", +"1228": "BTRandomSelector", +"1229": "以随机顺序执行任务、直到出现第一个 <1/> 的 BT 组合任务。", +"1230": "BTRandomSelector 以随机顺序执行其子任务,直到任一子任务返回 <1/>。如果某个子任务结果为 <2/>,BTRandomSelector 会立即执行另一个子任务,直到其中一个返回 <3/>,或者全部结果为 <4/>。", +"1231": "如果某个子任务结果为 <2/>,返回 <1/>。BTRandomSelector 会记住执行顺序以及最后一个返回 <3/> 的子任务,确保在下一个 tick 从该位置继续。" +} diff --git a/docs/limboai-stable/_i18n/trans/batch10.json b/docs/limboai-stable/_i18n/trans/batch10.json new file mode 100644 index 0000000..a8f0b94 --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch10.json @@ -0,0 +1,161 @@ +{ +"1232": "BTRandomSequence", +"1233": "以随机顺序执行任务、只要它们返回 <1/> 就继续的 BT 组合任务。", +"1234": "BTRandomSequence 以随机顺序执行其子任务,只要它们返回 <1/> 就继续。如果某个子任务结果为 <2/>,BTRandomSequence 会立即执行下一个子任务,直到其中一个返回 <3/>,或者全部结果为 <4/>。", +"1235": "如果某个子任务结果为 <2/>,返回 <1/>。BTRandomSequence 会记住执行顺序以及最后一个返回 <3/> 的子任务,确保在下一个 tick 从该位置继续。", +"1236": "BTRandomWait", +"1237": "等待一段随机时长后返回 <1/> 的 BT 动作。", +"1238": "BTRandomWait 动作会等待一段随机时长,然后返回 <1/>。该时长在指定的范围内随机取值,范围由 min_duration 和 max_duration 定义。", +"1239": "max_duration", +"1240": "min_duration", +"1241": "<1/> max_duration = <2/> 🔗", +"1242": "<1/> set_max_duration(value: <2/>)", +"1243": "<1/> get_max_duration()", +"1244": "等待的最长时长。", +"1245": "<1/> min_duration = <2/> 🔗", +"1246": "<1/> set_min_duration(value: <2/>)", +"1247": "<1/> get_min_duration()", +"1248": "等待的最短时长。", +"1249": "BTRepeat", +"1250": "把其子任务重复指定 times 次的 BT 装饰器。", +"1251": "BTRepeat 会按 times 定义的次数迭代其子任务。如果 forever 为 <3/>,子任务的执行会无限重复。", +"1252": "如果子任务结果为 <2/>,返回 <1/>。如果 forever 为 <4/>,BTRepeat 总是返回 <5/>。", +"1253": "如果达到指定的成功执行次数,返回 <1/>。如果 abort_on_failure 为 <3/>,子任务返回的 <4/> 状态也被视为一次成功执行。", +"1254": "如果子任务结果为 <2/> 且 abort_on_failure 为 <4/>,则返回 <1/>。", +"1255": "abort_on_failure", +"1256": "forever", +"1257": "times", +"1258": "<1/> abort_on_failure = <2/> 🔗", +"1259": "如果为 <1/>,子任务返回的 <2/> 状态也被视为一次成功执行。", +"1260": "<1/> forever = <2/> 🔗", +"1261": "<1/> set_forever(value: <2/>)", +"1262": "<1/> get_forever()", +"1263": "如果为 <1/>,子任务的执行会无限重复,并总是返回 <2/>。", +"1264": "<1/> times = <2/> 🔗", +"1265": "<1/> set_times(value: <2/>)", +"1266": "<1/> get_times()", +"1267": "重复执行子任务的次数。", +"1268": "BTRepeatUntilFailure", +"1269": "重复其子任务直到 <1/> 的 BT 装饰器。", +"1270": "BTRepeatUntilFailure 重复其子任务,直到结果为 <1/>。", +"1271": "如果子任务结果为 <2/> 或 <3/>,返回 <1/>。", +"1272": "如果子任务结果为 <2/>,返回 <1/>。", +"1273": "BTRepeatUntilSuccess", +"1274": "重复其子任务直到 <1/> 的 BT 装饰器。", +"1275": "BTRepeatUntilSuccess 重复其子任务,直到结果为 <1/>。", +"1276": "如果子任务结果为 <2/> 或 <3/>,返回 <1/>。", +"1277": "如果子任务结果为 <2/>,返回 <1/>。", +"1278": "BTRunLimit", +"1279": "限制其子任务执行次数的 BT 装饰器。", +"1280": "BTRunLimit 把子任务的执行次数限制在 run_limit 定义的最大次数以内。", +"1281": "如果执行次数超出限制,返回 <1/>;否则返回子任务的状态。", +"1282": "CountPolicy", +"1283": "count_policy", +"1284": "run_limit", +"1285": "enum CountPolicy: 🔗", +"1286": "CountPolicy COUNT_SUCCESSFUL = <2/>", +"1287": "只把成功的运行计入限制。", +"1288": "CountPolicy COUNT_FAILED = <2/>", +"1289": "只把失败的运行计入限制。", +"1290": "CountPolicy COUNT_ALL = <2/>", +"1291": "把成功和失败的运行都计入限制。", +"1292": "CountPolicy count_policy = <2/> 🔗", +"1293": "<1/> set_count_policy(value: CountPolicy)", +"1294": "CountPolicy get_count_policy()", +"1295": "哪些运行应计入限制:成功的、失败的,还是全部?", +"1296": "<1/> run_limit = <2/> 🔗", +"1297": "<1/> set_run_limit(value: <2/>)", +"1298": "<1/> get_run_limit()", +"1299": "允许子任务执行的最大次数。", +"1300": "BTSelector", +"1301": "顺序执行任务、直到出现第一个 <1/> 的 BT 组合任务。", +"1302": "BTSelector 按顺序从第一个到最后一个执行子任务,直到任一子任务返回 <1/>。如果某个子任务结果为 <2/>,BTSelector 会立即执行下一个子任务,直到其中一个返回 <3/>,或者全部返回 <4/>。BTSelector 与 BTSequence 是行为树中最常见的两种积木块。本质上,BTSequence 类似布尔 AND 运算,而 BTSelector 类似布尔 OR 运算。选择器让行为树能够响应环境变化,并在各种后备行为之间触发转换。", +"1303": "如果某个子任务结果为 <2/>,返回 <1/>。BTSelector 会记住最后一个返回 <3/> 的子任务,确保在下一个执行 tick 从该位置继续。", +"1304": "BTSequence", +"1305": "顺序执行任务、只要它们返回 <1/> 就继续的 BT 组合任务。", +"1306": "BTSequence 按顺序从第一个到最后一个执行子任务,只要它们返回 <1/> 就继续。如果某个子任务结果为 <2/>,BTSequence 会立即执行下一个子任务,直到其中一个返回 <3/>,或者全部返回 <4/>。BTSequence 与 BTSelector 是行为树中最常见的两种积木块。本质上,BTSelector 类似布尔 OR 运算,而 BTSequence 类似布尔 AND 运算。序列让行为树能够把一串更简单的任务组合成复杂行为。", +"1307": "如果任一子任务结果为 <2/>,返回 <1/>。BTSequence 会记住最后一个返回 <3/> 的子任务,确保在下一个执行 tick 从该位置继续。", +"1308": "BTSetAgentProperty", +"1309": "为指定的智能体属性赋值的 BT 动作。", +"1310": "BTSetAgentProperty 把指定的 value 赋给由 property 标识的智能体属性并返回 <3/>。可选地,它可以在赋值之前执行特定的 operation。", +"1311": "如果设置该属性失败,则返回 <1/>。", +"1312": "Operation", +"1313": "operation", +"1314": "property", +"1315": "value", +"1316": "Operation operation = <2/> 🔗", +"1317": "<1/> set_operation(value: Operation)", +"1318": "Operation get_operation()", +"1319": "指定赋值之前要执行的操作。操作的执行方式如下:", +"1320": "<1/> property = <2/> 🔗", +"1321": "指定智能体属性名的参数。", +"1322": "BBVariant value 🔗", +"1323": "指定将要赋给智能体属性的值的参数。", +"1324": "BTSetVar", +"1325": "把 value 赋给 variable,然后返回 <3/> 的 BT 动作。", +"1326": "BTSetVar 把 value 赋给 variable,然后返回 <3/>。可选地,它可以在赋值之前执行特定的 operation。", +"1327": "如果设置 variable 失败,则返回 <1/>。", +"1328": "operation", +"1329": "value", +"1330": "variable", +"1331": "Operation operation = <2/> 🔗", +"1332": "BBVariant value 🔗", +"1333": "指定将要赋给该变量的值的参数。", +"1334": "<1/> variable = <2/> 🔗", +"1335": "将要被赋值的变量名。", +"1336": "BTStopAnimation", +"1337": "停止指定 <1/> 节点上动画播放的 BT 动作。", +"1338": "BTStopAnimation 动作会停止指定 <1/> 节点上的动画播放并返回 <2/>。如果设置了 animation_name,则只有当指定动画正在播放时才会停止播放。", +"1339": "animation_name", +"1340": "animation_player", +"1341": "keep_state", +"1342": "<1/> animation_name = <2/> 🔗", +"1343": "动画在 <1/> 节点中的键名。如果不为空,则只有当指定动画正在播放时 BTStopAnimation 才会停止播放。", +"1344": "BBNode animation_player 🔗", +"1345": "<1/> keep_state = <2/> 🔗", +"1346": "<1/> set_keep_state(value: <2/>)", +"1347": "<1/> get_keep_state()", +"1348": "如果为 <1/>,动画状态不会在视觉上被更新。", +"1349": "BTSubtree", +"1350": "继承:BTNewScope < BTDecorator < BTTask < BT", +"1351": "在更大的树中实例化并运行子树的 BT 装饰器。", +"1352": "BTSubtree 会实例化一个 BehaviorTree,在初始化期间把它的根任务作为子任务加入,同时创建一个新的 Blackboard 作用域。", +"1353": "返回子树执行的状态。", +"1354": "子树的黑板变量可以映射到主树黑板计划的变量。请查看检视面板中的映射(mapping)部分。", +"1355": "注意:BTSubTree 被设计为一个更简单的加载器,不支持在运行时更新 subtree。自定义的子树装饰器更适合这种需求:", +"1356": "这样 BehaviorTree 就能从黑板中的某个变量或其他位置加载指定的行为树,并在运行时使用那棵新的行为树。", +"1357": "subtree", +"1358": "BehaviorTree subtree 🔗", +"1359": "<1/> set_subtree(value: BehaviorTree)", +"1360": "BehaviorTree get_subtree()", +"1361": "将被实例化为子树的 BehaviorTree 资源。", +"1362": "BTTimeLimit", +"1363": "为其子任务执行设置时间限制的 BT 装饰器。", +"1364": "BTTimeLimit 为子任务的执行分配有限的时间;如果超过 time_limit,它会中止子任务并返回 <1/>。", +"1365": "如果超过 time_limit,返回 <1/>;否则返回子任务的状态。", +"1366": "time_limit", +"1367": "<1/> time_limit = <2/> 🔗", +"1368": "<1/> set_time_limit(value: <2/>)", +"1369": "<1/> get_time_limit()", +"1370": "分配给子任务执行的时间。", +"1371": "BTWait", +"1372": "等待指定 duration 时间后返回 <2/> 的 BT 动作。", +"1373": "duration", +"1374": "<1/> duration = <2/> 🔗", +"1375": "该属性目前还没有描述。欢迎贡献一份描述!", +"1376": "BTWaitTicks", +"1377": "等待指定数量的 tick 后返回 <1/> 的 BT 动作。", +"1378": "num_ticks", +"1379": "<1/> num_ticks = <2/> 🔗", +"1380": "<1/> set_num_ticks(value: <2/>)", +"1381": "<1/> get_num_ticks()", +"1382": "返回 <1/> 之前需要等待的 tick 数。", +"1383": "LimboUtility", +"1384": "LimboAI 的辅助函数。", +"1385": "decorate_output_var(variable: <2/>) <3/>", +"1386": "decorate_var(variable: <2/>) <3/>", +"1387": "get_check_operator_string(check: CheckType) <3/>", +"1388": "get_operation_string(operation: Operation) <3/>", +"1389": "get_status_name(status: <2/>) <3/>", +"1390": "get_task_icon(class_or_script_path: <2/>) <3/>" +} diff --git a/docs/limboai-stable/_i18n/trans/batch11.json b/docs/limboai-stable/_i18n/trans/batch11.json new file mode 100644 index 0000000..4ec1eaf --- /dev/null +++ b/docs/limboai-stable/_i18n/trans/batch11.json @@ -0,0 +1,63 @@ +{ +"1391": "perform_check(check: CheckType, a: <3/>, b: <4/>)", +"1392": "perform_operation(operation: Operation, a: <3/>, b: <4/>)", +"1393": "enum CheckType: 🔗", +"1394": "CheckType CHECK_EQUAL = <2/>", +"1395": "相等性检查。", +"1396": "CheckType CHECK_LESS_THAN = <2/>", +"1397": "小于检查。", +"1398": "CheckType CHECK_LESS_THAN_OR_EQUAL = <2/>", +"1399": "小于或等于检查。", +"1400": "CheckType CHECK_GREATER_THAN = <2/>", +"1401": "大于检查。", +"1402": "CheckType CHECK_GREATER_THAN_OR_EQUAL = <2/>", +"1403": "大于或等于检查。", +"1404": "CheckType CHECK_NOT_EQUAL = <2/>", +"1405": "不等性检查。", +"1406": "enum Operation: 🔗", +"1407": "Operation OPERATION_NONE = <2/>", +"1408": "无操作。", +"1409": "Operation OPERATION_ADDITION = <2/>", +"1410": "算术加法。", +"1411": "Operation OPERATION_SUBTRACTION = <2/>", +"1412": "算术减法。", +"1413": "Operation OPERATION_MULTIPLICATION = <2/>", +"1414": "算术乘法。", +"1415": "Operation OPERATION_DIVISION = <2/>", +"1416": "算术除法。", +"1417": "Operation OPERATION_MODULO = <2/>", +"1418": "取整数除法的余数。", +"1419": "Operation OPERATION_POWER = <2/>", +"1420": "把 <1/> 自乘 <2/> 次。", +"1421": "Operation OPERATION_BIT_SHIFT_LEFT = <2/>", +"1422": "按位左移。", +"1423": "Operation OPERATION_BIT_SHIFT_RIGHT = <2/>", +"1424": "按位右移。", +"1425": "Operation OPERATION_BIT_AND = <2/>", +"1426": "按位与。", +"1427": "Operation OPERATION_BIT_OR = <2/>", +"1428": "按位或。", +"1429": "Operation OPERATION_BIT_XOR = <2/>", +"1430": "按位异或。", +"1431": "<1/> decorate_output_var(variable: <2/>) <3/> 🔗", +"1432": "与 decorate_var 类似,生成一个经格式化、用于显示的 Blackboard 变量名字符串,并额外添加一个符号来表明该变量被用作输出。", +"1433": "<1/> decorate_var(variable: <2/>) <3/> 🔗", +"1434": "生成一个经格式化、适合显示或控制台输出的 Blackboard 变量名字符串。", +"1435": "<1/> get_check_operator_string(check: CheckType) <3/> 🔗", +"1436": "返回 CheckType 枚举值对应的运算符字符串。例如,CHECK_EQUAL 返回 “==”。", +"1437": "<1/> get_operation_string(operation: Operation) <3/> 🔗", +"1438": "返回 Operation 枚举值的字符串表示。", +"1439": "<1/> get_status_name(status: <2/>) <3/> 🔗", +"1440": "返回 BTTask 状态码的名称。", +"1441": "<1/> get_task_icon(class_or_script_path: <2/>) <3/> 🔗", +"1442": "根据任务的类名或脚本资源路径,返回与之关联的图标纹理。", +"1443": "<1/> perform_check(check: CheckType, a: <3/>, b: <4/>) 🔗", +"1444": "对两个值 <2/> 和 <3/> 执行 <1/>,如果检查通过则返回 <4/>。", +"1445": "<1/> perform_operation(operation: Operation, a: <3/>, b: <4/>) 🔗", +"1446": "对两个值 <2/> 和 <3/> 执行 <1/>,并返回结果。", +"1447": "开始使用", +"1448": "行为树", +"1449": "分层状态机", +"1450": "类参考", +"1451": "LimboAI 1.0 文档" +} diff --git a/docs/limboai-stable/_i18n/uniq.json b/docs/limboai-stable/_i18n/uniq.json new file mode 100644 index 0000000..c45c124 --- /dev/null +++ b/docs/limboai-stable/_i18n/uniq.json @@ -0,0 +1,10663 @@ +{ + "uniq": { + "LimboAI Documentation\u0000{}": { + "uid": 1, + "tpl": "LimboAI Documentation", + "markers": {} + }, + "LimboAI is an open-source C++ module for Godot Engine 4 providing a combination of Behavior Trees and State Machines for crafting your game’s AI. It comes with a behavior tree editor, built-in documentation, visual debugger, and more! While it is implemented in C++, it fully supports GDScript for creating your own tasks and states. The full list of features is available on the LimboAI GitHub page.\u0000{\"1\": \"creating your own tasks\", \"2\": \"LimboAI GitHub\"}": { + "uid": 2, + "tpl": "LimboAI is an open-source C++ module for Godot Engine 4 providing a combination of Behavior Trees and State Machines for crafting your game’s AI. It comes with a behavior tree editor, built-in documentation, visual debugger, and more! While it is implemented in C++, it fully supports GDScript for creating your own tasks and states. The full list of features is available on the LimboAI GitHub page.", + "markers": { + "1": "creating your own tasks", + "2": "LimboAI GitHub" + } + }, + "Behavior Trees are powerful hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games. To learn more about behavior trees, check out Introduction to Behavior Trees.\u0000{\"1\": \"Introduction to Behavior Trees\"}": { + "uid": 3, + "tpl": "Behavior Trees are powerful hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games. To learn more about behavior trees, check out Introduction to Behavior Trees.", + "markers": { + "1": "Introduction to Behavior Trees" + } + }, + "Hierarchical State Machines are finite state machines that allow any state to host their own sub-state machine. This allows you to tackle your AI’s state and transition complexity by breaking down one big state machine into multiple smaller ones.\u0000{}": { + "uid": 4, + "tpl": "Hierarchical State Machines are finite state machines that allow any state to host their own sub-state machine. This allows you to tackle your AI’s state and transition complexity by breaking down one big state machine into multiple smaller ones.", + "markers": {} + }, + "Getting LimboAI\u0000{}": { + "uid": 5, + "tpl": "Getting LimboAI", + "markers": {} + }, + "LimboAI can be used as either a C++ module or as a GDExtension shared library. There are some differences between the two. In short, GDExtension version is more convenient to use but somewhat limited in features. The module version provides better editor experience and is slightly more performant, but it requires using custom engine builds including the export templates. Whichever you choose to use, your project will stay compatible with both and you can switch from one to the other any time.\u0000{}": { + "uid": 6, + "tpl": "LimboAI can be used as either a C++ module or as a GDExtension shared library. There are some differences between the two. In short, GDExtension version is more convenient to use but somewhat limited in features. The module version provides better editor experience and is slightly more performant, but it requires using custom engine builds including the export templates. Whichever you choose to use, your project will stay compatible with both and you can switch from one to the other any time.", + "markers": {} + }, + "Choose the version you’d like to use. If you’re unsure, start with the GDExtension version. You can change your decision at any time - both versions are fully compatible.\u0000{}": { + "uid": 7, + "tpl": "Choose the version you’d like to use. If you’re unsure, start with the GDExtension version. You can change your decision at any time - both versions are fully compatible.", + "markers": {} + }, + "Get GDExtension version\u0000{}": { + "uid": 8, + "tpl": "Get GDExtension version", + "markers": {} + }, + "Precompiled builds are available on the official LimboAI GitHub page, and in the Asset Library.\u0000{\"1\": \"LimboAI GitHub\"}": { + "uid": 9, + "tpl": "Precompiled builds are available on the official LimboAI GitHub page, and in the Asset Library.", + "markers": { + "1": "LimboAI GitHub" + } + }, + "GDExtension is the most convenient way of using the LimboAI plugin, but it comes with certain limitations:\u0000{}": { + "uid": 10, + "tpl": "GDExtension is the most convenient way of using the LimboAI plugin, but it comes with certain limitations:", + "markers": {} + }, + "Documentation tooltips are not available.\u0000{}": { + "uid": 11, + "tpl": "Documentation tooltips are not available.", + "markers": {} + }, + "Handy BBParam property editor is not available in the extension due to dependencies on the engine classes that are not available in the Godot API.\u0000{\"1\": \"BBParam\"}": { + "uid": 12, + "tpl": "Handy BBParam property editor is not available in the extension due to dependencies on the engine classes that are not available in the Godot API.", + "markers": { + "1": "BBParam" + } + }, + "🛈 See also: What is GDExtension?\u0000{\"1\": \"What is GDExtension?\"}": { + "uid": 13, + "tpl": "🛈 See also: What is GDExtension?", + "markers": { + "1": "What is GDExtension?" + } + }, + "Installation instructions:\u0000{}": { + "uid": 14, + "tpl": "Installation instructions:", + "markers": {} + }, + "Make sure you’re using the latest stable version of the Godot editor.\u0000{}": { + "uid": 15, + "tpl": "Make sure you’re using the latest stable version of the Godot editor.", + "markers": {} + }, + "Create a new project for your experiments with LimboAI.\u0000{}": { + "uid": 16, + "tpl": "Create a new project for your experiments with LimboAI.", + "markers": {} + }, + "In Godot, click AssetLib tab at the top of the screen and search for LimboAI. Download it. LimboAI plugin will be downloaded with the demo project files. Don’t mind the errors printed at this point, this is due to the extension library not being loaded just yet.\u0000{}": { + "uid": 17, + "tpl": "In Godot, click AssetLib tab at the top of the screen and search for LimboAI. Download it. LimboAI plugin will be downloaded with the demo project files. Don’t mind the errors printed at this point, this is due to the extension library not being loaded just yet.", + "markers": {} + }, + "Reload your project with Project -> Reload project. There shouldn’t be any errors printed now.\u0000{}": { + "uid": 18, + "tpl": "Reload your project with Project -> Reload project. There shouldn’t be any errors printed now.", + "markers": {} + }, + "In the project files, locate a scene file called showcase.tscn and run it. It’s the demo’s entry point.\u0000{}": { + "uid": 19, + "tpl": "In the project files, locate a scene file called showcase.tscn and run it. It’s the demo’s entry point.", + "markers": {} + }, + "Get module version\u0000{}": { + "uid": 20, + "tpl": "Get module version", + "markers": {} + }, + "Precompiled builds are available on the official LimboAI GitHub page.\u0000{\"1\": \"LimboAI GitHub\"}": { + "uid": 21, + "tpl": "Precompiled builds are available on the official LimboAI GitHub page.", + "markers": { + "1": "LimboAI GitHub" + } + }, + "In GitHub releases, download the latest pre-compiled release build for your platform.\u0000{\"1\": \"GitHub releases\"}": { + "uid": 22, + "tpl": "In GitHub releases, download the latest pre-compiled release build for your platform.", + "markers": { + "1": "GitHub releases" + } + }, + "Download the demo project archive from the same release.\u0000{}": { + "uid": 23, + "tpl": "Download the demo project archive from the same release.", + "markers": {} + }, + "Extract the pre-compiled editor and the demo project files.\u0000{}": { + "uid": 24, + "tpl": "Extract the pre-compiled editor and the demo project files.", + "markers": {} + }, + "Launch the pre-compiled editor binary, import and open the demo project.\u0000{}": { + "uid": 25, + "tpl": "Launch the pre-compiled editor binary, import and open the demo project.", + "markers": {} + }, + "Run the project.\u0000{}": { + "uid": 26, + "tpl": "Run the project.", + "markers": {} + }, + "Important: To export your game using the module version of LimboAI, make sure to use the pre-compiled export templates included in the same GitHub release build.\u0000{}": { + "uid": 27, + "tpl": "Important: To export your game using the module version of LimboAI, make sure to use the pre-compiled export templates included in the same GitHub release build.", + "markers": {} + }, + "Using LimboAI with C#\u0000{}": { + "uid": 28, + "tpl": "Using LimboAI with C#", + "markers": {} + }, + "Here’s how you can use the module version with C# to write your tasks and states.\u0000{}": { + "uid": 29, + "tpl": "Here’s how you can use the module version with C# to write your tasks and states.", + "markers": {} + }, + "Locate LimboAI NuGet package files.\u0000{}": { + "uid": 30, + "tpl": "Locate LimboAI NuGet package files.", + "markers": {} + }, + "Each provided build comes with a GodotSharp folder, which has packages under “GodotSharp/Tools/nupkgs/”. Note down the directory path; you’ll need it in the next step.\u0000{}": { + "uid": 31, + "tpl": "Each provided build comes with a GodotSharp folder, which has packages under “GodotSharp/Tools/nupkgs/”. Note down the directory path; you’ll need it in the next step.", + "markers": {} + }, + "Add a local source for NuGet packages using the following command:\u0000{}": { + "uid": 32, + "tpl": "Add a local source for NuGet packages using the following command:", + "markers": {} + }, + "Your C# project should be able to see LimboAI classes and compile.\u0000{}": { + "uid": 33, + "tpl": "Your C# project should be able to see LimboAI classes and compile.", + "markers": {} + }, + "Regarding GDExtension, I can only confirm success with the module version and C#. Unfortunately, I haven’t had any luck with the GDExtension version yet. If you’ve had success with GDExtension, please let me know via Discord or email.\u0000{}": { + "uid": 34, + "tpl": "Regarding GDExtension, I can only confirm success with the module version and C#. Unfortunately, I haven’t had any luck with the GDExtension version yet. If you’ve had success with GDExtension, please let me know via Discord or email.", + "markers": {} + }, + "Contributing\u0000{}": { + "uid": 35, + "tpl": "Contributing", + "markers": {} + }, + "We target the latest stable version of the Godot Engine for development until a third beta or a release candidate of an upcoming Godot release becomes available. If you want to contribute to the project, please ensure that you are using the corresponding Godot version.\u0000{}": { + "uid": 36, + "tpl": "We target the latest stable version of the Godot Engine for development until a third beta or a release candidate of an upcoming Godot release becomes available. If you want to contribute to the project, please ensure that you are using the corresponding Godot version.", + "markers": {} + }, + "We follow the Godot code style guidelines. Please use <2/> to maintain consistent styling. You can install <3/> hooks for Git using <4/> to automate this process.\u0000{\"1\": \"Godot code style guidelines\", \"2\": \"clang-format\", \"3\": \"pre-commit\", \"4\": \"pre-commit install\"}": { + "uid": 37, + "tpl": "We follow the Godot code style guidelines. Please use <2/> to maintain consistent styling. You can install <3/> hooks for Git using <4/> to automate this process.", + "markers": { + "1": "Godot code style guidelines", + "2": "clang-format", + "3": "pre-commit", + "4": "pre-commit install" + } + }, + "Please keep the minor versions backward-compatible when submitting pull requests.\u0000{}": { + "uid": 38, + "tpl": "Please keep the minor versions backward-compatible when submitting pull requests.", + "markers": {} + }, + "We support building LimboAI as a module for the Godot Engine and as a GDExtension library. Make sure your contribution is compatible with both. Our CI workflow will verify that your changes can be compiled in both configurations.\u0000{}": { + "uid": 39, + "tpl": "We support building LimboAI as a module for the Godot Engine and as a GDExtension library. Make sure your contribution is compatible with both. Our CI workflow will verify that your changes can be compiled in both configurations.", + "markers": {} + }, + "Compiling as module of the Godot Engine\u0000{}": { + "uid": 40, + "tpl": "Compiling as module of the Godot Engine", + "markers": {} + }, + "Clone the Godot Engine repository.\u0000{}": { + "uid": 41, + "tpl": "Clone the Godot Engine repository.", + "markers": {} + }, + "Switch to the latest stable tag.\u0000{}": { + "uid": 42, + "tpl": "Switch to the latest stable tag.", + "markers": {} + }, + "Clone the LimboAI repository into the <1/> directory.\u0000{\"1\": \"modules/limboai\"}": { + "uid": 43, + "tpl": "Clone the LimboAI repository into the <1/> directory.", + "markers": { + "1": "modules/limboai" + } + }, + "Consult the Godot Engine documentation for detailed instructions on building the engine.\u0000{\"1\": \"Godot Engine documentation\"}": { + "uid": 44, + "tpl": "Consult the Godot Engine documentation for detailed instructions on building the engine.", + "markers": { + "1": "Godot Engine documentation" + } + }, + "Unit tests can be compiled using the <1/> build option. To execute them, run the compiled Godot binary with the <2/> command-line options.\u0000{\"1\": \"tests=yes\", \"2\": \"--test --tc=\\\"*[LimboAI]*\\\"\"}": { + "uid": 45, + "tpl": "Unit tests can be compiled using the <1/> build option. To execute them, run the compiled Godot binary with the <2/> command-line options.", + "markers": { + "1": "tests=yes", + "2": "--test --tc=\"*[LimboAI]*\"" + } + }, + "Building C# Packages\u0000{}": { + "uid": 46, + "tpl": "Building C# Packages", + "markers": {} + }, + "If you want C# Support for LimboAI when building from source, follow Godot’s instructions for building from source with C# Support: Compiling with .NET. LimboAI’s classes will be included in the output from that build process.\u0000{\"1\": \"Compiling with .NET\"}": { + "uid": 47, + "tpl": "If you want C# Support for LimboAI when building from source, follow Godot’s instructions for building from source with C# Support: Compiling with .NET. LimboAI’s classes will be included in the output from that build process.", + "markers": { + "1": "Compiling with .NET" + } + }, + "Compiling as GDExtension library\u0000{}": { + "uid": 48, + "tpl": "Compiling as GDExtension library", + "markers": {} + }, + "You’ll need the SCons build tool and a C++ compiler. See also Compiling. Run <2/> to build the plugin library for your current platform.\u0000{\"1\": \"Compiling\", \"2\": \"scons target=editor\"}": { + "uid": 49, + "tpl": "You’ll need the SCons build tool and a C++ compiler. See also Compiling. Run <2/> to build the plugin library for your current platform.", + "markers": { + "1": "Compiling", + "2": "scons target=editor" + } + }, + "SCons will automatically clone the <1/> repository if it doesn’t already exist in the <2/> directory.\u0000{\"1\": \"godot-cpp\", \"2\": \"limboai/godot-cpp\"}": { + "uid": 50, + "tpl": "SCons will automatically clone the <1/> repository if it doesn’t already exist in the <2/> directory.", + "markers": { + "1": "godot-cpp", + "2": "limboai/godot-cpp" + } + }, + "By default, built targets are placed in the demo project: <1/>.\u0000{\"1\": \"demo/addons/limboai/bin/\"}": { + "uid": 51, + "tpl": "By default, built targets are placed in the demo project: <1/>.", + "markers": { + "1": "demo/addons/limboai/bin/" + } + }, + "Check <1/> for other options and targets.\u0000{\"1\": \"scons -h\"}": { + "uid": 52, + "tpl": "Check <1/> for other options and targets.", + "markers": { + "1": "scons -h" + } + }, + "Contributing to the documentation\u0000{}": { + "uid": 53, + "tpl": "Contributing to the documentation", + "markers": {} + }, + "Online documentation is created using Sphinx. Source files are located in the <2/> directory in RST format and can be built locally with <3/>. See the Sphinx documentation for more details.\u0000{\"1\": \"Sphinx\", \"2\": \"doc/source\", \"3\": \"sphinx-build\", \"4\": \"Sphinx documentation\"}": { + "uid": 54, + "tpl": "Online documentation is created using Sphinx. Source files are located in the <2/> directory in RST format and can be built locally with <3/>. See the Sphinx documentation for more details.", + "markers": { + "1": "Sphinx", + "2": "doc/source", + "3": "sphinx-build", + "4": "Sphinx documentation" + } + }, + "Class documentation resides in XML files within the <1/> directory. If you create a new class or modify an existing one, you can run the compiled Godot binary with the <2/> option in the root of the Godot source code to generate the missing XML files or sections within those files in the class documentation. After editing the XML files, please run the compiled editor binary with the <3/> option again to update and tidy up the XML files.\u0000{\"1\": \"doc_classes/\", \"2\": \"--doctool\", \"3\": \"--doctool\"}": { + "uid": 55, + "tpl": "Class documentation resides in XML files within the <1/> directory. If you create a new class or modify an existing one, you can run the compiled Godot binary with the <2/> option in the root of the Godot source code to generate the missing XML files or sections within those files in the class documentation. After editing the XML files, please run the compiled editor binary with the <3/> option again to update and tidy up the XML files.", + "markers": { + "1": "doc_classes/", + "2": "--doctool", + "3": "--doctool" + } + }, + "Sphinx RST files for the class documentation are generated from XML files using the Godot script <1/> and stored in the <2/> directory. This process is performed using our own script <3/>. RST files in <4/> should not be edited manually.\u0000{\"1\": \"make_rst.py\", \"2\": \"doc/source/classes\", \"3\": \"scripts/update_rst.sh\", \"4\": \"doc/source/classes\"}": { + "uid": 56, + "tpl": "Sphinx RST files for the class documentation are generated from XML files using the Godot script <1/> and stored in the <2/> directory. This process is performed using our own script <3/>. RST files in <4/> should not be edited manually.", + "markers": { + "1": "make_rst.py", + "2": "doc/source/classes", + "3": "scripts/update_rst.sh", + "4": "doc/source/classes" + } + }, + "Introduction to Behavior Trees\u0000{}": { + "uid": 57, + "tpl": "Introduction to Behavior Trees", + "markers": {} + }, + "🛈 Note: Demo project includes a tutorial that provides an introduction to behavior trees through illustrative examples.\u0000{}": { + "uid": 58, + "tpl": "🛈 Note: Demo project includes a tutorial that provides an introduction to behavior trees through illustrative examples.", + "markers": {} + }, + "Behavior Trees (BT) are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.\u0000{}": { + "uid": 59, + "tpl": "Behavior Trees (BT) are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.", + "markers": {} + }, + "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include Sequence, Selector, and Invert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. Such tasks can share data using the Blackboard.\u0000{\"1\": \"Sequence\", \"2\": \"Selector\", \"3\": \"Invert\", \"4\": \"BTTask\", \"5\": \"share data using the Blackboard\"}": { + "uid": 60, + "tpl": "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include Sequence, Selector, and Invert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. Such tasks can share data using the Blackboard.", + "markers": { + "1": "Sequence", + "2": "Selector", + "3": "Invert", + "4": "BTTask", + "5": "share data using the Blackboard" + } + }, + "🛈 Note: To create your own actions, extend the BTAction class.\u0000{\"1\": \"create your own actions\", \"2\": \"BTAction\"}": { + "uid": 61, + "tpl": "🛈 Note: To create your own actions, extend the BTAction class.", + "markers": { + "1": "create your own actions", + "2": "BTAction" + } + }, + "A Behavior Tree is usually processed each frame. It is traversed from top to bottom, with the control tasks determining the control flow. Each task has a _tick method, which performs the task’s work and returns a status indicating its progress: <2/>, <3/>, or <4/>. <5/> and <6/> indicate the outcome of finished work, while <7/> status is returned when a task requires more than one tick to complete its job. These statuses determine how the tree progresses, with the <8/> status usually meaning that the tree will continue execution during the next frame.\u0000{\"1\": \"_tick\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\", \"4\": \"RUNNING\", \"5\": \"SUCCESS\", \"6\": \"FAILURE\", \"7\": \"RUNNING\", \"8\": \"RUNNING\"}": { + "uid": 62, + "tpl": "A Behavior Tree is usually processed each frame. It is traversed from top to bottom, with the control tasks determining the control flow. Each task has a _tick method, which performs the task’s work and returns a status indicating its progress: <2/>, <3/>, or <4/>. <5/> and <6/> indicate the outcome of finished work, while <7/> status is returned when a task requires more than one tick to complete its job. These statuses determine how the tree progresses, with the <8/> status usually meaning that the tree will continue execution during the next frame.", + "markers": { + "1": "_tick", + "2": "SUCCESS", + "3": "FAILURE", + "4": "RUNNING", + "5": "SUCCESS", + "6": "FAILURE", + "7": "RUNNING", + "8": "RUNNING" + } + }, + "There are four types of tasks:\u0000{}": { + "uid": 63, + "tpl": "There are four types of tasks:", + "markers": {} + }, + "Actions are leaf tasks that perform the actual work.\u0000{}": { + "uid": 64, + "tpl": "Actions are leaf tasks that perform the actual work.", + "markers": {} + }, + "Examples: PlayAnimation, Wait.\u0000{\"1\": \"PlayAnimation\", \"2\": \"Wait\"}": { + "uid": 65, + "tpl": "Examples: PlayAnimation, Wait.", + "markers": { + "1": "PlayAnimation", + "2": "Wait" + } + }, + "Conditions are leaf tasks that conduct various checks.\u0000{}": { + "uid": 66, + "tpl": "Conditions are leaf tasks that conduct various checks.", + "markers": {} + }, + "Examples: CheckVar, InRange.\u0000{\"1\": \"CheckVar\", \"2\": \"InRange\"}": { + "uid": 67, + "tpl": "Examples: CheckVar, InRange.", + "markers": { + "1": "CheckVar", + "2": "InRange" + } + }, + "Composites can have one or more child tasks, and dictate the execution flow of their children.\u0000{}": { + "uid": 68, + "tpl": "Composites can have one or more child tasks, and dictate the execution flow of their children.", + "markers": {} + }, + "Examples: Sequence, Selector, Parallel.\u0000{\"1\": \"Sequence\", \"2\": \"Selector\", \"3\": \"Parallel\"}": { + "uid": 69, + "tpl": "Examples: Sequence, Selector, Parallel.", + "markers": { + "1": "Sequence", + "2": "Selector", + "3": "Parallel" + } + }, + "Decorators can only have a single child and they change how their child task operates.\u0000{}": { + "uid": 70, + "tpl": "Decorators can only have a single child and they change how their child task operates.", + "markers": {} + }, + "Examples: AlwaysSucceed, Invert, TimeLimit.\u0000{\"1\": \"AlwaysSucceed\", \"2\": \"Invert\", \"3\": \"TimeLimit\"}": { + "uid": 71, + "tpl": "Examples: AlwaysSucceed, Invert, TimeLimit.", + "markers": { + "1": "AlwaysSucceed", + "2": "Invert", + "3": "TimeLimit" + } + }, + "Sequence is one of the core composite tasks. It executes its child tasks sequentially, from first to last, until one of them returns <2/>, or all of them result in <3/>. In other words, if any child task results in <4/>, the Sequence execution will be aborted, and the Sequence itself will return <7/>.\u0000{\"1\": \"Sequence\", \"2\": \"FAILURE\", \"3\": \"SUCCESS\", \"4\": \"FAILURE\", \"5\": \"Sequence\", \"6\": \"Sequence\", \"7\": \"FAILURE\"}": { + "uid": 72, + "tpl": "Sequence is one of the core composite tasks. It executes its child tasks sequentially, from first to last, until one of them returns <2/>, or all of them result in <3/>. In other words, if any child task results in <4/>, the Sequence execution will be aborted, and the Sequence itself will return <7/>.", + "markers": { + "1": "Sequence", + "2": "FAILURE", + "3": "SUCCESS", + "4": "FAILURE", + "5": "Sequence", + "6": "Sequence", + "7": "FAILURE" + } + }, + "Selector is another essential composite task. It executes its child tasks sequentially, from first to last, until one of them returns <2/> or all of them result in <3/>. In other words, when a child task results in <4/>, it moves on to the next one until it finds the one that returns <5/>. Once a child task results in <6/>, the Selector stops and also returns <8/>. The purpose of the Selector is to find a child that succeeds.\u0000{\"1\": \"Selector\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\", \"4\": \"FAILURE\", \"5\": \"SUCCESS\", \"6\": \"SUCCESS\", \"7\": \"Selector\", \"8\": \"SUCCESS\", \"9\": \"Selector\"}": { + "uid": 73, + "tpl": "Selector is another essential composite task. It executes its child tasks sequentially, from first to last, until one of them returns <2/> or all of them result in <3/>. In other words, when a child task results in <4/>, it moves on to the next one until it finds the one that returns <5/>. Once a child task results in <6/>, the Selector stops and also returns <8/>. The purpose of the Selector is to find a child that succeeds.", + "markers": { + "1": "Selector", + "2": "SUCCESS", + "3": "FAILURE", + "4": "FAILURE", + "5": "SUCCESS", + "6": "SUCCESS", + "7": "Selector", + "8": "SUCCESS", + "9": "Selector" + } + }, + "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with Sequence and Selector to craft your decision-making logic.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\", \"3\": \"Sequence\", \"4\": \"Selector\"}": { + "uid": 74, + "tpl": "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with Sequence and Selector to craft your decision-making logic.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "Sequence", + "4": "Selector" + } + }, + "🛈 Note: To create your own conditions, extend the BTCondition class.\u0000{\"1\": \"create your own conditions\", \"2\": \"BTCondition\"}": { + "uid": 75, + "tpl": "🛈 Note: To create your own conditions, extend the BTCondition class.", + "markers": { + "1": "create your own conditions", + "2": "BTCondition" + } + }, + "Check out the BTTask class documentation, which provides the foundation for various building blocks of Behavior Trees.\u0000{\"1\": \"BTTask\"}": { + "uid": 76, + "tpl": "Check out the BTTask class documentation, which provides the foundation for various building blocks of Behavior Trees.", + "markers": { + "1": "BTTask" + } + }, + "Creating Behavior Trees\u0000{}": { + "uid": 77, + "tpl": "Creating Behavior Trees", + "markers": {} + }, + "This chapter describes how to create and debug behavior trees.\u0000{}": { + "uid": 78, + "tpl": "This chapter describes how to create and debug behavior trees.", + "markers": {} + }, + "Add a Behavior Tree to an agent\u0000{}": { + "uid": 79, + "tpl": "Add a Behavior Tree to an agent", + "markers": {} + }, + "Follow these steps to add a behavior tree to a new or existing agent:\u0000{}": { + "uid": 80, + "tpl": "Follow these steps to add a behavior tree to a new or existing agent:", + "markers": {} + }, + "Make a scene file for your agent, or open an existing scene.\u0000{}": { + "uid": 81, + "tpl": "Make a scene file for your agent, or open an existing scene.", + "markers": {} + }, + "Add a BTPlayer node to your scene.\u0000{\"1\": \"BTPlayer\"}": { + "uid": 82, + "tpl": "Add a BTPlayer node to your scene.", + "markers": { + "1": "BTPlayer" + } + }, + "Select BTPlayer, and create a new behavior tree in the inspector.\u0000{\"1\": \"BTPlayer\"}": { + "uid": 83, + "tpl": "Select BTPlayer, and create a new behavior tree in the inspector.", + "markers": { + "1": "BTPlayer" + } + }, + "Optionally, you can save the behavior tree to a file using the property’s context menu.\u0000{}": { + "uid": 84, + "tpl": "Optionally, you can save the behavior tree to a file using the property’s context menu.", + "markers": {} + }, + "Click the behavior tree property to open it in the LimboAI editor.\u0000{}": { + "uid": 85, + "tpl": "Click the behavior tree property to open it in the LimboAI editor.", + "markers": {} + }, + "Debugging Behavior Trees\u0000{}": { + "uid": 86, + "tpl": "Debugging Behavior Trees", + "markers": {} + }, + "In Godot Engine, follow to “Bottom Panel > Debugger > LimboAI” tab. With the LimboAI debugger, you can inspect any currently active behavior tree within the running project. The debugger can be detached from the main editor window, which can be particularly useful if you have a HiDPI or a secondary display.\u0000{}": { + "uid": 87, + "tpl": "In Godot Engine, follow to “Bottom Panel > Debugger > LimboAI” tab. With the LimboAI debugger, you can inspect any currently active behavior tree within the running project. The debugger can be detached from the main editor window, which can be particularly useful if you have a HiDPI or a secondary display.", + "markers": {} + }, + "Inspecting task properties and blackboard\u0000{}": { + "uid": 88, + "tpl": "Inspecting task properties and blackboard", + "markers": {} + }, + "When you click on a task in the LimboAI debugger, its properties are shown in the remote Inspector panel, including the Blackboard reference. Click the Blackboard to open it and view all variables across the full scope chain, grouped by scope. You can also edit variable values live, which can be useful for testing and debugging your game’s AI.\u0000{\"1\": \"Blackboard\", \"2\": \"Blackboard\"}": { + "uid": 89, + "tpl": "When you click on a task in the LimboAI debugger, its properties are shown in the remote Inspector panel, including the Blackboard reference. Click the Blackboard to open it and view all variables across the full scope chain, grouped by scope. You can also edit variable values live, which can be useful for testing and debugging your game’s AI.", + "markers": { + "1": "Blackboard", + "2": "Blackboard" + } + }, + "Creating custom tasks\u0000{}": { + "uid": 90, + "tpl": "Creating custom tasks", + "markers": {} + }, + "By default, user tasks should be placed in the <1/> directory. You can set an alternative location for user tasks in the <2/> (To see those options, <3/> should be enabled in the Project Settings).\u0000{\"1\": \"res://ai/tasks\", \"2\": \"Project Settings \\u2192 Limbo AI\", \"3\": \"Advanced Settings\"}": { + "uid": 91, + "tpl": "By default, user tasks should be placed in the <1/> directory. You can set an alternative location for user tasks in the <2/> (To see those options, <3/> should be enabled in the Project Settings).", + "markers": { + "1": "res://ai/tasks", + "2": "Project Settings → Limbo AI", + "3": "Advanced Settings" + } + }, + "Each subdirectory within the user tasks directory is treated as a category. Therefore, if you create a subdirectory named “motion_and_physics,” your custom tasks in that directory will automatically be categorized under “Motion And Physics.”\u0000{}": { + "uid": 92, + "tpl": "Each subdirectory within the user tasks directory is treated as a category. Therefore, if you create a subdirectory named “motion_and_physics,” your custom tasks in that directory will automatically be categorized under “Motion And Physics.”", + "markers": {} + }, + "When creating custom tasks, extend one of the following base classes: BTAction, BTCondition, BTDecorator, BTComposite. More on task types you can read in the Introduction to Behavior Trees.\u0000{\"1\": \"BTAction\", \"2\": \"BTCondition\", \"3\": \"BTDecorator\", \"4\": \"BTComposite\", \"5\": \"Introduction to Behavior Trees\"}": { + "uid": 93, + "tpl": "When creating custom tasks, extend one of the following base classes: BTAction, BTCondition, BTDecorator, BTComposite. More on task types you can read in the Introduction to Behavior Trees.", + "markers": { + "1": "BTAction", + "2": "BTCondition", + "3": "BTDecorator", + "4": "BTComposite", + "5": "Introduction to Behavior Trees" + } + }, + "🛈 Note: To help you write new tasks, you can add a script template to your project using “Misc → Create script template” menu option.\u0000{}": { + "uid": 94, + "tpl": "🛈 Note: To help you write new tasks, you can add a script template to your project using “Misc → Create script template” menu option.", + "markers": {} + }, + "Using the Blackboard is covered in Accessing the Blackboard in a Task.\u0000{\"1\": \"Blackboard\", \"2\": \"Accessing the Blackboard in a Task\"}": { + "uid": 95, + "tpl": "Using the Blackboard is covered in Accessing the Blackboard in a Task.", + "markers": { + "1": "Blackboard", + "2": "Accessing the Blackboard in a Task" + } + }, + "Task anatomy\u0000{}": { + "uid": 96, + "tpl": "Task anatomy", + "markers": {} + }, + "Example 1: A simple action\u0000{}": { + "uid": 97, + "tpl": "Example 1: A simple action", + "markers": {} + }, + "Example 2: InRange condition\u0000{}": { + "uid": 98, + "tpl": "Example 2: InRange condition", + "markers": {} + }, + "Creating tasks in C#\u0000{}": { + "uid": 99, + "tpl": "Creating tasks in C#", + "markers": {} + }, + "You can use the following script template for custom tasks:\u0000{}": { + "uid": 100, + "tpl": "You can use the following script template for custom tasks:", + "markers": {} + }, + "Sharing data using Blackboard\u0000{}": { + "uid": 101, + "tpl": "Sharing data using Blackboard", + "markers": {} + }, + "To share data between different tasks and states, we employ a feature known as the Blackboard. The Blackboard serves as a central repository where tasks and states can store and retrieve named variables, allowing for seamless data interchange. Each instance of a behavior tree or a state machine gets its own dedicated Blackboard. It has the capability to store various data types, including objects and resources.\u0000{\"1\": \"Blackboard\", \"2\": \"Blackboard\", \"3\": \"Blackboard\"}": { + "uid": 102, + "tpl": "To share data between different tasks and states, we employ a feature known as the Blackboard. The Blackboard serves as a central repository where tasks and states can store and retrieve named variables, allowing for seamless data interchange. Each instance of a behavior tree or a state machine gets its own dedicated Blackboard. It has the capability to store various data types, including objects and resources.", + "markers": { + "1": "Blackboard", + "2": "Blackboard", + "3": "Blackboard" + } + }, + "Using the Blackboard, you can easily share data in your behavior trees, making the tasks in the behavior tree more flexible.\u0000{\"1\": \"Blackboard\"}": { + "uid": 103, + "tpl": "Using the Blackboard, you can easily share data in your behavior trees, making the tasks in the behavior tree more flexible.", + "markers": { + "1": "Blackboard" + } + }, + "Accessing the Blackboard in a Task\u0000{}": { + "uid": 104, + "tpl": "Accessing the Blackboard in a Task", + "markers": {} + }, + "Every BTTask has access to the Blackboard, providing a straightforward mechanism for data exchange. Here’s an example of how you can interact with the Blackboard in GDScript:\u0000{\"1\": \"BTTask\", \"2\": \"Blackboard\", \"3\": \"Blackboard\"}": { + "uid": 105, + "tpl": "Every BTTask has access to the Blackboard, providing a straightforward mechanism for data exchange. Here’s an example of how you can interact with the Blackboard in GDScript:", + "markers": { + "1": "BTTask", + "2": "Blackboard", + "3": "Blackboard" + } + }, + "If you are accessing a variable that holds an object instance, and it is expected that the instance may be null or freed, you can do it like this:\u0000{}": { + "uid": 106, + "tpl": "If you are accessing a variable that holds an object instance, and it is expected that the instance may be null or freed, you can do it like this:", + "markers": {} + }, + "It is recommended to suffix variable name properties with <1/>, like in the example above, which enables the inspector to provide a more convenient property editor for the variable. This editor allows you to select or add the variable to the blackboard plan, and provides a warning icon if the variable does not exist in the blackboard plan.\u0000{\"1\": \"_var\"}": { + "uid": 107, + "tpl": "It is recommended to suffix variable name properties with <1/>, like in the example above, which enables the inspector to provide a more convenient property editor for the variable. This editor allows you to select or add the variable to the blackboard plan, and provides a warning icon if the variable does not exist in the blackboard plan.", + "markers": { + "1": "_var" + } + }, + "🛈 Note: The variable doesn’t need to exist when you set it in code.\u0000{}": { + "uid": 108, + "tpl": "🛈 Note: The variable doesn’t need to exist when you set it in code.", + "markers": {} + }, + "Editing the Blackboard Plan\u0000{}": { + "uid": 109, + "tpl": "Editing the Blackboard Plan", + "markers": {} + }, + "The Blackboard Plan, associated with each BehaviorTree resource, dictates how the Blackboard initializes for each new instance of the BehaviorTree. BlackboardPlan resource stores default values, type information, and data bindings necessary for BehaviorTree initialization.\u0000{\"1\": \"BehaviorTree\", \"2\": \"Blackboard\", \"3\": \"BehaviorTree\", \"4\": \"BehaviorTree\"}": { + "uid": 110, + "tpl": "The Blackboard Plan, associated with each BehaviorTree resource, dictates how the Blackboard initializes for each new instance of the BehaviorTree. BlackboardPlan resource stores default values, type information, and data bindings necessary for BehaviorTree initialization.", + "markers": { + "1": "BehaviorTree", + "2": "Blackboard", + "3": "BehaviorTree", + "4": "BehaviorTree" + } + }, + "To add, modify, or remove variables from the Blackboard Plan, follow these steps:\u0000{}": { + "uid": 111, + "tpl": "To add, modify, or remove variables from the Blackboard Plan, follow these steps:", + "markers": {} + }, + "Open the LimboAI editor and load the behavior tree you want to edit.\u0000{}": { + "uid": 112, + "tpl": "Open the LimboAI editor and load the behavior tree you want to edit.", + "markers": {} + }, + "In the editor, click on the small button located inside the tab. This will open the BlackboardPlan in the Inspector.\u0000{\"1\": \"BlackboardPlan\"}": { + "uid": 113, + "tpl": "In the editor, click on the small button located inside the tab. This will open the BlackboardPlan in the Inspector.", + "markers": { + "1": "BlackboardPlan" + } + }, + "In the Inspector, click the “Manage…” button to show the blackboard plan editor.\u0000{}": { + "uid": 114, + "tpl": "In the Inspector, click the “Manage…” button to show the blackboard plan editor.", + "markers": {} + }, + "In the blackboard plan editor, you can add, remove, or reorder variables, and modify their data type and hint.\u0000{}": { + "uid": 115, + "tpl": "In the blackboard plan editor, you can add, remove, or reorder variables, and modify their data type and hint.", + "markers": {} + }, + "The hint provides additional information about the variable to the Inspector, such as minimum and maximum values for an integer variable. Learn more about property hints in the official Godot documentation.\u0000{\"1\": \"property hints in the official Godot documentation\"}": { + "uid": 116, + "tpl": "The hint provides additional information about the variable to the Inspector, such as minimum and maximum values for an integer variable. Learn more about property hints in the official Godot documentation.", + "markers": { + "1": "property hints in the official Godot documentation" + } + }, + "You can specify the default values of the variables directly in the Inspector.\u0000{}": { + "uid": 117, + "tpl": "You can specify the default values of the variables directly in the Inspector.", + "markers": {} + }, + "Overriding variables in BTPlayer\u0000{}": { + "uid": 118, + "tpl": "Overriding variables in BTPlayer", + "markers": {} + }, + "Each BTPlayer node also has a “Blackboard Plan” property, providing the ability to override values of the BehaviorTree’s blackboard variables. These overrides are specific to the BTPlayer’s scene and do not impact other scenes using the same BehaviorTree. To modify these values:\u0000{\"1\": \"BTPlayer\", \"2\": \"BehaviorTree\"}": { + "uid": 119, + "tpl": "Each BTPlayer node also has a “Blackboard Plan” property, providing the ability to override values of the BehaviorTree’s blackboard variables. These overrides are specific to the BTPlayer’s scene and do not impact other scenes using the same BehaviorTree. To modify these values:", + "markers": { + "1": "BTPlayer", + "2": "BehaviorTree" + } + }, + "Select the BTPlayer node in the scene tree.\u0000{}": { + "uid": 120, + "tpl": "Select the BTPlayer node in the scene tree.", + "markers": {} + }, + "In the Inspector, locate the “Blackboard Plan” property.\u0000{}": { + "uid": 121, + "tpl": "In the Inspector, locate the “Blackboard Plan” property.", + "markers": {} + }, + "Override the desired values to tailor the blackboard variables for the specific scene.\u0000{}": { + "uid": 122, + "tpl": "Override the desired values to tailor the blackboard variables for the specific scene.", + "markers": {} + }, + "Task parameters\u0000{}": { + "uid": 123, + "tpl": "Task parameters", + "markers": {} + }, + "In some cases, it can be beneficial to allow behavior tree tasks to export parameters that can either be bound to a blackboard variable or specified directly by the user. For this purpose, LimboAI provides special parameter types that begin with “BB”, such as BBInt, BBBool, BBString, BBFloat, BBNode, and more. For a complete list, please refer to the BBParam class reference.\u0000{\"1\": \"BBInt\", \"2\": \"BBBool\", \"3\": \"BBString\", \"4\": \"BBFloat\", \"5\": \"BBNode\", \"6\": \"BBParam\"}": { + "uid": 124, + "tpl": "In some cases, it can be beneficial to allow behavior tree tasks to export parameters that can either be bound to a blackboard variable or specified directly by the user. For this purpose, LimboAI provides special parameter types that begin with “BB”, such as BBInt, BBBool, BBString, BBFloat, BBNode, and more. For a complete list, please refer to the BBParam class reference.", + "markers": { + "1": "BBInt", + "2": "BBBool", + "3": "BBString", + "4": "BBFloat", + "5": "BBNode", + "6": "BBParam" + } + }, + "Usage example:\u0000{}": { + "uid": 125, + "tpl": "Usage example:", + "markers": {} + }, + "Connecting variables in BTs to HSMs: Variable mapping\u0000{}": { + "uid": 126, + "tpl": "Connecting variables in BTs to HSMs: Variable mapping", + "markers": {} + }, + "Each BTState creates a new blackboard scope for its BehaviorTree instance. Because BehaviorTrees are reusable resources that can run in different contexts or on different agents, they do not automatically see variables defined in the HSM. At runtime, HSM variables are usually accessible inside the BT via the parent scope blackboard, but the recommended way to access them is through mapping.\u0000{\"1\": \"BTState\"}": { + "uid": 127, + "tpl": "Each BTState creates a new blackboard scope for its BehaviorTree instance. Because BehaviorTrees are reusable resources that can run in different contexts or on different agents, they do not automatically see variables defined in the HSM. At runtime, HSM variables are usually accessible inside the BT via the parent scope blackboard, but the recommended way to access them is through mapping.", + "markers": { + "1": "BTState" + } + }, + "Note\u0000{}": { + "uid": 128, + "tpl": "Note", + "markers": {} + }, + "To learn more about scopes, see Blackboard.\u0000{\"1\": \"Blackboard\"}": { + "uid": 129, + "tpl": "To learn more about scopes, see Blackboard.", + "markers": { + "1": "Blackboard" + } + }, + "When both the BehaviorTree and the HSM declare variables in their respective BlackboardPlan resources, the editor provides a Mapping section in the BlackboardPlan inspector. Mapping is the intended and recommended way to connect variables between related plans.\u0000{\"1\": \"BlackboardPlan\"}": { + "uid": 130, + "tpl": "When both the BehaviorTree and the HSM declare variables in their respective BlackboardPlan resources, the editor provides a Mapping section in the BlackboardPlan inspector. Mapping is the intended and recommended way to connect variables between related plans.", + "markers": { + "1": "BlackboardPlan" + } + }, + "Key points about mapping\u0000{}": { + "uid": 131, + "tpl": "Key points about mapping", + "markers": {} + }, + "Mapping connects two variables so they behave as a single logical variable at runtime.\u0000{}": { + "uid": 132, + "tpl": "Mapping connects two variables so they behave as a single logical variable at runtime.", + "markers": {} + }, + "Linked variables are updated immediately in both scopes — they literally share the same state in memory (no polling or copying).\u0000{}": { + "uid": 133, + "tpl": "Linked variables are updated immediately in both scopes — they literally share the same state in memory (no polling or copying).", + "markers": {} + }, + "Mapping is explicit: you decide which variables the BT exposes as inputs and outputs.\u0000{}": { + "uid": 134, + "tpl": "Mapping is explicit: you decide which variables the BT exposes as inputs and outputs.", + "markers": {} + }, + "Linkage is bidirectional — there is no distinction between input and output.\u0000{}": { + "uid": 135, + "tpl": "Linkage is bidirectional — there is no distinction between input and output.", + "markers": {} + }, + "Mapping does not create new variables automatically — the variables must already exist in both blackboard plans before they can be linked.\u0000{}": { + "uid": 136, + "tpl": "Mapping does not create new variables automatically — the variables must already exist in both blackboard plans before they can be linked.", + "markers": {} + }, + "Inspector workflow\u0000{}": { + "uid": 137, + "tpl": "Inspector workflow", + "markers": {} + }, + "Define the required variables in each BlackboardPlan (HSM plan and BT plan, for example).\u0000{}": { + "uid": 138, + "tpl": "Define the required variables in each BlackboardPlan (HSM plan and BT plan, for example).", + "markers": {} + }, + "Select the BTState node in the scene or a BTSubtree inside a behavior tree.\u0000{\"1\": \"BTState\", \"2\": \"BTSubtree\"}": { + "uid": 139, + "tpl": "Select the BTState node in the scene or a BTSubtree inside a behavior tree.", + "markers": { + "1": "BTState", + "2": "BTSubtree" + } + }, + "In the Inspector, select the Blackboard Plan property.\u0000{}": { + "uid": 140, + "tpl": "In the Inspector, select the Blackboard Plan property.", + "markers": {} + }, + "In the BlackboardPlan resource inspector, locate the Mapping section.\u0000{}": { + "uid": 141, + "tpl": "In the BlackboardPlan resource inspector, locate the Mapping section.", + "markers": {} + }, + "Create mappings by pairing variables (<1/>).\u0000{\"1\": \"BT variable \\u2194 parent variable\"}": { + "uid": 142, + "tpl": "Create mappings by pairing variables (<1/>).", + "markers": { + "1": "BT variable ↔ parent variable" + } + }, + "On startup the mappings are applied, and the variables are automatically linked for the running instance.\u0000{}": { + "uid": 143, + "tpl": "On startup the mappings are applied, and the variables are automatically linked for the running instance.", + "markers": {} + }, + "Programmatic alternative: linking variables in code\u0000{}": { + "uid": 144, + "tpl": "Programmatic alternative: linking variables in code", + "markers": {} + }, + "You can also link variables directly in code using Blackboard.link_var:\u0000{\"1\": \"Blackboard.link_var\"}": { + "uid": 145, + "tpl": "You can also link variables directly in code using Blackboard.link_var:", + "markers": { + "1": "Blackboard.link_var" + } + }, + "Best practices\u0000{}": { + "uid": 146, + "tpl": "Best practices", + "markers": {} + }, + "Declare all BT dependencies in the BT’s BlackboardPlan instead of relying on parent scopes.\u0000{}": { + "uid": 147, + "tpl": "Declare all BT dependencies in the BT’s BlackboardPlan instead of relying on parent scopes.", + "markers": {} + }, + "Use Mapping to explicitly declare which variables should be shared with the HSM.\u0000{}": { + "uid": 148, + "tpl": "Use Mapping to explicitly declare which variables should be shared with the HSM.", + "markers": {} + }, + "Prefer the inspector-based Mapping workflow for clarity and editor support; use <1/> only when runtime or programmatic setup is required.\u0000{\"1\": \"link_var\"}": { + "uid": 149, + "tpl": "Prefer the inspector-based Mapping workflow for clarity and editor support; use <1/> only when runtime or programmatic setup is required.", + "markers": { + "1": "link_var" + } + }, + "Avoid writing to <1/> from inside BT tasks unless you have a very specific reason and accept the coupling it introduces.\u0000{\"1\": \"blackboard.get_parent()\"}": { + "uid": 150, + "tpl": "Avoid writing to <1/> from inside BT tasks unless you have a very specific reason and accept the coupling it introduces.", + "markers": { + "1": "blackboard.get_parent()" + } + }, + "Advanced topic: Blackboard scopes\u0000{}": { + "uid": 151, + "tpl": "Advanced topic: Blackboard scopes", + "markers": {} + }, + "The Blackboard in LimboAI can act as a parent scope for another Blackboard. This means that if a specific variable is not found in the active scope, the system will look in the parent Blackboard to find it. This creates a “blackboard scope chain,” where each Blackboard can have its own parent scope, and there is no limit to how many blackboards can be in this chain. It’s important to note that the Blackboard doesn’t modify values in the parent scopes.\u0000{\"1\": \"Blackboard\", \"2\": \"Blackboard\", \"3\": \"Blackboard\", \"4\": \"Blackboard\", \"5\": \"Blackboard\"}": { + "uid": 152, + "tpl": "The Blackboard in LimboAI can act as a parent scope for another Blackboard. This means that if a specific variable is not found in the active scope, the system will look in the parent Blackboard to find it. This creates a “blackboard scope chain,” where each Blackboard can have its own parent scope, and there is no limit to how many blackboards can be in this chain. It’s important to note that the Blackboard doesn’t modify values in the parent scopes.", + "markers": { + "1": "Blackboard", + "2": "Blackboard", + "3": "Blackboard", + "4": "Blackboard", + "5": "Blackboard" + } + }, + "Scopes are created automatically to prevent naming collisions between contextually separate environments:\u0000{}": { + "uid": 153, + "tpl": "Scopes are created automatically to prevent naming collisions between contextually separate environments:", + "markers": {} + }, + "Within BTNewScope.\u0000{\"1\": \"BTNewScope\"}": { + "uid": 154, + "tpl": "Within BTNewScope.", + "markers": { + "1": "BTNewScope" + } + }, + "Under BTSubtree decorators.\u0000{\"1\": \"BTSubtree\"}": { + "uid": 155, + "tpl": "Under BTSubtree decorators.", + "markers": { + "1": "BTSubtree" + } + }, + "With LimboState that have a non-empty blackboard plan defined.\u0000{\"1\": \"LimboState\"}": { + "uid": 156, + "tpl": "With LimboState that have a non-empty blackboard plan defined.", + "markers": { + "1": "LimboState" + } + }, + "Under LimboHSM nodes: A new scope is created at the root level, and each BTState child also receives its own separate scope.\u0000{\"1\": \"LimboHSM\", \"2\": \"BTState\"}": { + "uid": 157, + "tpl": "Under LimboHSM nodes: A new scope is created at the root level, and each BTState child also receives its own separate scope.", + "markers": { + "1": "LimboHSM", + "2": "BTState" + } + }, + "Sharing data between several agents\u0000{}": { + "uid": 158, + "tpl": "Sharing data between several agents", + "markers": {} + }, + "The blackboard scope mechanism can also be used for sharing data between several agents. In the following example, we have a group of agents, and we want to share a common target between them:\u0000{}": { + "uid": 159, + "tpl": "The blackboard scope mechanism can also be used for sharing data between several agents. In the following example, we have a group of agents, and we want to share a common target between them:", + "markers": {} + }, + "In this example, blackboard.top() accesses the root scope of the Blackboard chain. We assign that scope to each agent in a group through code:\u0000{\"1\": \"blackboard.top()\", \"2\": \"Blackboard\"}": { + "uid": 160, + "tpl": "In this example, blackboard.top() accesses the root scope of the Blackboard chain. We assign that scope to each agent in a group through code:", + "markers": { + "1": "blackboard.top()", + "2": "Blackboard" + } + }, + "In conclusion, the Blackboard scope chain not only prevents naming conflicts that can occur between state machines, behavior trees, and sub-trees, but it can also be used to share data between several agents.\u0000{\"1\": \"Blackboard\"}": { + "uid": 161, + "tpl": "In conclusion, the Blackboard scope chain not only prevents naming conflicts that can occur between state machines, behavior trees, and sub-trees, but it can also be used to share data between several agents.", + "markers": { + "1": "Blackboard" + } + }, + "Debugging blackboard variables\u0000{}": { + "uid": 162, + "tpl": "Debugging blackboard variables", + "markers": {} + }, + "When debugging a running project, you can inspect Blackboard variables in the remote Inspector. Click on a task in the LimboAI debugger to view its properties, then click the Blackboard reference to see all variables across the full scope chain, grouped by scope. Variables can be edited live to aid in debugging. For state machines, select a LimboState node in the Remote Scene Tree to access its Blackboard in the same way.\u0000{\"1\": \"Blackboard\", \"2\": \"Blackboard\", \"3\": \"LimboState\", \"4\": \"Blackboard\"}": { + "uid": 163, + "tpl": "When debugging a running project, you can inspect Blackboard variables in the remote Inspector. Click on a task in the LimboAI debugger to view its properties, then click the Blackboard reference to see all variables across the full scope chain, grouped by scope. Variables can be edited live to aid in debugging. For state machines, select a LimboState node in the Remote Scene Tree to access its Blackboard in the same way.", + "markers": { + "1": "Blackboard", + "2": "Blackboard", + "3": "LimboState", + "4": "Blackboard" + } + }, + "Accessing nodes in the scene tree\u0000{}": { + "uid": 164, + "tpl": "Accessing nodes in the scene tree", + "markers": {} + }, + "There are several ways to access nodes in the agent’s scene tree from a BTTask.\u0000{\"1\": \"BTTask\"}": { + "uid": 165, + "tpl": "There are several ways to access nodes in the agent’s scene tree from a BTTask.", + "markers": { + "1": "BTTask" + } + }, + "🛈 Note: The root node of the agent’s scene tree can be accessed with the scene_root property.\u0000{\"1\": \"scene_root\"}": { + "uid": 166, + "tpl": "🛈 Note: The root node of the agent’s scene tree can be accessed with the scene_root property.", + "markers": { + "1": "scene_root" + } + }, + "With <1/> property\u0000{\"1\": \"BBNode\"}": { + "uid": 167, + "tpl": "With <1/> property", + "markers": { + "1": "BBNode" + } + }, + "With <1/> property\u0000{\"1\": \"NodePath\"}": { + "uid": 168, + "tpl": "With <1/> property", + "markers": { + "1": "NodePath" + } + }, + "Using blackboard plan\u0000{}": { + "uid": 169, + "tpl": "Using blackboard plan", + "markers": {} + }, + "You can create a blackboard variable in the editor with the type <2/> and point it to the proper node in the BTPlayer blackboard plan. By default, any <4/> variable will be replaced with the node instance when the blackboard is instantiated at runtime (see BlackboardPlan.prefetch_nodepath_vars).\u0000{\"1\": \"create a blackboard variable\", \"2\": \"NodePath\", \"3\": \"BTPlayer\", \"4\": \"NodePath\", \"5\": \"BlackboardPlan.prefetch_nodepath_vars\"}": { + "uid": 170, + "tpl": "You can create a blackboard variable in the editor with the type <2/> and point it to the proper node in the BTPlayer blackboard plan. By default, any <4/> variable will be replaced with the node instance when the blackboard is instantiated at runtime (see BlackboardPlan.prefetch_nodepath_vars).", + "markers": { + "1": "create a blackboard variable", + "2": "NodePath", + "3": "BTPlayer", + "4": "NodePath", + "5": "BlackboardPlan.prefetch_nodepath_vars" + } + }, + "The property BTPlayer.prefetch_nodepath_vars should be set to <1/>.\u0000{\"1\": \"true\"}": { + "uid": 171, + "tpl": "The property BTPlayer.prefetch_nodepath_vars should be set to <1/>.", + "markers": { + "1": "true" + } + }, + "Create State Machines\u0000{}": { + "uid": 172, + "tpl": "Create State Machines", + "markers": {} + }, + "This guide will show how to set up and use a state machine using LimboHSM.\u0000{\"1\": \"LimboHSM\"}": { + "uid": 173, + "tpl": "This guide will show how to set up and use a state machine using LimboHSM.", + "markers": { + "1": "LimboHSM" + } + }, + "Initialization\u0000{}": { + "uid": 174, + "tpl": "Initialization", + "markers": {} + }, + "To use the LimboHSM state machine, you first need to initialize it in your code. This is typically done in the <2/> function of your script. Here’s an example of how to do this:\u0000{\"1\": \"LimboHSM\", \"2\": \"_ready\"}": { + "uid": 175, + "tpl": "To use the LimboHSM state machine, you first need to initialize it in your code. This is typically done in the <2/> function of your script. Here’s an example of how to do this:", + "markers": { + "1": "LimboHSM", + "2": "_ready" + } + }, + "In this example, we first declare the state machine and the states we want to use. Then, in the <1/> function, we add transitions between the states. Finally, we initialize the state machine and set it to active.\u0000{\"1\": \"_init_state_machine\"}": { + "uid": 176, + "tpl": "In this example, we first declare the state machine and the states we want to use. Then, in the <1/> function, we add transitions between the states. Finally, we initialize the state machine and set it to active.", + "markers": { + "1": "_init_state_machine" + } + }, + "State example\u0000{}": { + "uid": 177, + "tpl": "State example", + "markers": {} + }, + "You can define the behavior of a state in a script and attach it to the state node. Here’s an example of a state that plays an animation on an <1/> and waits for it to finish:\u0000{\"1\": \"AnimationPlayer\"}": { + "uid": 178, + "tpl": "You can define the behavior of a state in a script and attach it to the state node. Here’s an example of a state that plays an animation on an <1/> and waits for it to finish:", + "markers": { + "1": "AnimationPlayer" + } + }, + "In this example, the <1/> method is called when the state is entered, and it plays the specified animation. The <2/> method is called every frame, and it checks if the animation is finished. If it is, it dispatches the <3/> event, which can result in a transition to the next state.\u0000{\"1\": \"_enter\", \"2\": \"_update\", \"3\": \"EVENT_FINISHED\"}": { + "uid": 179, + "tpl": "In this example, the <1/> method is called when the state is entered, and it plays the specified animation. The <2/> method is called every frame, and it checks if the animation is finished. If it is, it dispatches the <3/> event, which can result in a transition to the next state.", + "markers": { + "1": "_enter", + "2": "_update", + "3": "EVENT_FINISHED" + } + }, + "Events and transitions\u0000{}": { + "uid": 180, + "tpl": "Events and transitions", + "markers": {} + }, + "The LimboHSM comes with an event system that helps to decouple transitions from the state implementations. A transition is associated with a specific event, a starting state, and a destination state, and it is performed automatically when such an event is dispatched.\u0000{\"1\": \"LimboHSM\"}": { + "uid": 181, + "tpl": "The LimboHSM comes with an event system that helps to decouple transitions from the state implementations. A transition is associated with a specific event, a starting state, and a destination state, and it is performed automatically when such an event is dispatched.", + "markers": { + "1": "LimboHSM" + } + }, + "To register a transition and associate it with a specific event, you can use the LimboHSM.add_transition method:\u0000{\"1\": \"LimboHSM.add_transition\"}": { + "uid": 182, + "tpl": "To register a transition and associate it with a specific event, you can use the LimboHSM.add_transition method:", + "markers": { + "1": "LimboHSM.add_transition" + } + }, + "In this example, we’re registering a transition from the <1/> to the <2/> when the <3/> event is dispatched.\u0000{\"1\": \"idle_state\", \"2\": \"move_state\", \"3\": \"movement_started\"}": { + "uid": 183, + "tpl": "In this example, we’re registering a transition from the <1/> to the <2/> when the <3/> event is dispatched.", + "markers": { + "1": "idle_state", + "2": "move_state", + "3": "movement_started" + } + }, + "A transition can be also associated with no particular starting state:\u0000{}": { + "uid": 184, + "tpl": "A transition can be also associated with no particular starting state:", + "markers": {} + }, + "Events are dispatched with the LimboState.dispatch method. It’s important to note that this method can be called from anywhere in the state machine hierarchy and outside of it. Events are propagated from the leaf to the root state. This means that if an event is consumed by a state, it won’t be propagated to its parent states.\u0000{\"1\": \"LimboState.dispatch\"}": { + "uid": 185, + "tpl": "Events are dispatched with the LimboState.dispatch method. It’s important to note that this method can be called from anywhere in the state machine hierarchy and outside of it. Events are propagated from the leaf to the root state. This means that if an event is consumed by a state, it won’t be propagated to its parent states.", + "markers": { + "1": "LimboState.dispatch" + } + }, + "States can also define event handlers, which are methods that react to specific events. These event handlers typically don’t result in a state transition; they are simply a mechanism for states to react to particular events. You can use the LimboState.add_event_handler method to register event handlers in your states:\u0000{\"1\": \"LimboState.add_event_handler\"}": { + "uid": 186, + "tpl": "States can also define event handlers, which are methods that react to specific events. These event handlers typically don’t result in a state transition; they are simply a mechanism for states to react to particular events. You can use the LimboState.add_event_handler method to register event handlers in your states:", + "markers": { + "1": "LimboState.add_event_handler" + } + }, + "If the event handler returns <1/>, the event will be considered as consumed, and it won’t propagate further or result in a state transition.\u0000{\"1\": \"true\"}": { + "uid": 187, + "tpl": "If the event handler returns <1/>, the event will be considered as consumed, and it won’t propagate further or result in a state transition.", + "markers": { + "1": "true" + } + }, + "State anatomy\u0000{}": { + "uid": 188, + "tpl": "State anatomy", + "markers": {} + }, + "Using behavior trees with state machines\u0000{}": { + "uid": 189, + "tpl": "Using behavior trees with state machines", + "markers": {} + }, + "The BTState is a specialized state node in LimboHSM that can host a behavior tree. When a BTState is active, it executes the hosted behavior tree each frame, effectively using the behavior tree as its implementation.\u0000{\"1\": \"BTState\", \"2\": \"LimboHSM\", \"3\": \"BTState\"}": { + "uid": 190, + "tpl": "The BTState is a specialized state node in LimboHSM that can host a behavior tree. When a BTState is active, it executes the hosted behavior tree each frame, effectively using the behavior tree as its implementation.", + "markers": { + "1": "BTState", + "2": "LimboHSM", + "3": "BTState" + } + }, + "This allows you to combine the power of behavior trees with the structure and control of state machines. Behavior trees are excellent for defining complex, hierarchical behaviors, while state machines are great for managing the flow and transitions between different behaviors.\u0000{}": { + "uid": 191, + "tpl": "This allows you to combine the power of behavior trees with the structure and control of state machines. Behavior trees are excellent for defining complex, hierarchical behaviors, while state machines are great for managing the flow and transitions between different behaviors.", + "markers": {} + }, + "Once the LimboHSM has been created, a BTState can be created for a given LimboHSM:\u0000{\"1\": \"LimboHSM\", \"2\": \"BTState\", \"3\": \"LimboHSM\"}": { + "uid": 192, + "tpl": "Once the LimboHSM has been created, a BTState can be created for a given LimboHSM:", + "markers": { + "1": "LimboHSM", + "2": "BTState", + "3": "LimboHSM" + } + }, + "Single-file state machine setup\u0000{}": { + "uid": 193, + "tpl": "Single-file state machine setup", + "markers": {} + }, + "In certain scenarios, such as prototyping or during game jams, it’s practical to keep the state machine code in a single file. For such cases, LimboHSM supports delegation and provides chained methods for easier setup. Let’s illustrate this with a practical code example:\u0000{\"1\": \"LimboHSM\"}": { + "uid": 194, + "tpl": "In certain scenarios, such as prototyping or during game jams, it’s practical to keep the state machine code in a single file. For such cases, LimboHSM supports delegation and provides chained methods for easier setup. Let’s illustrate this with a practical code example:", + "markers": { + "1": "LimboHSM" + } + }, + "Important classes\u0000{}": { + "uid": 195, + "tpl": "Important classes", + "markers": {} + }, + "There are a lot of classes introduced in LimboAI. Here is a list of the most important ones you should know about:\u0000{}": { + "uid": 196, + "tpl": "There are a lot of classes introduced in LimboAI. Here is a list of the most important ones you should know about:", + "markers": {} + }, + "BTTask\u0000{}": { + "uid": 197, + "tpl": "BTTask", + "markers": {} + }, + "Inherits: BT\u0000{\"1\": \"BT\"}": { + "uid": 198, + "tpl": "Inherits: BT", + "markers": { + "1": "BT" + } + }, + "Inherited By: BTAction, BTComment, BTComposite, BTCondition, BTDecorator\u0000{\"1\": \"BTAction\", \"2\": \"BTComment\", \"3\": \"BTComposite\", \"4\": \"BTCondition\", \"5\": \"BTDecorator\"}": { + "uid": 199, + "tpl": "Inherited By: BTAction, BTComment, BTComposite, BTCondition, BTDecorator", + "markers": { + "1": "BTAction", + "2": "BTComment", + "3": "BTComposite", + "4": "BTCondition", + "5": "BTDecorator" + } + }, + "Base class for all BehaviorTree tasks.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 200, + "tpl": "Base class for all BehaviorTree tasks.", + "markers": { + "1": "BehaviorTree" + } + }, + "Description\u0000{}": { + "uid": 201, + "tpl": "Description", + "markers": {} + }, + "Base class for all BehaviorTree tasks. A task is a basic building block in a BehaviorTree that represents a specific behavior or control flow. Tasks are used to create complex behaviors by combining and nesting them in a hierarchy.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BehaviorTree\"}": { + "uid": 202, + "tpl": "Base class for all BehaviorTree tasks. A task is a basic building block in a BehaviorTree that represents a specific behavior or control flow. Tasks are used to create complex behaviors by combining and nesting them in a hierarchy.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree" + } + }, + "A task can be one of the following types: action, condition, composite, or decorator. Each type of task has its own corresponding subclass: BTAction, BTCondition, BTDecorator, BTComposite.\u0000{\"1\": \"BTAction\", \"2\": \"BTCondition\", \"3\": \"BTDecorator\", \"4\": \"BTComposite\"}": { + "uid": 203, + "tpl": "A task can be one of the following types: action, condition, composite, or decorator. Each type of task has its own corresponding subclass: BTAction, BTCondition, BTDecorator, BTComposite.", + "markers": { + "1": "BTAction", + "2": "BTCondition", + "3": "BTDecorator", + "4": "BTComposite" + } + }, + "Tasks perform their work and return their status using the _tick method. Status values are defined in Status. Tasks can be initialized using the _setup method. See also _enter & _exit.\u0000{\"1\": \"_tick\", \"2\": \"Status\", \"3\": \"_setup\", \"4\": \"_enter\", \"5\": \"_exit\"}": { + "uid": 204, + "tpl": "Tasks perform their work and return their status using the _tick method. Status values are defined in Status. Tasks can be initialized using the _setup method. See also _enter & _exit.", + "markers": { + "1": "_tick", + "2": "Status", + "3": "_setup", + "4": "_enter", + "5": "_exit" + } + }, + "Note: Do not extend BTTask directly for your own tasks. Instead, extend one of the subtypes mentioned above.\u0000{}": { + "uid": 205, + "tpl": "Note: Do not extend BTTask directly for your own tasks. Instead, extend one of the subtypes mentioned above.", + "markers": {} + }, + "Properties\u0000{}": { + "uid": 206, + "tpl": "Properties", + "markers": {} + }, + "agent\u0000{\"1\": \"agent\"}": { + "uid": 207, + "tpl": "agent", + "markers": { + "1": "agent" + } + }, + "Blackboard\u0000{\"1\": \"Blackboard\"}": { + "uid": 208, + "tpl": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + "blackboard\u0000{\"1\": \"blackboard\"}": { + "uid": 209, + "tpl": "blackboard", + "markers": { + "1": "blackboard" + } + }, + "custom_name\u0000{\"1\": \"custom_name\"}": { + "uid": 210, + "tpl": "custom_name", + "markers": { + "1": "custom_name" + } + }, + "elapsed_time\u0000{\"1\": \"elapsed_time\"}": { + "uid": 211, + "tpl": "elapsed_time", + "markers": { + "1": "elapsed_time" + } + }, + "scene_root\u0000{\"1\": \"scene_root\"}": { + "uid": 212, + "tpl": "scene_root", + "markers": { + "1": "scene_root" + } + }, + "Status\u0000{\"1\": \"Status\"}": { + "uid": 213, + "tpl": "Status", + "markers": { + "1": "Status" + } + }, + "status\u0000{\"1\": \"status\"}": { + "uid": 214, + "tpl": "status", + "markers": { + "1": "status" + } + }, + "Methods\u0000{}": { + "uid": 215, + "tpl": "Methods", + "markers": {} + }, + "_enter() <2/>\u0000{\"1\": \"_enter\", \"2\": \"virtual\"}": { + "uid": 216, + "tpl": "_enter() <2/>", + "markers": { + "1": "_enter", + "2": "virtual" + } + }, + "_exit() <2/>\u0000{\"1\": \"_exit\", \"2\": \"virtual\"}": { + "uid": 217, + "tpl": "_exit() <2/>", + "markers": { + "1": "_exit", + "2": "virtual" + } + }, + "_generate_name() <2/> <3/>\u0000{\"1\": \"_generate_name\", \"2\": \"virtual\", \"3\": \"const\"}": { + "uid": 218, + "tpl": "_generate_name() <2/> <3/>", + "markers": { + "1": "_generate_name", + "2": "virtual", + "3": "const" + } + }, + "_get_configuration_warnings() <2/> <3/>\u0000{\"1\": \"_get_configuration_warnings\", \"2\": \"virtual\", \"3\": \"const\"}": { + "uid": 219, + "tpl": "_get_configuration_warnings() <2/> <3/>", + "markers": { + "1": "_get_configuration_warnings", + "2": "virtual", + "3": "const" + } + }, + "_setup() <2/>\u0000{\"1\": \"_setup\", \"2\": \"virtual\"}": { + "uid": 220, + "tpl": "_setup() <2/>", + "markers": { + "1": "_setup", + "2": "virtual" + } + }, + "_tick(delta: <2/>) <3/>\u0000{\"1\": \"_tick\", \"2\": \"float\", \"3\": \"virtual\"}": { + "uid": 221, + "tpl": "_tick(delta: <2/>) <3/>", + "markers": { + "1": "_tick", + "2": "float", + "3": "virtual" + } + }, + "abort()\u0000{\"1\": \"abort\"}": { + "uid": 222, + "tpl": "abort()", + "markers": { + "1": "abort" + } + }, + "add_child(task: BTTask)\u0000{\"1\": \"add_child\", \"2\": \"BTTask\"}": { + "uid": 223, + "tpl": "add_child(task: BTTask)", + "markers": { + "1": "add_child", + "2": "BTTask" + } + }, + "add_child_at_index(task: BTTask, idx: <3/>)\u0000{\"1\": \"add_child_at_index\", \"2\": \"BTTask\", \"3\": \"int\"}": { + "uid": 224, + "tpl": "add_child_at_index(task: BTTask, idx: <3/>)", + "markers": { + "1": "add_child_at_index", + "2": "BTTask", + "3": "int" + } + }, + "BTTask\u0000{\"1\": \"BTTask\"}": { + "uid": 225, + "tpl": "BTTask", + "markers": { + "1": "BTTask" + } + }, + "clone() <2/>\u0000{\"1\": \"clone\", \"2\": \"const\"}": { + "uid": 226, + "tpl": "clone() <2/>", + "markers": { + "1": "clone", + "2": "const" + } + }, + "BehaviorTree\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 227, + "tpl": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + "editor_get_behavior_tree()\u0000{\"1\": \"editor_get_behavior_tree\"}": { + "uid": 228, + "tpl": "editor_get_behavior_tree()", + "markers": { + "1": "editor_get_behavior_tree" + } + }, + "execute(delta: <2/>)\u0000{\"1\": \"execute\", \"2\": \"float\"}": { + "uid": 229, + "tpl": "execute(delta: <2/>)", + "markers": { + "1": "execute", + "2": "float" + } + }, + "get_child(idx: <2/>) <3/>\u0000{\"1\": \"get_child\", \"2\": \"int\", \"3\": \"const\"}": { + "uid": 230, + "tpl": "get_child(idx: <2/>) <3/>", + "markers": { + "1": "get_child", + "2": "int", + "3": "const" + } + }, + "get_child_count() <2/>\u0000{\"1\": \"get_child_count\", \"2\": \"const\"}": { + "uid": 231, + "tpl": "get_child_count() <2/>", + "markers": { + "1": "get_child_count", + "2": "const" + } + }, + "get_child_count_excluding_comments() <2/>\u0000{\"1\": \"get_child_count_excluding_comments\", \"2\": \"const\"}": { + "uid": 232, + "tpl": "get_child_count_excluding_comments() <2/>", + "markers": { + "1": "get_child_count_excluding_comments", + "2": "const" + } + }, + "get_index() <2/>\u0000{\"1\": \"get_index\", \"2\": \"const\"}": { + "uid": 233, + "tpl": "get_index() <2/>", + "markers": { + "1": "get_index", + "2": "const" + } + }, + "get_parent() <2/>\u0000{\"1\": \"get_parent\", \"2\": \"const\"}": { + "uid": 234, + "tpl": "get_parent() <2/>", + "markers": { + "1": "get_parent", + "2": "const" + } + }, + "get_root() <2/>\u0000{\"1\": \"get_root\", \"2\": \"const\"}": { + "uid": 235, + "tpl": "get_root() <2/>", + "markers": { + "1": "get_root", + "2": "const" + } + }, + "get_task_name()\u0000{\"1\": \"get_task_name\"}": { + "uid": 236, + "tpl": "get_task_name()", + "markers": { + "1": "get_task_name" + } + }, + "has_child(task: BTTask) <3/>\u0000{\"1\": \"has_child\", \"2\": \"BTTask\", \"3\": \"const\"}": { + "uid": 237, + "tpl": "has_child(task: BTTask) <3/>", + "markers": { + "1": "has_child", + "2": "BTTask", + "3": "const" + } + }, + "initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>)\u0000{\"1\": \"initialize\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Node\"}": { + "uid": 238, + "tpl": "initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>)", + "markers": { + "1": "initialize", + "2": "Node", + "3": "Blackboard", + "4": "Node" + } + }, + "is_descendant_of(task: BTTask) <3/>\u0000{\"1\": \"is_descendant_of\", \"2\": \"BTTask\", \"3\": \"const\"}": { + "uid": 239, + "tpl": "is_descendant_of(task: BTTask) <3/>", + "markers": { + "1": "is_descendant_of", + "2": "BTTask", + "3": "const" + } + }, + "is_root() <2/>\u0000{\"1\": \"is_root\", \"2\": \"const\"}": { + "uid": 240, + "tpl": "is_root() <2/>", + "markers": { + "1": "is_root", + "2": "const" + } + }, + "next_sibling() <2/>\u0000{\"1\": \"next_sibling\", \"2\": \"const\"}": { + "uid": 241, + "tpl": "next_sibling() <2/>", + "markers": { + "1": "next_sibling", + "2": "const" + } + }, + "print_tree(initial_tabs: <2/> = 0)\u0000{\"1\": \"print_tree\", \"2\": \"int\"}": { + "uid": 242, + "tpl": "print_tree(initial_tabs: <2/> = 0)", + "markers": { + "1": "print_tree", + "2": "int" + } + }, + "remove_child(task: BTTask)\u0000{\"1\": \"remove_child\", \"2\": \"BTTask\"}": { + "uid": 243, + "tpl": "remove_child(task: BTTask)", + "markers": { + "1": "remove_child", + "2": "BTTask" + } + }, + "remove_child_at_index(idx: <2/>)\u0000{\"1\": \"remove_child_at_index\", \"2\": \"int\"}": { + "uid": 244, + "tpl": "remove_child_at_index(idx: <2/>)", + "markers": { + "1": "remove_child_at_index", + "2": "int" + } + }, + "Property Descriptions\u0000{}": { + "uid": 245, + "tpl": "Property Descriptions", + "markers": {} + }, + "<1/> agent 🔗\u0000{\"1\": \"Node\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 246, + "tpl": "<1/> agent 🔗", + "markers": { + "1": "Node", + "2": "🔗" + } + }, + "<1/> set_agent(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"Node\"}": { + "uid": 247, + "tpl": "<1/> set_agent(value: <2/>)", + "markers": { + "1": "void", + "2": "Node" + } + }, + "<1/> get_agent()\u0000{\"1\": \"Node\"}": { + "uid": 248, + "tpl": "<1/> get_agent()", + "markers": { + "1": "Node" + } + }, + "The agent is the contextual object for the BehaviorTree instance. This is usually the parent of the BTPlayer node that utilizes the BehaviorTree resource.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BTPlayer\", \"3\": \"BehaviorTree\"}": { + "uid": 249, + "tpl": "The agent is the contextual object for the BehaviorTree instance. This is usually the parent of the BTPlayer node that utilizes the BehaviorTree resource.", + "markers": { + "1": "BehaviorTree", + "2": "BTPlayer", + "3": "BehaviorTree" + } + }, + "Blackboard blackboard 🔗\u0000{\"1\": \"Blackboard\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 250, + "tpl": "Blackboard blackboard 🔗", + "markers": { + "1": "Blackboard", + "2": "🔗" + } + }, + "Blackboard get_blackboard()\u0000{\"1\": \"Blackboard\"}": { + "uid": 251, + "tpl": "Blackboard get_blackboard()", + "markers": { + "1": "Blackboard" + } + }, + "Provides access to the Blackboard. Blackboard is used to share data among tasks of the associated BehaviorTree.\u0000{\"1\": \"Blackboard\", \"2\": \"BehaviorTree\"}": { + "uid": 252, + "tpl": "Provides access to the Blackboard. Blackboard is used to share data among tasks of the associated BehaviorTree.", + "markers": { + "1": "Blackboard", + "2": "BehaviorTree" + } + }, + "See Blackboard for additional info.\u0000{\"1\": \"Blackboard\"}": { + "uid": 253, + "tpl": "See Blackboard for additional info.", + "markers": { + "1": "Blackboard" + } + }, + "<1/> custom_name = <2/> 🔗\u0000{\"1\": \"String\", \"2\": \"\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 254, + "tpl": "<1/> custom_name = <2/> 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + "<1/> set_custom_name(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"String\"}": { + "uid": 255, + "tpl": "<1/> set_custom_name(value: <2/>)", + "markers": { + "1": "void", + "2": "String" + } + }, + "<1/> get_custom_name()\u0000{\"1\": \"String\"}": { + "uid": 256, + "tpl": "<1/> get_custom_name()", + "markers": { + "1": "String" + } + }, + "User-provided name for the task. If not empty, it is used by the editor to represent the task. See get_task_name.\u0000{\"1\": \"get_task_name\"}": { + "uid": 257, + "tpl": "User-provided name for the task. If not empty, it is used by the editor to represent the task. See get_task_name.", + "markers": { + "1": "get_task_name" + } + }, + "<1/> elapsed_time 🔗\u0000{\"1\": \"float\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 258, + "tpl": "<1/> elapsed_time 🔗", + "markers": { + "1": "float", + "2": "🔗" + } + }, + "<1/> get_elapsed_time()\u0000{\"1\": \"float\"}": { + "uid": 259, + "tpl": "<1/> get_elapsed_time()", + "markers": { + "1": "float" + } + }, + "Elapsed time since the task was “entered”. See _enter.\u0000{\"1\": \"_enter\"}": { + "uid": 260, + "tpl": "Elapsed time since the task was “entered”. See _enter.", + "markers": { + "1": "_enter" + } + }, + "Returns <1/> when task is not <2/>.\u0000{\"1\": \"0\", \"2\": \"RUNNING\"}": { + "uid": 261, + "tpl": "Returns <1/> when task is not <2/>.", + "markers": { + "1": "0", + "2": "RUNNING" + } + }, + "<1/> scene_root 🔗\u0000{\"1\": \"Node\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 262, + "tpl": "<1/> scene_root 🔗", + "markers": { + "1": "Node", + "2": "🔗" + } + }, + "<1/> get_scene_root()\u0000{\"1\": \"Node\"}": { + "uid": 263, + "tpl": "<1/> get_scene_root()", + "markers": { + "1": "Node" + } + }, + "Root node of the scene the behavior tree is used in (e.g., the owner of the BTPlayer node). Can be uses to retrieve <2/> references.\u0000{\"1\": \"BTPlayer\", \"2\": \"NodePath\"}": { + "uid": 264, + "tpl": "Root node of the scene the behavior tree is used in (e.g., the owner of the BTPlayer node). Can be uses to retrieve <2/> references.", + "markers": { + "1": "BTPlayer", + "2": "NodePath" + } + }, + "Example:\u0000{}": { + "uid": 265, + "tpl": "Example:", + "markers": {} + }, + "Status status 🔗\u0000{\"1\": \"Status\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 266, + "tpl": "Status status 🔗", + "markers": { + "1": "Status", + "2": "🔗" + } + }, + "Status get_status()\u0000{\"1\": \"Status\"}": { + "uid": 267, + "tpl": "Status get_status()", + "markers": { + "1": "Status" + } + }, + "Last execution Status returned by _tick.\u0000{\"1\": \"Status\", \"2\": \"_tick\"}": { + "uid": 268, + "tpl": "Last execution Status returned by _tick.", + "markers": { + "1": "Status", + "2": "_tick" + } + }, + "Method Descriptions\u0000{}": { + "uid": 269, + "tpl": "Method Descriptions", + "markers": {} + }, + "<1/> _enter() <2/> 🔗\u0000{\"1\": \"void\", \"2\": \"virtual\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 270, + "tpl": "<1/> _enter() <2/> 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + "Called when task is “entered”, i.e. when task is executed while not having a <1/> status.\u0000{\"1\": \"RUNNING\", \"2\": \"status\"}": { + "uid": 271, + "tpl": "Called when task is “entered”, i.e. when task is executed while not having a <1/> status.", + "markers": { + "1": "RUNNING", + "2": "status" + } + }, + "It is called before _tick in the execution order. This method is used when preparation is needed before main work begins, usually when it takes more than one tick to finish the task. See also execute.\u0000{\"1\": \"_tick\", \"2\": \"execute\"}": { + "uid": 272, + "tpl": "It is called before _tick in the execution order. This method is used when preparation is needed before main work begins, usually when it takes more than one tick to finish the task. See also execute.", + "markers": { + "1": "_tick", + "2": "execute" + } + }, + "<1/> _exit() <2/> 🔗\u0000{\"1\": \"void\", \"2\": \"virtual\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 273, + "tpl": "<1/> _exit() <2/> 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + "Called when task is “exited”, i.e. after _tick returns <2/> or <3/> status. See also execute.\u0000{\"1\": \"_tick\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\", \"4\": \"execute\"}": { + "uid": 274, + "tpl": "Called when task is “exited”, i.e. after _tick returns <2/> or <3/> status. See also execute.", + "markers": { + "1": "_tick", + "2": "SUCCESS", + "3": "FAILURE", + "4": "execute" + } + }, + "<1/> _generate_name() <2/> <3/> 🔗\u0000{\"1\": \"String\", \"2\": \"virtual\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 275, + "tpl": "<1/> _generate_name() <2/> <3/> 🔗", + "markers": { + "1": "String", + "2": "virtual", + "3": "const", + "4": "🔗" + } + }, + "Called to generate a display name for the task unless custom_name is set. See get_task_name.\u0000{\"1\": \"custom_name\", \"2\": \"get_task_name\"}": { + "uid": 276, + "tpl": "Called to generate a display name for the task unless custom_name is set. See get_task_name.", + "markers": { + "1": "custom_name", + "2": "get_task_name" + } + }, + "<1/> _get_configuration_warnings() <2/> <3/> 🔗\u0000{\"1\": \"PackedStringArray\", \"2\": \"virtual\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 277, + "tpl": "<1/> _get_configuration_warnings() <2/> <3/> 🔗", + "markers": { + "1": "PackedStringArray", + "2": "virtual", + "3": "const", + "4": "🔗" + } + }, + "The string returned by this method is shown as a warning message in the behavior tree editor. Any task script that overrides this method must include <1/> annotation at the top of the file.\u0000{\"1\": \"@tool\"}": { + "uid": 278, + "tpl": "The string returned by this method is shown as a warning message in the behavior tree editor. Any task script that overrides this method must include <1/> annotation at the top of the file.", + "markers": { + "1": "@tool" + } + }, + "<1/> _setup() <2/> 🔗\u0000{\"1\": \"void\", \"2\": \"virtual\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 279, + "tpl": "<1/> _setup() <2/> 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + "Called to initialize a task during initialization step. It is called only once before the task’s first execution tick. This method allows you to set up any necessary state or configurations for the task before it begins executing.\u0000{}": { + "uid": 280, + "tpl": "Called to initialize a task during initialization step. It is called only once before the task’s first execution tick. This method allows you to set up any necessary state or configurations for the task before it begins executing.", + "markers": {} + }, + "Status _tick(delta: <2/>) <3/> 🔗\u0000{\"1\": \"Status\", \"2\": \"float\", \"3\": \"virtual\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 281, + "tpl": "Status _tick(delta: <2/>) <3/> 🔗", + "markers": { + "1": "Status", + "2": "float", + "3": "virtual", + "4": "🔗" + } + }, + "Called when task is “ticked”, i.e. executed by BTPlayer or BTState during an update.\u0000{\"1\": \"BTPlayer\", \"2\": \"BTState\"}": { + "uid": 282, + "tpl": "Called when task is “ticked”, i.e. executed by BTPlayer or BTState during an update.", + "markers": { + "1": "BTPlayer", + "2": "BTState" + } + }, + "Returns execution status as defined in Status.\u0000{\"1\": \"Status\"}": { + "uid": 283, + "tpl": "Returns execution status as defined in Status.", + "markers": { + "1": "Status" + } + }, + "Note: Tasks perform their main function by implementing this method.\u0000{}": { + "uid": 284, + "tpl": "Note: Tasks perform their main function by implementing this method.", + "markers": {} + }, + "<1/> abort() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 285, + "tpl": "<1/> abort() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Resets the task and its children recursively. If a task is in the <1/> state, it is exited and its status is reset to <2/>.\u0000{\"1\": \"RUNNING\", \"2\": \"FRESH\"}": { + "uid": 286, + "tpl": "Resets the task and its children recursively. If a task is in the <1/> state, it is exited and its status is reset to <2/>.", + "markers": { + "1": "RUNNING", + "2": "FRESH" + } + }, + "<1/> add_child(task: BTTask) 🔗\u0000{\"1\": \"void\", \"2\": \"BTTask\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 287, + "tpl": "<1/> add_child(task: BTTask) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "🔗" + } + }, + "Adds a child task. The <1/> is placed at the end of the children list.\u0000{\"1\": \"task\"}": { + "uid": 288, + "tpl": "Adds a child task. The <1/> is placed at the end of the children list.", + "markers": { + "1": "task" + } + }, + "<1/> add_child_at_index(task: BTTask, idx: <3/>) 🔗\u0000{\"1\": \"void\", \"2\": \"BTTask\", \"3\": \"int\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 289, + "tpl": "<1/> add_child_at_index(task: BTTask, idx: <3/>) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "int", + "4": "🔗" + } + }, + "Adds a child task. The <1/> is placed at <2/> position in the children list.\u0000{\"1\": \"task\", \"2\": \"idx\"}": { + "uid": 290, + "tpl": "Adds a child task. The <1/> is placed at <2/> position in the children list.", + "markers": { + "1": "task", + "2": "idx" + } + }, + "BTTask clone() <2/> 🔗\u0000{\"1\": \"BTTask\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 291, + "tpl": "BTTask clone() <2/> 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + "Duplicates the task and its children, copying the exported members. Sub-resources are shared for efficiency, except for BBParam subtypes, which are always copied. Used by the editor to instantiate BehaviorTree and copy-paste tasks.\u0000{\"1\": \"BBParam\", \"2\": \"BehaviorTree\"}": { + "uid": 292, + "tpl": "Duplicates the task and its children, copying the exported members. Sub-resources are shared for efficiency, except for BBParam subtypes, which are always copied. Used by the editor to instantiate BehaviorTree and copy-paste tasks.", + "markers": { + "1": "BBParam", + "2": "BehaviorTree" + } + }, + "BehaviorTree editor_get_behavior_tree() 🔗\u0000{\"1\": \"BehaviorTree\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 293, + "tpl": "BehaviorTree editor_get_behavior_tree() 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + "Returns the behavior tree that owns this task. This is only available in the editor.\u0000{}": { + "uid": 294, + "tpl": "Returns the behavior tree that owns this task. This is only available in the editor.", + "markers": {} + }, + "Status execute(delta: <2/>) 🔗\u0000{\"1\": \"Status\", \"2\": \"float\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 295, + "tpl": "Status execute(delta: <2/>) 🔗", + "markers": { + "1": "Status", + "2": "float", + "3": "🔗" + } + }, + "Performs task’s execution. The execution follows a specific sequence:\u0000{}": { + "uid": 296, + "tpl": "Performs task’s execution. The execution follows a specific sequence:", + "markers": {} + }, + "If task’s current status is not <2/>, the _enter method is called first.\u0000{\"1\": \"status\", \"2\": \"RUNNING\", \"3\": \"_enter\"}": { + "uid": 297, + "tpl": "If task’s current status is not <2/>, the _enter method is called first.", + "markers": { + "1": "status", + "2": "RUNNING", + "3": "_enter" + } + }, + "Next, the _tick method is called next to perform the task’s work.\u0000{\"1\": \"_tick\"}": { + "uid": 298, + "tpl": "Next, the _tick method is called next to perform the task’s work.", + "markers": { + "1": "_tick" + } + }, + "If the _tick method returns <2/> or <3/> status, the _exit method will be called next as part of the execution cleanup.\u0000{\"1\": \"_tick\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\", \"4\": \"_exit\"}": { + "uid": 299, + "tpl": "If the _tick method returns <2/> or <3/> status, the _exit method will be called next as part of the execution cleanup.", + "markers": { + "1": "_tick", + "2": "SUCCESS", + "3": "FAILURE", + "4": "_exit" + } + }, + "BTTask get_child(idx: <2/>) <3/> 🔗\u0000{\"1\": \"BTTask\", \"2\": \"int\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 300, + "tpl": "BTTask get_child(idx: <2/>) <3/> 🔗", + "markers": { + "1": "BTTask", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + "Returns a child task by specifying its index.\u0000{}": { + "uid": 301, + "tpl": "Returns a child task by specifying its index.", + "markers": {} + }, + "<1/> get_child_count() <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 302, + "tpl": "<1/> get_child_count() <2/> 🔗", + "markers": { + "1": "int", + "2": "const", + "3": "🔗" + } + }, + "Returns the number of child tasks.\u0000{}": { + "uid": 303, + "tpl": "Returns the number of child tasks.", + "markers": {} + }, + "<1/> get_child_count_excluding_comments() <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 304, + "tpl": "<1/> get_child_count_excluding_comments() <2/> 🔗", + "markers": { + "1": "int", + "2": "const", + "3": "🔗" + } + }, + "Returns the number of child tasks not counting BTComment tasks.\u0000{\"1\": \"BTComment\"}": { + "uid": 305, + "tpl": "Returns the number of child tasks not counting BTComment tasks.", + "markers": { + "1": "BTComment" + } + }, + "<1/> get_index() <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 306, + "tpl": "<1/> get_index() <2/> 🔗", + "markers": { + "1": "int", + "2": "const", + "3": "🔗" + } + }, + "Returns the task’s position in the behavior tree branch. Returns <1/> if the task doesn’t belong to a task tree, i.e. doesn’t have a parent.\u0000{\"1\": \"-1\"}": { + "uid": 307, + "tpl": "Returns the task’s position in the behavior tree branch. Returns <1/> if the task doesn’t belong to a task tree, i.e. doesn’t have a parent.", + "markers": { + "1": "-1" + } + }, + "BTTask get_parent() <2/> 🔗\u0000{\"1\": \"BTTask\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 308, + "tpl": "BTTask get_parent() <2/> 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + "Returns the task’s parent.\u0000{}": { + "uid": 309, + "tpl": "Returns the task’s parent.", + "markers": {} + }, + "BTTask get_root() <2/> 🔗\u0000{\"1\": \"BTTask\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 310, + "tpl": "BTTask get_root() <2/> 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + "Returns the root task of the behavior tree.\u0000{}": { + "uid": 311, + "tpl": "Returns the root task of the behavior tree.", + "markers": {} + }, + "<1/> get_task_name() 🔗\u0000{\"1\": \"String\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 312, + "tpl": "<1/> get_task_name() 🔗", + "markers": { + "1": "String", + "2": "🔗" + } + }, + "The string returned by this method is used to represent the task in the editor.\u0000{}": { + "uid": 313, + "tpl": "The string returned by this method is used to represent the task in the editor.", + "markers": {} + }, + "Method _generate_name is called to generate a display name for the task unless custom_name is set.\u0000{\"1\": \"_generate_name\", \"2\": \"custom_name\"}": { + "uid": 314, + "tpl": "Method _generate_name is called to generate a display name for the task unless custom_name is set.", + "markers": { + "1": "_generate_name", + "2": "custom_name" + } + }, + "<1/> has_child(task: BTTask) <3/> 🔗\u0000{\"1\": \"bool\", \"2\": \"BTTask\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 315, + "tpl": "<1/> has_child(task: BTTask) <3/> 🔗", + "markers": { + "1": "bool", + "2": "BTTask", + "3": "const", + "4": "🔗" + } + }, + "Returns <1/> if <2/> is a child of this task.\u0000{\"1\": \"true\", \"2\": \"task\"}": { + "uid": 316, + "tpl": "Returns <1/> if <2/> is a child of this task.", + "markers": { + "1": "true", + "2": "task" + } + }, + "<1/> initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>) 🔗\u0000{\"1\": \"void\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Node\", \"5\": \"\\ud83d\\udd17\"}": { + "uid": 317, + "tpl": "<1/> initialize(agent: <2/>, blackboard: Blackboard, scene_root: <4/>) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "🔗" + } + }, + "Initilizes the task. Assigns agent and blackboard, and calls _setup for the task and its children.\u0000{\"1\": \"agent\", \"2\": \"blackboard\", \"3\": \"_setup\"}": { + "uid": 318, + "tpl": "Initilizes the task. Assigns agent and blackboard, and calls _setup for the task and its children.", + "markers": { + "1": "agent", + "2": "blackboard", + "3": "_setup" + } + }, + "The method is called recursively for each child task. <1/> should be the root node of the scene the behavior tree is used in (e.g., the owner of the node that contains the behavior tree).\u0000{\"1\": \"scene_root\"}": { + "uid": 319, + "tpl": "The method is called recursively for each child task. <1/> should be the root node of the scene the behavior tree is used in (e.g., the owner of the node that contains the behavior tree).", + "markers": { + "1": "scene_root" + } + }, + "<1/> is_descendant_of(task: BTTask) <3/> 🔗\u0000{\"1\": \"bool\", \"2\": \"BTTask\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 320, + "tpl": "<1/> is_descendant_of(task: BTTask) <3/> 🔗", + "markers": { + "1": "bool", + "2": "BTTask", + "3": "const", + "4": "🔗" + } + }, + "Returns <1/> if this task is a descendant of <2/>. In other words, this task must be a child of <3/> or one of its children or grandchildren.\u0000{\"1\": \"true\", \"2\": \"task\", \"3\": \"task\"}": { + "uid": 321, + "tpl": "Returns <1/> if this task is a descendant of <2/>. In other words, this task must be a child of <3/> or one of its children or grandchildren.", + "markers": { + "1": "true", + "2": "task", + "3": "task" + } + }, + "<1/> is_root() <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 322, + "tpl": "<1/> is_root() <2/> 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + "Returns <1/> if this task is the root task of its behavior tree. A behavior tree can have only one root task.\u0000{\"1\": \"true\"}": { + "uid": 323, + "tpl": "Returns <1/> if this task is the root task of its behavior tree. A behavior tree can have only one root task.", + "markers": { + "1": "true" + } + }, + "BTTask next_sibling() <2/> 🔗\u0000{\"1\": \"BTTask\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 324, + "tpl": "BTTask next_sibling() <2/> 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + "Returns the next task after this task in the parent’s children list.\u0000{}": { + "uid": 325, + "tpl": "Returns the next task after this task in the parent’s children list.", + "markers": {} + }, + "Returns <1/> if this task has no parent or it is the last child in the parent’s children list.\u0000{\"1\": \"null\"}": { + "uid": 326, + "tpl": "Returns <1/> if this task has no parent or it is the last child in the parent’s children list.", + "markers": { + "1": "null" + } + }, + "<1/> print_tree(initial_tabs: <2/> = 0) 🔗\u0000{\"1\": \"void\", \"2\": \"int\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 327, + "tpl": "<1/> print_tree(initial_tabs: <2/> = 0) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "🔗" + } + }, + "Prints the subtree that starts with this task to the console.\u0000{}": { + "uid": 328, + "tpl": "Prints the subtree that starts with this task to the console.", + "markers": {} + }, + "<1/> remove_child(task: BTTask) 🔗\u0000{\"1\": \"void\", \"2\": \"BTTask\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 329, + "tpl": "<1/> remove_child(task: BTTask) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "🔗" + } + }, + "Removes <1/> from children.\u0000{\"1\": \"task\"}": { + "uid": 330, + "tpl": "Removes <1/> from children.", + "markers": { + "1": "task" + } + }, + "<1/> remove_child_at_index(idx: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"int\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 331, + "tpl": "<1/> remove_child_at_index(idx: <2/>) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "🔗" + } + }, + "Removes a child task at a specified index from children.\u0000{}": { + "uid": 332, + "tpl": "Removes a child task at a specified index from children.", + "markers": {} + }, + "BTPlayer\u0000{}": { + "uid": 333, + "tpl": "BTPlayer", + "markers": {} + }, + "Inherits:\u0000{}": { + "uid": 334, + "tpl": "Inherits:", + "markers": {} + }, + "Player of BehaviorTree resources.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 335, + "tpl": "Player of BehaviorTree resources.", + "markers": { + "1": "BehaviorTree" + } + }, + "BTPlayer node is used to instantiate and play BehaviorTree resources at runtime. During initialization, the behavior tree instance is given references to the agent, the blackboard, and the current scene root. The agent can be specified by the agent_node property (defaults to the BTPlayer’s parent node).\u0000{\"1\": \"BehaviorTree\", \"2\": \"blackboard\", \"3\": \"agent_node\"}": { + "uid": 336, + "tpl": "BTPlayer node is used to instantiate and play BehaviorTree resources at runtime. During initialization, the behavior tree instance is given references to the agent, the blackboard, and the current scene root. The agent can be specified by the agent_node property (defaults to the BTPlayer’s parent node).", + "markers": { + "1": "BehaviorTree", + "2": "blackboard", + "3": "agent_node" + } + }, + "For an introduction to behavior trees, see BehaviorTree.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 337, + "tpl": "For an introduction to behavior trees, see BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + "active\u0000{\"1\": \"active\"}": { + "uid": 338, + "tpl": "active", + "markers": { + "1": "active" + } + }, + "agent_node\u0000{\"1\": \"agent_node\"}": { + "uid": 339, + "tpl": "agent_node", + "markers": { + "1": "agent_node" + } + }, + "behavior_tree\u0000{\"1\": \"behavior_tree\"}": { + "uid": 340, + "tpl": "behavior_tree", + "markers": { + "1": "behavior_tree" + } + }, + "blackboard\u0000{\"1\": \"blackboard\"}": { + "uid": 341, + "tpl": "blackboard", + "markers": { + "1": "blackboard" + } + }, + "BlackboardPlan\u0000{\"1\": \"BlackboardPlan\"}": { + "uid": 342, + "tpl": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + "blackboard_plan\u0000{\"1\": \"blackboard_plan\"}": { + "uid": 343, + "tpl": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + "monitor_performance\u0000{\"1\": \"monitor_performance\"}": { + "uid": 344, + "tpl": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + "UpdateMode\u0000{\"1\": \"UpdateMode\"}": { + "uid": 345, + "tpl": "UpdateMode", + "markers": { + "1": "UpdateMode" + } + }, + "update_mode\u0000{\"1\": \"update_mode\"}": { + "uid": 346, + "tpl": "update_mode", + "markers": { + "1": "update_mode" + } + }, + "BTInstance\u0000{\"1\": \"BTInstance\"}": { + "uid": 347, + "tpl": "BTInstance", + "markers": { + "1": "BTInstance" + } + }, + "get_bt_instance()\u0000{\"1\": \"get_bt_instance\"}": { + "uid": 348, + "tpl": "get_bt_instance()", + "markers": { + "1": "get_bt_instance" + } + }, + "restart()\u0000{\"1\": \"restart\"}": { + "uid": 349, + "tpl": "restart()", + "markers": { + "1": "restart" + } + }, + "set_bt_instance(bt_instance: BTInstance)\u0000{\"1\": \"set_bt_instance\", \"2\": \"BTInstance\"}": { + "uid": 350, + "tpl": "set_bt_instance(bt_instance: BTInstance)", + "markers": { + "1": "set_bt_instance", + "2": "BTInstance" + } + }, + "set_scene_root_hint(scene_root: <2/>)\u0000{\"1\": \"set_scene_root_hint\", \"2\": \"Node\"}": { + "uid": 351, + "tpl": "set_scene_root_hint(scene_root: <2/>)", + "markers": { + "1": "set_scene_root_hint", + "2": "Node" + } + }, + "update(delta: <2/>)\u0000{\"1\": \"update\", \"2\": \"float\"}": { + "uid": 352, + "tpl": "update(delta: <2/>)", + "markers": { + "1": "update", + "2": "float" + } + }, + "Signals\u0000{}": { + "uid": 353, + "tpl": "Signals", + "markers": {} + }, + "behavior_tree_finished(status: <1/>) 🔗\u0000{\"1\": \"int\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 354, + "tpl": "behavior_tree_finished(status: <1/>) 🔗", + "markers": { + "1": "int", + "2": "🔗" + } + }, + "Deprecated: Use updated signal instead.\u0000{\"1\": \"updated\"}": { + "uid": 355, + "tpl": "Deprecated: Use updated signal instead.", + "markers": { + "1": "updated" + } + }, + "Emitted when the behavior tree has finished executing and returned <1/> or <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\"}": { + "uid": 356, + "tpl": "Emitted when the behavior tree has finished executing and returned <1/> or <2/>.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + "Argument <1/> holds the status returned by the behavior tree. See Status.\u0000{\"1\": \"status\", \"2\": \"Status\"}": { + "uid": 357, + "tpl": "Argument <1/> holds the status returned by the behavior tree. See Status.", + "markers": { + "1": "status", + "2": "Status" + } + }, + "updated(status: <1/>) 🔗\u0000{\"1\": \"int\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 358, + "tpl": "updated(status: <1/>) 🔗", + "markers": { + "1": "int", + "2": "🔗" + } + }, + "Emitted when BTPlayer has finished the behavior tree update.\u0000{}": { + "uid": 359, + "tpl": "Emitted when BTPlayer has finished the behavior tree update.", + "markers": {} + }, + "Enumerations\u0000{}": { + "uid": 360, + "tpl": "Enumerations", + "markers": {} + }, + "enum UpdateMode: 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 361, + "tpl": "enum UpdateMode: 🔗", + "markers": { + "1": "🔗" + } + }, + "UpdateMode IDLE = <2/>\u0000{\"1\": \"UpdateMode\", \"2\": \"0\"}": { + "uid": 362, + "tpl": "UpdateMode IDLE = <2/>", + "markers": { + "1": "UpdateMode", + "2": "0" + } + }, + "Execute behavior tree during the idle process.\u0000{}": { + "uid": 363, + "tpl": "Execute behavior tree during the idle process.", + "markers": {} + }, + "UpdateMode PHYSICS = <2/>\u0000{\"1\": \"UpdateMode\", \"2\": \"1\"}": { + "uid": 364, + "tpl": "UpdateMode PHYSICS = <2/>", + "markers": { + "1": "UpdateMode", + "2": "1" + } + }, + "Execute behavior tree during the physics process.\u0000{}": { + "uid": 365, + "tpl": "Execute behavior tree during the physics process.", + "markers": {} + }, + "UpdateMode MANUAL = <2/>\u0000{\"1\": \"UpdateMode\", \"2\": \"2\"}": { + "uid": 366, + "tpl": "UpdateMode MANUAL = <2/>", + "markers": { + "1": "UpdateMode", + "2": "2" + } + }, + "Behavior tree is executed manually by calling update.\u0000{\"1\": \"update\"}": { + "uid": 367, + "tpl": "Behavior tree is executed manually by calling update.", + "markers": { + "1": "update" + } + }, + "<1/> active = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"true\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 368, + "tpl": "<1/> active = <2/> 🔗", + "markers": { + "1": "bool", + "2": "true", + "3": "🔗" + } + }, + "<1/> set_active(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 369, + "tpl": "<1/> set_active(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_active()\u0000{\"1\": \"bool\"}": { + "uid": 370, + "tpl": "<1/> get_active()", + "markers": { + "1": "bool" + } + }, + "If <1/>, the behavior tree will be executed during update.\u0000{\"1\": \"true\"}": { + "uid": 371, + "tpl": "If <1/>, the behavior tree will be executed during update.", + "markers": { + "1": "true" + } + }, + "<1/> agent_node = <2/> 🔗\u0000{\"1\": \"NodePath\", \"2\": \"NodePath(\\\"..\\\")\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 372, + "tpl": "<1/> agent_node = <2/> 🔗", + "markers": { + "1": "NodePath", + "2": "NodePath(\"..\")", + "3": "🔗" + } + }, + "<1/> set_agent_node(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"NodePath\"}": { + "uid": 373, + "tpl": "<1/> set_agent_node(value: <2/>)", + "markers": { + "1": "void", + "2": "NodePath" + } + }, + "<1/> get_agent_node()\u0000{\"1\": \"NodePath\"}": { + "uid": 374, + "tpl": "<1/> get_agent_node()", + "markers": { + "1": "NodePath" + } + }, + "Path to the node that will be used as the agent. Setting it after instantiation will have no effect.\u0000{}": { + "uid": 375, + "tpl": "Path to the node that will be used as the agent. Setting it after instantiation will have no effect.", + "markers": {} + }, + "BehaviorTree behavior_tree 🔗\u0000{\"1\": \"BehaviorTree\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 376, + "tpl": "BehaviorTree behavior_tree 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + "<1/> set_behavior_tree(value: BehaviorTree)\u0000{\"1\": \"void\", \"2\": \"BehaviorTree\"}": { + "uid": 377, + "tpl": "<1/> set_behavior_tree(value: BehaviorTree)", + "markers": { + "1": "void", + "2": "BehaviorTree" + } + }, + "BehaviorTree get_behavior_tree()\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 378, + "tpl": "BehaviorTree get_behavior_tree()", + "markers": { + "1": "BehaviorTree" + } + }, + "BehaviorTree resource to instantiate and execute at runtime.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 379, + "tpl": "BehaviorTree resource to instantiate and execute at runtime.", + "markers": { + "1": "BehaviorTree" + } + }, + "Blackboard blackboard 🔗\u0000{\"1\": \"Blackboard\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 380, + "tpl": "Blackboard blackboard 🔗", + "markers": { + "1": "Blackboard", + "2": "🔗" + } + }, + "<1/> set_blackboard(value: Blackboard)\u0000{\"1\": \"void\", \"2\": \"Blackboard\"}": { + "uid": 381, + "tpl": "<1/> set_blackboard(value: Blackboard)", + "markers": { + "1": "void", + "2": "Blackboard" + } + }, + "Holds data shared by the behavior tree tasks. See Blackboard.\u0000{\"1\": \"Blackboard\"}": { + "uid": 382, + "tpl": "Holds data shared by the behavior tree tasks. See Blackboard.", + "markers": { + "1": "Blackboard" + } + }, + "BlackboardPlan blackboard_plan 🔗\u0000{\"1\": \"BlackboardPlan\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 383, + "tpl": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + "<1/> set_blackboard_plan(value: BlackboardPlan)\u0000{\"1\": \"void\", \"2\": \"BlackboardPlan\"}": { + "uid": 384, + "tpl": "<1/> set_blackboard_plan(value: BlackboardPlan)", + "markers": { + "1": "void", + "2": "BlackboardPlan" + } + }, + "BlackboardPlan get_blackboard_plan()\u0000{\"1\": \"BlackboardPlan\"}": { + "uid": 385, + "tpl": "BlackboardPlan get_blackboard_plan()", + "markers": { + "1": "BlackboardPlan" + } + }, + "Stores and manages variables that will be used in constructing new Blackboard instances.\u0000{\"1\": \"Blackboard\"}": { + "uid": 386, + "tpl": "Stores and manages variables that will be used in constructing new Blackboard instances.", + "markers": { + "1": "Blackboard" + } + }, + "<1/> monitor_performance = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 387, + "tpl": "<1/> monitor_performance = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_monitor_performance(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 388, + "tpl": "<1/> set_monitor_performance(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_monitor_performance()\u0000{\"1\": \"bool\"}": { + "uid": 389, + "tpl": "<1/> get_monitor_performance()", + "markers": { + "1": "bool" + } + }, + "If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTPlayer node.\u0000{\"1\": \"true\"}": { + "uid": 390, + "tpl": "If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTPlayer node.", + "markers": { + "1": "true" + } + }, + "UpdateMode update_mode = <2/> 🔗\u0000{\"1\": \"UpdateMode\", \"2\": \"1\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 391, + "tpl": "UpdateMode update_mode = <2/> 🔗", + "markers": { + "1": "UpdateMode", + "2": "1", + "3": "🔗" + } + }, + "<1/> set_update_mode(value: UpdateMode)\u0000{\"1\": \"void\", \"2\": \"UpdateMode\"}": { + "uid": 392, + "tpl": "<1/> set_update_mode(value: UpdateMode)", + "markers": { + "1": "void", + "2": "UpdateMode" + } + }, + "UpdateMode get_update_mode()\u0000{\"1\": \"UpdateMode\"}": { + "uid": 393, + "tpl": "UpdateMode get_update_mode()", + "markers": { + "1": "UpdateMode" + } + }, + "Determines when the behavior tree is executed. See UpdateMode.\u0000{\"1\": \"UpdateMode\"}": { + "uid": 394, + "tpl": "Determines when the behavior tree is executed. See UpdateMode.", + "markers": { + "1": "UpdateMode" + } + }, + "BTInstance get_bt_instance() 🔗\u0000{\"1\": \"BTInstance\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 395, + "tpl": "BTInstance get_bt_instance() 🔗", + "markers": { + "1": "BTInstance", + "2": "🔗" + } + }, + "Returns the behavior tree instance.\u0000{}": { + "uid": 396, + "tpl": "Returns the behavior tree instance.", + "markers": {} + }, + "<1/> restart() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 397, + "tpl": "<1/> restart() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Resets the behavior tree’s execution. Each running task will be aborted and the next tree execution will start anew. This method does not reset Blackboard.\u0000{\"1\": \"Blackboard\"}": { + "uid": 398, + "tpl": "Resets the behavior tree’s execution. Each running task will be aborted and the next tree execution will start anew. This method does not reset Blackboard.", + "markers": { + "1": "Blackboard" + } + }, + "<1/> set_bt_instance(bt_instance: BTInstance) 🔗\u0000{\"1\": \"void\", \"2\": \"BTInstance\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 399, + "tpl": "<1/> set_bt_instance(bt_instance: BTInstance) 🔗", + "markers": { + "1": "void", + "2": "BTInstance", + "3": "🔗" + } + }, + "Sets the BTInstance to play. This method is useful when you want to switch to a different behavior tree instance at runtime. See also BehaviorTree.instantiate.\u0000{\"1\": \"BTInstance\", \"2\": \"BehaviorTree.instantiate\"}": { + "uid": 400, + "tpl": "Sets the BTInstance to play. This method is useful when you want to switch to a different behavior tree instance at runtime. See also BehaviorTree.instantiate.", + "markers": { + "1": "BTInstance", + "2": "BehaviorTree.instantiate" + } + }, + "<1/> set_scene_root_hint(scene_root: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"Node\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 401, + "tpl": "<1/> set_scene_root_hint(scene_root: <2/>) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "🔗" + } + }, + "Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the BTPlayer is added to the scene tree (before <2/>). This is typically useful when creating BTPlayer nodes dynamically from code.\u0000{\"1\": \"Node\", \"2\": \"NOTIFICATION_READY\"}": { + "uid": 402, + "tpl": "Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the BTPlayer is added to the scene tree (before <2/>). This is typically useful when creating BTPlayer nodes dynamically from code.", + "markers": { + "1": "Node", + "2": "NOTIFICATION_READY" + } + }, + "<1/> update(delta: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"float\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 403, + "tpl": "<1/> update(delta: <2/>) 🔗", + "markers": { + "1": "void", + "2": "float", + "3": "🔗" + } + }, + "Executes the root task of the behavior tree instance if active is <2/>. Call this method when update_mode is set to MANUAL. When update_mode is not MANUAL, the update will be called automatically. See UpdateMode.\u0000{\"1\": \"active\", \"2\": \"true\", \"3\": \"update_mode\", \"4\": \"MANUAL\", \"5\": \"update_mode\", \"6\": \"MANUAL\", \"7\": \"update\", \"8\": \"UpdateMode\"}": { + "uid": 404, + "tpl": "Executes the root task of the behavior tree instance if active is <2/>. Call this method when update_mode is set to MANUAL. When update_mode is not MANUAL, the update will be called automatically. See UpdateMode.", + "markers": { + "1": "active", + "2": "true", + "3": "update_mode", + "4": "MANUAL", + "5": "update_mode", + "6": "MANUAL", + "7": "update", + "8": "UpdateMode" + } + }, + "Blackboard\u0000{}": { + "uid": 405, + "tpl": "Blackboard", + "markers": {} + }, + "A key/value storage for sharing among LimboHSM states and BehaviorTree tasks.\u0000{\"1\": \"LimboHSM\", \"2\": \"BehaviorTree\"}": { + "uid": 406, + "tpl": "A key/value storage for sharing among LimboHSM states and BehaviorTree tasks.", + "markers": { + "1": "LimboHSM", + "2": "BehaviorTree" + } + }, + "Blackboard is where data is stored and shared between states in the LimboHSM system and tasks in a BehaviorTree. Each state and task in the BehaviorTree can access this Blackboard, allowing them to read and write data. This makes it easy to share information between different actions and behaviors.\u0000{\"1\": \"LimboHSM\", \"2\": \"BehaviorTree\", \"3\": \"BehaviorTree\"}": { + "uid": 407, + "tpl": "Blackboard is where data is stored and shared between states in the LimboHSM system and tasks in a BehaviorTree. Each state and task in the BehaviorTree can access this Blackboard, allowing them to read and write data. This makes it easy to share information between different actions and behaviors.", + "markers": { + "1": "LimboHSM", + "2": "BehaviorTree", + "3": "BehaviorTree" + } + }, + "Blackboard can also act as a parent scope for another Blackboard. If a specific variable is not found in the active scope, it looks in the parent Blackboard to find it. A parent Blackboard can itself have its own parent scope, forming what we call a “blackboard scope chain.” Importantly, there is no limit to how many Blackboards can be in this chain, and the Blackboard doesn’t modify values in the parent scopes.\u0000{}": { + "uid": 408, + "tpl": "Blackboard can also act as a parent scope for another Blackboard. If a specific variable is not found in the active scope, it looks in the parent Blackboard to find it. A parent Blackboard can itself have its own parent scope, forming what we call a “blackboard scope chain.” Importantly, there is no limit to how many Blackboards can be in this chain, and the Blackboard doesn’t modify values in the parent scopes.", + "markers": {} + }, + "New scopes can be created using the BTNewScope and BTSubtree decorators. Additionally, a new scope is automatically created for any LimboState that has defined non-empty Blackboard data or for any root-level LimboHSM node.\u0000{\"1\": \"BTNewScope\", \"2\": \"BTSubtree\", \"3\": \"LimboState\", \"4\": \"LimboHSM\"}": { + "uid": 409, + "tpl": "New scopes can be created using the BTNewScope and BTSubtree decorators. Additionally, a new scope is automatically created for any LimboState that has defined non-empty Blackboard data or for any root-level LimboHSM node.", + "markers": { + "1": "BTNewScope", + "2": "BTSubtree", + "3": "LimboState", + "4": "LimboHSM" + } + }, + "bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false)\u0000{\"1\": \"bind_var_to_property\", \"2\": \"StringName\", \"3\": \"Object\", \"4\": \"StringName\", \"5\": \"bool\"}": { + "uid": 410, + "tpl": "bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false)", + "markers": { + "1": "bind_var_to_property", + "2": "StringName", + "3": "Object", + "4": "StringName", + "5": "bool" + } + }, + "clear()\u0000{\"1\": \"clear\"}": { + "uid": 411, + "tpl": "clear()", + "markers": { + "1": "clear" + } + }, + "erase_var(var_name: <2/>)\u0000{\"1\": \"erase_var\", \"2\": \"StringName\"}": { + "uid": 412, + "tpl": "erase_var(var_name: <2/>)", + "markers": { + "1": "erase_var", + "2": "StringName" + } + }, + "Blackboard\u0000{\"1\": \"Blackboard\"}": { + "uid": 413, + "tpl": "Blackboard", + "markers": { + "1": "Blackboard" + } + }, + "get_parent() <2/>\u0000{\"1\": \"get_parent\", \"2\": \"const\"}": { + "uid": 414, + "tpl": "get_parent() <2/>", + "markers": { + "1": "get_parent", + "2": "const" + } + }, + "get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/>\u0000{\"1\": \"get_var\", \"2\": \"StringName\", \"3\": \"Variant\", \"4\": \"bool\", \"5\": \"const\"}": { + "uid": 415, + "tpl": "get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/>", + "markers": { + "1": "get_var", + "2": "StringName", + "3": "Variant", + "4": "bool", + "5": "const" + } + }, + "get_vars_as_dict() <2/>\u0000{\"1\": \"get_vars_as_dict\", \"2\": \"const\"}": { + "uid": 416, + "tpl": "get_vars_as_dict() <2/>", + "markers": { + "1": "get_vars_as_dict", + "2": "const" + } + }, + "has_var(var_name: <2/>) <3/>\u0000{\"1\": \"has_var\", \"2\": \"StringName\", \"3\": \"const\"}": { + "uid": 417, + "tpl": "has_var(var_name: <2/>) <3/>", + "markers": { + "1": "has_var", + "2": "StringName", + "3": "const" + } + }, + "link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false)\u0000{\"1\": \"link_var\", \"2\": \"StringName\", \"3\": \"Blackboard\", \"4\": \"StringName\", \"5\": \"bool\"}": { + "uid": 418, + "tpl": "link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false)", + "markers": { + "1": "link_var", + "2": "StringName", + "3": "Blackboard", + "4": "StringName", + "5": "bool" + } + }, + "Array[<1/>]\u0000{\"1\": \"StringName\"}": { + "uid": 419, + "tpl": "Array[<1/>]", + "markers": { + "1": "StringName" + } + }, + "list_vars() <2/>\u0000{\"1\": \"list_vars\", \"2\": \"const\"}": { + "uid": 420, + "tpl": "list_vars() <2/>", + "markers": { + "1": "list_vars", + "2": "const" + } + }, + "populate_from_dict(dictionary: <2/>)\u0000{\"1\": \"populate_from_dict\", \"2\": \"Dictionary\"}": { + "uid": 421, + "tpl": "populate_from_dict(dictionary: <2/>)", + "markers": { + "1": "populate_from_dict", + "2": "Dictionary" + } + }, + "print_state() <2/>\u0000{\"1\": \"print_state\", \"2\": \"const\"}": { + "uid": 422, + "tpl": "print_state() <2/>", + "markers": { + "1": "print_state", + "2": "const" + } + }, + "set_parent(blackboard: Blackboard)\u0000{\"1\": \"set_parent\", \"2\": \"Blackboard\"}": { + "uid": 423, + "tpl": "set_parent(blackboard: Blackboard)", + "markers": { + "1": "set_parent", + "2": "Blackboard" + } + }, + "set_var(var_name: <2/>, value: <3/>)\u0000{\"1\": \"set_var\", \"2\": \"StringName\", \"3\": \"Variant\"}": { + "uid": 424, + "tpl": "set_var(var_name: <2/>, value: <3/>)", + "markers": { + "1": "set_var", + "2": "StringName", + "3": "Variant" + } + }, + "top() <2/>\u0000{\"1\": \"top\", \"2\": \"const\"}": { + "uid": 425, + "tpl": "top() <2/>", + "markers": { + "1": "top", + "2": "const" + } + }, + "unbind_var(var_name: <2/>)\u0000{\"1\": \"unbind_var\", \"2\": \"StringName\"}": { + "uid": 426, + "tpl": "unbind_var(var_name: <2/>)", + "markers": { + "1": "unbind_var", + "2": "StringName" + } + }, + "<1/> bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false) 🔗\u0000{\"1\": \"void\", \"2\": \"StringName\", \"3\": \"Object\", \"4\": \"StringName\", \"5\": \"bool\", \"6\": \"\\ud83d\\udd17\"}": { + "uid": 427, + "tpl": "<1/> bind_var_to_property(var_name: <2/>, object: <3/>, property: <4/>, create: <5/> = false) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Object", + "4": "StringName", + "5": "bool", + "6": "🔗" + } + }, + "Establish a binding between a variable and the object’s property specified by <1/> and <2/>. Changes to the variable update the property, and vice versa. If <3/> is <4/>, the variable will be created if it doesn’t exist.\u0000{\"1\": \"property\", \"2\": \"object\", \"3\": \"create\", \"4\": \"true\"}": { + "uid": 428, + "tpl": "Establish a binding between a variable and the object’s property specified by <1/> and <2/>. Changes to the variable update the property, and vice versa. If <3/> is <4/>, the variable will be created if it doesn’t exist.", + "markers": { + "1": "property", + "2": "object", + "3": "create", + "4": "true" + } + }, + "<1/> clear() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 429, + "tpl": "<1/> clear() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Removes all variables from the Blackboard. Parent scopes are not affected.\u0000{}": { + "uid": 430, + "tpl": "Removes all variables from the Blackboard. Parent scopes are not affected.", + "markers": {} + }, + "<1/> erase_var(var_name: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"StringName\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 431, + "tpl": "<1/> erase_var(var_name: <2/>) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "🔗" + } + }, + "Removes a variable by its name.\u0000{}": { + "uid": 432, + "tpl": "Removes a variable by its name.", + "markers": {} + }, + "Blackboard get_parent() <2/> 🔗\u0000{\"1\": \"Blackboard\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 433, + "tpl": "Blackboard get_parent() <2/> 🔗", + "markers": { + "1": "Blackboard", + "2": "const", + "3": "🔗" + } + }, + "Returns a Blackboard that serves as the parent scope for this instance.\u0000{}": { + "uid": 434, + "tpl": "Returns a Blackboard that serves as the parent scope for this instance.", + "markers": {} + }, + "<1/> get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/> 🔗\u0000{\"1\": \"Variant\", \"2\": \"StringName\", \"3\": \"Variant\", \"4\": \"bool\", \"5\": \"const\", \"6\": \"\\ud83d\\udd17\"}": { + "uid": 435, + "tpl": "<1/> get_var(var_name: <2/>, default: <3/> = null, complain: <4/> = true) <5/> 🔗", + "markers": { + "1": "Variant", + "2": "StringName", + "3": "Variant", + "4": "bool", + "5": "const", + "6": "🔗" + } + }, + "Returns variable value or <1/> if variable doesn’t exist. If <2/> is <3/>, an error will be printed if variable doesn’t exist. If the variable doesn’t exist in the current Blackboard scope, it will look in the parent scope Blackboard to find it.\u0000{\"1\": \"default\", \"2\": \"complain\", \"3\": \"true\"}": { + "uid": 436, + "tpl": "Returns variable value or <1/> if variable doesn’t exist. If <2/> is <3/>, an error will be printed if variable doesn’t exist. If the variable doesn’t exist in the current Blackboard scope, it will look in the parent scope Blackboard to find it.", + "markers": { + "1": "default", + "2": "complain", + "3": "true" + } + }, + "<1/> get_vars_as_dict() <2/> 🔗\u0000{\"1\": \"Dictionary\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 437, + "tpl": "<1/> get_vars_as_dict() <2/> 🔗", + "markers": { + "1": "Dictionary", + "2": "const", + "3": "🔗" + } + }, + "Returns all variables in the Blackboard as a dictionary. Keys are the variable names, values are the variable values. Parent scopes are not included.\u0000{}": { + "uid": 438, + "tpl": "Returns all variables in the Blackboard as a dictionary. Keys are the variable names, values are the variable values. Parent scopes are not included.", + "markers": {} + }, + "<1/> has_var(var_name: <2/>) <3/> 🔗\u0000{\"1\": \"bool\", \"2\": \"StringName\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 439, + "tpl": "<1/> has_var(var_name: <2/>) <3/> 🔗", + "markers": { + "1": "bool", + "2": "StringName", + "3": "const", + "4": "🔗" + } + }, + "Returns <1/> if the Blackboard contains the <2/> variable, including the parent scopes.\u0000{\"1\": \"true\", \"2\": \"var_name\"}": { + "uid": 440, + "tpl": "Returns <1/> if the Blackboard contains the <2/> variable, including the parent scopes.", + "markers": { + "1": "true", + "2": "var_name" + } + }, + "<1/> link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false) 🔗\u0000{\"1\": \"void\", \"2\": \"StringName\", \"3\": \"Blackboard\", \"4\": \"StringName\", \"5\": \"bool\", \"6\": \"\\ud83d\\udd17\"}": { + "uid": 441, + "tpl": "<1/> link_var(var_name: <2/>, target_blackboard: Blackboard, target_var: <4/>, create: <5/> = false) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Blackboard", + "4": "StringName", + "5": "bool", + "6": "🔗" + } + }, + "Links a variable to another Blackboard variable. If a variable is linked to another variable, their state will always be identical, and any change to one will be reflected in the other. If <1/> is <2/>, the variable will be created if it doesn’t exist.\u0000{\"1\": \"create\", \"2\": \"true\"}": { + "uid": 442, + "tpl": "Links a variable to another Blackboard variable. If a variable is linked to another variable, their state will always be identical, and any change to one will be reflected in the other. If <1/> is <2/>, the variable will be created if it doesn’t exist.", + "markers": { + "1": "create", + "2": "true" + } + }, + "You can use this method to link a variable in the current scope to a variable in another scope, or in another Blackboard instance. A variable can only be linked to one other variable. Calling this method again will overwrite the previous link. However, it is possible to link to the same variable from multiple different variables.\u0000{}": { + "uid": 443, + "tpl": "You can use this method to link a variable in the current scope to a variable in another scope, or in another Blackboard instance. A variable can only be linked to one other variable. Calling this method again will overwrite the previous link. However, it is possible to link to the same variable from multiple different variables.", + "markers": {} + }, + "Array[<1/>] list_vars() <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 444, + "tpl": "Array[<1/>] list_vars() <2/> 🔗", + "markers": { + "1": "StringName", + "2": "const", + "3": "🔗" + } + }, + "Returns all variable names in the Blackboard. Parent scopes are not included.\u0000{}": { + "uid": 445, + "tpl": "Returns all variable names in the Blackboard. Parent scopes are not included.", + "markers": {} + }, + "<1/> populate_from_dict(dictionary: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"Dictionary\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 446, + "tpl": "<1/> populate_from_dict(dictionary: <2/>) 🔗", + "markers": { + "1": "void", + "2": "Dictionary", + "3": "🔗" + } + }, + "Fills the Blackboard with multiple variables from a dictionary. The dictionary keys must be variable names and the dictionary values must be variable values. Keys must be StringName or String.\u0000{}": { + "uid": 447, + "tpl": "Fills the Blackboard with multiple variables from a dictionary. The dictionary keys must be variable names and the dictionary values must be variable values. Keys must be StringName or String.", + "markers": {} + }, + "<1/> print_state() <2/> 🔗\u0000{\"1\": \"void\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 448, + "tpl": "<1/> print_state() <2/> 🔗", + "markers": { + "1": "void", + "2": "const", + "3": "🔗" + } + }, + "Prints the values of all variables in each scope.\u0000{}": { + "uid": 449, + "tpl": "Prints the values of all variables in each scope.", + "markers": {} + }, + "<1/> set_parent(blackboard: Blackboard) 🔗\u0000{\"1\": \"void\", \"2\": \"Blackboard\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 450, + "tpl": "<1/> set_parent(blackboard: Blackboard) 🔗", + "markers": { + "1": "void", + "2": "Blackboard", + "3": "🔗" + } + }, + "Assigns the parent scope. If a value isn’t in the current Blackboard scope, it will look in the parent scope Blackboard to find it.\u0000{}": { + "uid": 451, + "tpl": "Assigns the parent scope. If a value isn’t in the current Blackboard scope, it will look in the parent scope Blackboard to find it.", + "markers": {} + }, + "<1/> set_var(var_name: <2/>, value: <3/>) 🔗\u0000{\"1\": \"void\", \"2\": \"StringName\", \"3\": \"Variant\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 452, + "tpl": "<1/> set_var(var_name: <2/>, value: <3/>) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Variant", + "4": "🔗" + } + }, + "Assigns a value to a variable in the current Blackboard scope. If the variable doesn’t exist, it will be created. If the variable already exists in the parent scope, the parent scope value will NOT be changed.\u0000{}": { + "uid": 453, + "tpl": "Assigns a value to a variable in the current Blackboard scope. If the variable doesn’t exist, it will be created. If the variable already exists in the parent scope, the parent scope value will NOT be changed.", + "markers": {} + }, + "Blackboard top() <2/> 🔗\u0000{\"1\": \"Blackboard\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 454, + "tpl": "Blackboard top() <2/> 🔗", + "markers": { + "1": "Blackboard", + "2": "const", + "3": "🔗" + } + }, + "Returns the topmost Blackboard in the scope chain.\u0000{}": { + "uid": 455, + "tpl": "Returns the topmost Blackboard in the scope chain.", + "markers": {} + }, + "<1/> unbind_var(var_name: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"StringName\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 456, + "tpl": "<1/> unbind_var(var_name: <2/>) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "🔗" + } + }, + "Remove binding from a variable.\u0000{}": { + "uid": 457, + "tpl": "Remove binding from a variable.", + "markers": {} + }, + "BBParam\u0000{}": { + "uid": 458, + "tpl": "BBParam", + "markers": {} + }, + "Inherited By: BBAabb, BBArray, BBBasis, BBBool, BBByteArray, BBColor, BBColorArray, BBDictionary, BBFloat, BBFloat32Array, BBFloat64Array, BBInt, BBInt32Array, BBInt64Array, BBNode, BBPlane, BBProjection, BBQuaternion, BBRect2, BBRect2i, BBString, BBStringArray, BBStringName, BBTransform2D, BBTransform3D, BBVariant, BBVector2, BBVector2Array, BBVector2i, BBVector3, BBVector3Array, BBVector3i, BBVector4, BBVector4i\u0000{\"1\": \"BBAabb\", \"10\": \"BBFloat32Array\", \"11\": \"BBFloat64Array\", \"12\": \"BBInt\", \"13\": \"BBInt32Array\", \"14\": \"BBInt64Array\", \"15\": \"BBNode\", \"16\": \"BBPlane\", \"17\": \"BBProjection\", \"18\": \"BBQuaternion\", \"19\": \"BBRect2\", \"2\": \"BBArray\", \"20\": \"BBRect2i\", \"21\": \"BBString\", \"22\": \"BBStringArray\", \"23\": \"BBStringName\", \"24\": \"BBTransform2D\", \"25\": \"BBTransform3D\", \"26\": \"BBVariant\", \"27\": \"BBVector2\", \"28\": \"BBVector2Array\", \"29\": \"BBVector2i\", \"3\": \"BBBasis\", \"30\": \"BBVector3\", \"31\": \"BBVector3Array\", \"32\": \"BBVector3i\", \"33\": \"BBVector4\", \"34\": \"BBVector4i\", \"4\": \"BBBool\", \"5\": \"BBByteArray\", \"6\": \"BBColor\", \"7\": \"BBColorArray\", \"8\": \"BBDictionary\", \"9\": \"BBFloat\"}": { + "uid": 459, + "tpl": "Inherited By: BBAabb, BBArray, BBBasis, BBBool, BBByteArray, BBColor, BBColorArray, BBDictionary, BBFloat, BBFloat32Array, BBFloat64Array, BBInt, BBInt32Array, BBInt64Array, BBNode, BBPlane, BBProjection, BBQuaternion, BBRect2, BBRect2i, BBString, BBStringArray, BBStringName, BBTransform2D, BBTransform3D, BBVariant, BBVector2, BBVector2Array, BBVector2i, BBVector3, BBVector3Array, BBVector3i, BBVector4, BBVector4i", + "markers": { + "1": "BBAabb", + "2": "BBArray", + "3": "BBBasis", + "4": "BBBool", + "5": "BBByteArray", + "6": "BBColor", + "7": "BBColorArray", + "8": "BBDictionary", + "9": "BBFloat", + "10": "BBFloat32Array", + "11": "BBFloat64Array", + "12": "BBInt", + "13": "BBInt32Array", + "14": "BBInt64Array", + "15": "BBNode", + "16": "BBPlane", + "17": "BBProjection", + "18": "BBQuaternion", + "19": "BBRect2", + "20": "BBRect2i", + "21": "BBString", + "22": "BBStringArray", + "23": "BBStringName", + "24": "BBTransform2D", + "25": "BBTransform3D", + "26": "BBVariant", + "27": "BBVector2", + "28": "BBVector2Array", + "29": "BBVector2i", + "30": "BBVector3", + "31": "BBVector3Array", + "32": "BBVector3i", + "33": "BBVector4", + "34": "BBVector4i" + } + }, + "A base class for LimboAI typed parameters.\u0000{}": { + "uid": 460, + "tpl": "A base class for LimboAI typed parameters.", + "markers": {} + }, + "A base class for LimboAI typed parameters, with the ability to reference a Blackboard variable or hold a raw value of a specific Variant.Type.\u0000{\"1\": \"Blackboard\"}": { + "uid": 461, + "tpl": "A base class for LimboAI typed parameters, with the ability to reference a Blackboard variable or hold a raw value of a specific Variant.Type.", + "markers": { + "1": "Blackboard" + } + }, + "Note: Don’t instantiate. Use specific subtypes instead.\u0000{}": { + "uid": 462, + "tpl": "Note: Don’t instantiate. Use specific subtypes instead.", + "markers": {} + }, + "saved_value\u0000{\"1\": \"saved_value\"}": { + "uid": 463, + "tpl": "saved_value", + "markers": { + "1": "saved_value" + } + }, + "ValueSource\u0000{\"1\": \"ValueSource\"}": { + "uid": 464, + "tpl": "ValueSource", + "markers": { + "1": "ValueSource" + } + }, + "value_source\u0000{\"1\": \"value_source\"}": { + "uid": 465, + "tpl": "value_source", + "markers": { + "1": "value_source" + } + }, + "variable\u0000{\"1\": \"variable\"}": { + "uid": 466, + "tpl": "variable", + "markers": { + "1": "variable" + } + }, + "Variant.Type\u0000{}": { + "uid": 467, + "tpl": "Variant.Type", + "markers": {} + }, + "get_type() <2/>\u0000{\"1\": \"get_type\", \"2\": \"const\"}": { + "uid": 468, + "tpl": "get_type() <2/>", + "markers": { + "1": "get_type", + "2": "const" + } + }, + "get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null)\u0000{\"1\": \"get_value\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Variant\"}": { + "uid": 469, + "tpl": "get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null)", + "markers": { + "1": "get_value", + "2": "Node", + "3": "Blackboard", + "4": "Variant" + } + }, + "enum ValueSource: 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 470, + "tpl": "enum ValueSource: 🔗", + "markers": { + "1": "🔗" + } + }, + "ValueSource SAVED_VALUE = <2/>\u0000{\"1\": \"ValueSource\", \"2\": \"0\"}": { + "uid": 471, + "tpl": "ValueSource SAVED_VALUE = <2/>", + "markers": { + "1": "ValueSource", + "2": "0" + } + }, + "The value is stored directly within the BBParam resource.\u0000{}": { + "uid": 472, + "tpl": "The value is stored directly within the BBParam resource.", + "markers": {} + }, + "ValueSource BLACKBOARD_VAR = <2/>\u0000{\"1\": \"ValueSource\", \"2\": \"1\"}": { + "uid": 473, + "tpl": "ValueSource BLACKBOARD_VAR = <2/>", + "markers": { + "1": "ValueSource", + "2": "1" + } + }, + "The value is referenced by a variable name and retrieved from the Blackboard. The variable name is stored within the BBParam resource.\u0000{\"1\": \"Blackboard\"}": { + "uid": 474, + "tpl": "The value is referenced by a variable name and retrieved from the Blackboard. The variable name is stored within the BBParam resource.", + "markers": { + "1": "Blackboard" + } + }, + "<1/> saved_value = <2/> 🔗\u0000{\"1\": \"Variant\", \"2\": \"null\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 475, + "tpl": "<1/> saved_value = <2/> 🔗", + "markers": { + "1": "Variant", + "2": "null", + "3": "🔗" + } + }, + "<1/> set_saved_value(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"Variant\"}": { + "uid": 476, + "tpl": "<1/> set_saved_value(value: <2/>)", + "markers": { + "1": "void", + "2": "Variant" + } + }, + "<1/> get_saved_value()\u0000{\"1\": \"Variant\"}": { + "uid": 477, + "tpl": "<1/> get_saved_value()", + "markers": { + "1": "Variant" + } + }, + "Stores the parameter value when value_source is set to SAVED_VALUE. The data type of the value is determined by get_type.\u0000{\"1\": \"value_source\", \"2\": \"SAVED_VALUE\", \"3\": \"get_type\"}": { + "uid": 478, + "tpl": "Stores the parameter value when value_source is set to SAVED_VALUE. The data type of the value is determined by get_type.", + "markers": { + "1": "value_source", + "2": "SAVED_VALUE", + "3": "get_type" + } + }, + "ValueSource value_source = <2/> 🔗\u0000{\"1\": \"ValueSource\", \"2\": \"0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 479, + "tpl": "ValueSource value_source = <2/> 🔗", + "markers": { + "1": "ValueSource", + "2": "0", + "3": "🔗" + } + }, + "<1/> set_value_source(value: ValueSource)\u0000{\"1\": \"void\", \"2\": \"ValueSource\"}": { + "uid": 480, + "tpl": "<1/> set_value_source(value: ValueSource)", + "markers": { + "1": "void", + "2": "ValueSource" + } + }, + "ValueSource get_value_source()\u0000{\"1\": \"ValueSource\"}": { + "uid": 481, + "tpl": "ValueSource get_value_source()", + "markers": { + "1": "ValueSource" + } + }, + "Specifies the source of the value for BBParam. See ValueSource.\u0000{\"1\": \"ValueSource\"}": { + "uid": 482, + "tpl": "Specifies the source of the value for BBParam. See ValueSource.", + "markers": { + "1": "ValueSource" + } + }, + "<1/> variable 🔗\u0000{\"1\": \"StringName\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 483, + "tpl": "<1/> variable 🔗", + "markers": { + "1": "StringName", + "2": "🔗" + } + }, + "<1/> set_variable(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 484, + "tpl": "<1/> set_variable(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_variable()\u0000{\"1\": \"StringName\"}": { + "uid": 485, + "tpl": "<1/> get_variable()", + "markers": { + "1": "StringName" + } + }, + "Stores the name of a Blackboard variable when value_source is set to BLACKBOARD_VAR.\u0000{\"1\": \"Blackboard\", \"2\": \"value_source\", \"3\": \"BLACKBOARD_VAR\"}": { + "uid": 486, + "tpl": "Stores the name of a Blackboard variable when value_source is set to BLACKBOARD_VAR.", + "markers": { + "1": "Blackboard", + "2": "value_source", + "3": "BLACKBOARD_VAR" + } + }, + "Variant.Type get_type() <1/> 🔗\u0000{\"1\": \"const\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 487, + "tpl": "Variant.Type get_type() <1/> 🔗", + "markers": { + "1": "const", + "2": "🔗" + } + }, + "Returns the expected data type of the parameter.\u0000{}": { + "uid": 488, + "tpl": "Returns the expected data type of the parameter.", + "markers": {} + }, + "<1/> get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null) 🔗\u0000{\"1\": \"Variant\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Variant\", \"5\": \"\\ud83d\\udd17\"}": { + "uid": 489, + "tpl": "<1/> get_value(scene_root: <2/>, blackboard: Blackboard, default: <4/> = null) 🔗", + "markers": { + "1": "Variant", + "2": "Node", + "3": "Blackboard", + "4": "Variant", + "5": "🔗" + } + }, + "Returns the value of the parameter.\u0000{}": { + "uid": 490, + "tpl": "Returns the value of the parameter.", + "markers": {} + }, + "LimboState\u0000{}": { + "uid": 491, + "tpl": "LimboState", + "markers": {} + }, + "Inherited By: BTState, LimboHSM\u0000{\"1\": \"BTState\", \"2\": \"LimboHSM\"}": { + "uid": 492, + "tpl": "Inherited By: BTState, LimboHSM", + "markers": { + "1": "BTState", + "2": "LimboHSM" + } + }, + "A state node for Hierarchical State Machines (HSM).\u0000{}": { + "uid": 493, + "tpl": "A state node for Hierarchical State Machines (HSM).", + "markers": {} + }, + "A LimboAI state node for Hierarchical State Machines (HSM).\u0000{}": { + "uid": 494, + "tpl": "A LimboAI state node for Hierarchical State Machines (HSM).", + "markers": {} + }, + "You can create your state behavior by extending this class. To implement your state logic, you can override _enter, _exit, _setup, and _update. Alternatively, you can delegate state implementation to external methods using the <5/> methods.\u0000{\"1\": \"_enter\", \"2\": \"_exit\", \"3\": \"_setup\", \"4\": \"_update\", \"5\": \"call_on_*\"}": { + "uid": 495, + "tpl": "You can create your state behavior by extending this class. To implement your state logic, you can override _enter, _exit, _setup, and _update. Alternatively, you can delegate state implementation to external methods using the <5/> methods.", + "markers": { + "1": "_enter", + "2": "_exit", + "3": "_setup", + "4": "_update", + "5": "call_on_*" + } + }, + "For additional details on state machines, refer to LimboHSM.\u0000{\"1\": \"LimboHSM\"}": { + "uid": 496, + "tpl": "For additional details on state machines, refer to LimboHSM.", + "markers": { + "1": "LimboHSM" + } + }, + "EVENT_FINISHED\u0000{\"1\": \"EVENT_FINISHED\"}": { + "uid": 497, + "tpl": "EVENT_FINISHED", + "markers": { + "1": "EVENT_FINISHED" + } + }, + "agent\u0000{\"1\": \"agent\"}": { + "uid": 498, + "tpl": "agent", + "markers": { + "1": "agent" + } + }, + "blackboard\u0000{\"1\": \"blackboard\"}": { + "uid": 499, + "tpl": "blackboard", + "markers": { + "1": "blackboard" + } + }, + "blackboard_plan\u0000{\"1\": \"blackboard_plan\"}": { + "uid": 500, + "tpl": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + "_enter() <2/>\u0000{\"1\": \"_enter\", \"2\": \"virtual\"}": { + "uid": 501, + "tpl": "_enter() <2/>", + "markers": { + "1": "_enter", + "2": "virtual" + } + }, + "_exit() <2/>\u0000{\"1\": \"_exit\", \"2\": \"virtual\"}": { + "uid": 502, + "tpl": "_exit() <2/>", + "markers": { + "1": "_exit", + "2": "virtual" + } + }, + "_setup() <2/>\u0000{\"1\": \"_setup\", \"2\": \"virtual\"}": { + "uid": 503, + "tpl": "_setup() <2/>", + "markers": { + "1": "_setup", + "2": "virtual" + } + }, + "_update(delta: <2/>) <3/>\u0000{\"1\": \"_update\", \"2\": \"float\", \"3\": \"virtual\"}": { + "uid": 504, + "tpl": "_update(delta: <2/>) <3/>", + "markers": { + "1": "_update", + "2": "float", + "3": "virtual" + } + }, + "add_event_handler(event: <2/>, handler: <3/>)\u0000{\"1\": \"add_event_handler\", \"2\": \"StringName\", \"3\": \"Callable\"}": { + "uid": 505, + "tpl": "add_event_handler(event: <2/>, handler: <3/>)", + "markers": { + "1": "add_event_handler", + "2": "StringName", + "3": "Callable" + } + }, + "LimboState\u0000{\"1\": \"LimboState\"}": { + "uid": 506, + "tpl": "LimboState", + "markers": { + "1": "LimboState" + } + }, + "call_on_enter(callable: <2/>)\u0000{\"1\": \"call_on_enter\", \"2\": \"Callable\"}": { + "uid": 507, + "tpl": "call_on_enter(callable: <2/>)", + "markers": { + "1": "call_on_enter", + "2": "Callable" + } + }, + "call_on_exit(callable: <2/>)\u0000{\"1\": \"call_on_exit\", \"2\": \"Callable\"}": { + "uid": 508, + "tpl": "call_on_exit(callable: <2/>)", + "markers": { + "1": "call_on_exit", + "2": "Callable" + } + }, + "call_on_update(callable: <2/>)\u0000{\"1\": \"call_on_update\", \"2\": \"Callable\"}": { + "uid": 509, + "tpl": "call_on_update(callable: <2/>)", + "markers": { + "1": "call_on_update", + "2": "Callable" + } + }, + "clear_guard()\u0000{\"1\": \"clear_guard\"}": { + "uid": 510, + "tpl": "clear_guard()", + "markers": { + "1": "clear_guard" + } + }, + "dispatch(event: <2/>, cargo: <3/> = null)\u0000{\"1\": \"dispatch\", \"2\": \"StringName\", \"3\": \"Variant\"}": { + "uid": 511, + "tpl": "dispatch(event: <2/>, cargo: <3/> = null)", + "markers": { + "1": "dispatch", + "2": "StringName", + "3": "Variant" + } + }, + "get_root() <2/>\u0000{\"1\": \"get_root\", \"2\": \"const\"}": { + "uid": 512, + "tpl": "get_root() <2/>", + "markers": { + "1": "get_root", + "2": "const" + } + }, + "is_active() <2/>\u0000{\"1\": \"is_active\", \"2\": \"const\"}": { + "uid": 513, + "tpl": "is_active() <2/>", + "markers": { + "1": "is_active", + "2": "const" + } + }, + "named(name: <2/>)\u0000{\"1\": \"named\", \"2\": \"String\"}": { + "uid": 514, + "tpl": "named(name: <2/>)", + "markers": { + "1": "named", + "2": "String" + } + }, + "set_guard(guard_callable: <2/>)\u0000{\"1\": \"set_guard\", \"2\": \"Callable\"}": { + "uid": 515, + "tpl": "set_guard(guard_callable: <2/>)", + "markers": { + "1": "set_guard", + "2": "Callable" + } + }, + "entered() 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 516, + "tpl": "entered() 🔗", + "markers": { + "1": "🔗" + } + }, + "Emitted when the state is entered.\u0000{}": { + "uid": 517, + "tpl": "Emitted when the state is entered.", + "markers": {} + }, + "exited() 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 518, + "tpl": "exited() 🔗", + "markers": { + "1": "🔗" + } + }, + "Emitted when the state is exited.\u0000{}": { + "uid": 519, + "tpl": "Emitted when the state is exited.", + "markers": {} + }, + "setup() 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 520, + "tpl": "setup() 🔗", + "markers": { + "1": "🔗" + } + }, + "Emitted when the state is initialized.\u0000{}": { + "uid": 521, + "tpl": "Emitted when the state is initialized.", + "markers": {} + }, + "updated(delta: <1/>) 🔗\u0000{\"1\": \"float\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 522, + "tpl": "updated(delta: <1/>) 🔗", + "markers": { + "1": "float", + "2": "🔗" + } + }, + "Emitted when the state is updated.\u0000{}": { + "uid": 523, + "tpl": "Emitted when the state is updated.", + "markers": {} + }, + "<1/> EVENT_FINISHED 🔗\u0000{\"1\": \"StringName\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 524, + "tpl": "<1/> EVENT_FINISHED 🔗", + "markers": { + "1": "StringName", + "2": "🔗" + } + }, + "<1/> event_finished()\u0000{\"1\": \"StringName\"}": { + "uid": 525, + "tpl": "<1/> event_finished()", + "markers": { + "1": "StringName" + } + }, + "A commonly used event that indicates that the state has finished its work.\u0000{}": { + "uid": 526, + "tpl": "A commonly used event that indicates that the state has finished its work.", + "markers": {} + }, + "<1/> agent 🔗\u0000{\"1\": \"Node\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 527, + "tpl": "<1/> agent 🔗", + "markers": { + "1": "Node", + "2": "🔗" + } + }, + "An agent associated with the state, assigned during initialization.\u0000{}": { + "uid": 528, + "tpl": "An agent associated with the state, assigned during initialization.", + "markers": {} + }, + "Blackboard blackboard 🔗\u0000{\"1\": \"Blackboard\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 529, + "tpl": "Blackboard blackboard 🔗", + "markers": { + "1": "Blackboard", + "2": "🔗" + } + }, + "A key/value data store shared by states within the state machine to which this state belongs.\u0000{}": { + "uid": 530, + "tpl": "A key/value data store shared by states within the state machine to which this state belongs.", + "markers": {} + }, + "BlackboardPlan blackboard_plan 🔗\u0000{\"1\": \"BlackboardPlan\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 531, + "tpl": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + "<1/> _enter() <2/> 🔗\u0000{\"1\": \"void\", \"2\": \"virtual\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 532, + "tpl": "<1/> _enter() <2/> 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + "Called when the state is entered.\u0000{}": { + "uid": 533, + "tpl": "Called when the state is entered.", + "markers": {} + }, + "<1/> _exit() <2/> 🔗\u0000{\"1\": \"void\", \"2\": \"virtual\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 534, + "tpl": "<1/> _exit() <2/> 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + "Called when the state is exited. This happens on a transition to another state, and when the state machine is removed from the scene tree (e.g., when the node is freed with Node.queue_free or the scene changes). Due to implementation details, _exit will not be called on Object.free!\u0000{\"1\": \"_exit\"}": { + "uid": 535, + "tpl": "Called when the state is exited. This happens on a transition to another state, and when the state machine is removed from the scene tree (e.g., when the node is freed with Node.queue_free or the scene changes). Due to implementation details, _exit will not be called on Object.free!", + "markers": { + "1": "_exit" + } + }, + "<1/> _setup() <2/> 🔗\u0000{\"1\": \"void\", \"2\": \"virtual\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 536, + "tpl": "<1/> _setup() <2/> 🔗", + "markers": { + "1": "void", + "2": "virtual", + "3": "🔗" + } + }, + "Called once during initialization. Use this method to initialize your state.\u0000{}": { + "uid": 537, + "tpl": "Called once during initialization. Use this method to initialize your state.", + "markers": {} + }, + "<1/> _update(delta: <2/>) <3/> 🔗\u0000{\"1\": \"void\", \"2\": \"float\", \"3\": \"virtual\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 538, + "tpl": "<1/> _update(delta: <2/>) <3/> 🔗", + "markers": { + "1": "void", + "2": "float", + "3": "virtual", + "4": "🔗" + } + }, + "Called during the update. Implement your state’s behavior with this method.\u0000{}": { + "uid": 539, + "tpl": "Called during the update. Implement your state’s behavior with this method.", + "markers": {} + }, + "<1/> add_event_handler(event: <2/>, handler: <3/>) 🔗\u0000{\"1\": \"void\", \"2\": \"StringName\", \"3\": \"Callable\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 540, + "tpl": "<1/> add_event_handler(event: <2/>, handler: <3/>) 🔗", + "markers": { + "1": "void", + "2": "StringName", + "3": "Callable", + "4": "🔗" + } + }, + "Registers a <1/> to be called when <2/> is dispatched. The handler function should have the following signature:\u0000{\"1\": \"handler\", \"2\": \"event\"}": { + "uid": 541, + "tpl": "Registers a <1/> to be called when <2/> is dispatched. The handler function should have the following signature:", + "markers": { + "1": "handler", + "2": "event" + } + }, + "If the handler returns <1/>, the event will be consumed. Cargo is an optional parameter that can be passed to the handler. See also dispatch.\u0000{\"1\": \"true\", \"2\": \"dispatch\"}": { + "uid": 542, + "tpl": "If the handler returns <1/>, the event will be consumed. Cargo is an optional parameter that can be passed to the handler. See also dispatch.", + "markers": { + "1": "true", + "2": "dispatch" + } + }, + "LimboState call_on_enter(callable: <2/>) 🔗\u0000{\"1\": \"LimboState\", \"2\": \"Callable\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 543, + "tpl": "LimboState call_on_enter(callable: <2/>) 🔗", + "markers": { + "1": "LimboState", + "2": "Callable", + "3": "🔗" + } + }, + "A chained method that connects the entered signal to a <2/>.\u0000{\"1\": \"entered\", \"2\": \"callable\"}": { + "uid": 544, + "tpl": "A chained method that connects the entered signal to a <2/>.", + "markers": { + "1": "entered", + "2": "callable" + } + }, + "LimboState call_on_exit(callable: <2/>) 🔗\u0000{\"1\": \"LimboState\", \"2\": \"Callable\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 545, + "tpl": "LimboState call_on_exit(callable: <2/>) 🔗", + "markers": { + "1": "LimboState", + "2": "Callable", + "3": "🔗" + } + }, + "A chained method that connects the exited signal to a <2/>.\u0000{\"1\": \"exited\", \"2\": \"callable\"}": { + "uid": 546, + "tpl": "A chained method that connects the exited signal to a <2/>.", + "markers": { + "1": "exited", + "2": "callable" + } + }, + "LimboState call_on_update(callable: <2/>) 🔗\u0000{\"1\": \"LimboState\", \"2\": \"Callable\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 547, + "tpl": "LimboState call_on_update(callable: <2/>) 🔗", + "markers": { + "1": "LimboState", + "2": "Callable", + "3": "🔗" + } + }, + "A chained method that connects the updated signal to a <2/>.\u0000{\"1\": \"updated\", \"2\": \"callable\"}": { + "uid": 548, + "tpl": "A chained method that connects the updated signal to a <2/>.", + "markers": { + "1": "updated", + "2": "callable" + } + }, + "<1/> clear_guard() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 549, + "tpl": "<1/> clear_guard() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Clears the guard function, removing the <1/> previously set by set_guard.\u0000{\"1\": \"Callable\", \"2\": \"set_guard\"}": { + "uid": 550, + "tpl": "Clears the guard function, removing the <1/> previously set by set_guard.", + "markers": { + "1": "Callable", + "2": "set_guard" + } + }, + "<1/> dispatch(event: <2/>, cargo: <3/> = null) 🔗\u0000{\"1\": \"bool\", \"2\": \"StringName\", \"3\": \"Variant\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 551, + "tpl": "<1/> dispatch(event: <2/>, cargo: <3/> = null) 🔗", + "markers": { + "1": "bool", + "2": "StringName", + "3": "Variant", + "4": "🔗" + } + }, + "Recursively dispatches a state machine event named <1/> with an optional argument <2/>. Returns <3/> if the event was consumed.\u0000{\"1\": \"event\", \"2\": \"cargo\", \"3\": \"true\"}": { + "uid": 552, + "tpl": "Recursively dispatches a state machine event named <1/> with an optional argument <2/>. Returns <3/> if the event was consumed.", + "markers": { + "1": "event", + "2": "cargo", + "3": "true" + } + }, + "Events propagate from the leaf state to the root state, and propagation stops as soon as any state consumes the event. States will consume the event if they have a related transition or event handler. For more information on event handlers, see add_event_handler.\u0000{\"1\": \"add_event_handler\"}": { + "uid": 553, + "tpl": "Events propagate from the leaf state to the root state, and propagation stops as soon as any state consumes the event. States will consume the event if they have a related transition or event handler. For more information on event handlers, see add_event_handler.", + "markers": { + "1": "add_event_handler" + } + }, + "LimboState get_root() <2/> 🔗\u0000{\"1\": \"LimboState\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 554, + "tpl": "LimboState get_root() <2/> 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + "Returns the root LimboState.\u0000{}": { + "uid": 555, + "tpl": "Returns the root LimboState.", + "markers": {} + }, + "<1/> is_active() <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 556, + "tpl": "<1/> is_active() <2/> 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + "Returns <1/> if it is currently active, meaning it is the active substate of the parent LimboHSM.\u0000{\"1\": \"true\", \"2\": \"LimboHSM\"}": { + "uid": 557, + "tpl": "Returns <1/> if it is currently active, meaning it is the active substate of the parent LimboHSM.", + "markers": { + "1": "true", + "2": "LimboHSM" + } + }, + "LimboState named(name: <2/>) 🔗\u0000{\"1\": \"LimboState\", \"2\": \"String\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 558, + "tpl": "LimboState named(name: <2/>) 🔗", + "markers": { + "1": "LimboState", + "2": "String", + "3": "🔗" + } + }, + "A chained method for setting the name of this state.\u0000{}": { + "uid": 559, + "tpl": "A chained method for setting the name of this state.", + "markers": {} + }, + "<1/> set_guard(guard_callable: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"Callable\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 560, + "tpl": "<1/> set_guard(guard_callable: <2/>) 🔗", + "markers": { + "1": "void", + "2": "Callable", + "3": "🔗" + } + }, + "Sets the guard function, which is a function called each time a transition to this state is considered. If the function returns <1/>, the transition will be disallowed.\u0000{\"1\": \"false\"}": { + "uid": 561, + "tpl": "Sets the guard function, which is a function called each time a transition to this state is considered. If the function returns <1/>, the transition will be disallowed.", + "markers": { + "1": "false" + } + }, + "LimboHSM\u0000{}": { + "uid": 562, + "tpl": "LimboHSM", + "markers": {} + }, + "Inherits: LimboState\u0000{\"1\": \"LimboState\"}": { + "uid": 563, + "tpl": "Inherits: LimboState", + "markers": { + "1": "LimboState" + } + }, + "Event-based Hierarchical State Machine (HSM).\u0000{}": { + "uid": 564, + "tpl": "Event-based Hierarchical State Machine (HSM).", + "markers": {} + }, + "Event-based Hierarchical State Machine (HSM) that manages LimboState instances and facilitates transitions between them. LimboHSM is a LimboState in itself and can also serve as a child of another LimboHSM node.\u0000{\"1\": \"LimboState\", \"2\": \"LimboState\"}": { + "uid": 565, + "tpl": "Event-based Hierarchical State Machine (HSM) that manages LimboState instances and facilitates transitions between them. LimboHSM is a LimboState in itself and can also serve as a child of another LimboHSM node.", + "markers": { + "1": "LimboState", + "2": "LimboState" + } + }, + "LimboState\u0000{\"1\": \"LimboState\"}": { + "uid": 566, + "tpl": "LimboState", + "markers": { + "1": "LimboState" + } + }, + "ANYSTATE\u0000{\"1\": \"ANYSTATE\"}": { + "uid": 567, + "tpl": "ANYSTATE", + "markers": { + "1": "ANYSTATE" + } + }, + "initial_state\u0000{\"1\": \"initial_state\"}": { + "uid": 568, + "tpl": "initial_state", + "markers": { + "1": "initial_state" + } + }, + "UpdateMode\u0000{\"1\": \"UpdateMode\"}": { + "uid": 569, + "tpl": "UpdateMode", + "markers": { + "1": "UpdateMode" + } + }, + "update_mode\u0000{\"1\": \"update_mode\"}": { + "uid": 570, + "tpl": "update_mode", + "markers": { + "1": "update_mode" + } + }, + "add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable())\u0000{\"1\": \"add_transition\", \"2\": \"LimboState\", \"3\": \"LimboState\", \"4\": \"StringName\", \"5\": \"Callable\"}": { + "uid": 571, + "tpl": "add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable())", + "markers": { + "1": "add_transition", + "2": "LimboState", + "3": "LimboState", + "4": "StringName", + "5": "Callable" + } + }, + "change_active_state(state: LimboState)\u0000{\"1\": \"change_active_state\", \"2\": \"LimboState\"}": { + "uid": 572, + "tpl": "change_active_state(state: LimboState)", + "markers": { + "1": "change_active_state", + "2": "LimboState" + } + }, + "get_active_state() <2/>\u0000{\"1\": \"get_active_state\", \"2\": \"const\"}": { + "uid": 573, + "tpl": "get_active_state() <2/>", + "markers": { + "1": "get_active_state", + "2": "const" + } + }, + "get_leaf_state() <2/>\u0000{\"1\": \"get_leaf_state\", \"2\": \"const\"}": { + "uid": 574, + "tpl": "get_leaf_state() <2/>", + "markers": { + "1": "get_leaf_state", + "2": "const" + } + }, + "get_previous_active_state() <2/>\u0000{\"1\": \"get_previous_active_state\", \"2\": \"const\"}": { + "uid": 575, + "tpl": "get_previous_active_state() <2/>", + "markers": { + "1": "get_previous_active_state", + "2": "const" + } + }, + "has_transition(from_state: LimboState, event: <3/>) <4/>\u0000{\"1\": \"has_transition\", \"2\": \"LimboState\", \"3\": \"StringName\", \"4\": \"const\"}": { + "uid": 576, + "tpl": "has_transition(from_state: LimboState, event: <3/>) <4/>", + "markers": { + "1": "has_transition", + "2": "LimboState", + "3": "StringName", + "4": "const" + } + }, + "initialize(agent: <2/>, parent_scope: Blackboard = null)\u0000{\"1\": \"initialize\", \"2\": \"Node\", \"3\": \"Blackboard\"}": { + "uid": 577, + "tpl": "initialize(agent: <2/>, parent_scope: Blackboard = null)", + "markers": { + "1": "initialize", + "2": "Node", + "3": "Blackboard" + } + }, + "remove_transition(from_state: LimboState, event: <3/>)\u0000{\"1\": \"remove_transition\", \"2\": \"LimboState\", \"3\": \"StringName\"}": { + "uid": 578, + "tpl": "remove_transition(from_state: LimboState, event: <3/>)", + "markers": { + "1": "remove_transition", + "2": "LimboState", + "3": "StringName" + } + }, + "set_active(active: <2/>)\u0000{\"1\": \"set_active\", \"2\": \"bool\"}": { + "uid": 579, + "tpl": "set_active(active: <2/>)", + "markers": { + "1": "set_active", + "2": "bool" + } + }, + "update(delta: <2/>)\u0000{\"1\": \"update\", \"2\": \"float\"}": { + "uid": 580, + "tpl": "update(delta: <2/>)", + "markers": { + "1": "update", + "2": "float" + } + }, + "active_state_changed(current: LimboState, previous: LimboState) 🔗\u0000{\"1\": \"LimboState\", \"2\": \"LimboState\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 581, + "tpl": "active_state_changed(current: LimboState, previous: LimboState) 🔗", + "markers": { + "1": "LimboState", + "2": "LimboState", + "3": "🔗" + } + }, + "Emitted when the currently active substate is switched to a different substate.\u0000{}": { + "uid": 582, + "tpl": "Emitted when the currently active substate is switched to a different substate.", + "markers": {} + }, + "enum UpdateMode: 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 583, + "tpl": "enum UpdateMode: 🔗", + "markers": { + "1": "🔗" + } + }, + "UpdateMode IDLE = <2/>\u0000{\"1\": \"UpdateMode\", \"2\": \"0\"}": { + "uid": 584, + "tpl": "UpdateMode IDLE = <2/>", + "markers": { + "1": "UpdateMode", + "2": "0" + } + }, + "Update the state machine during the idle process.\u0000{}": { + "uid": 585, + "tpl": "Update the state machine during the idle process.", + "markers": {} + }, + "UpdateMode PHYSICS = <2/>\u0000{\"1\": \"UpdateMode\", \"2\": \"1\"}": { + "uid": 586, + "tpl": "UpdateMode PHYSICS = <2/>", + "markers": { + "1": "UpdateMode", + "2": "1" + } + }, + "Update the state machine during the physics process.\u0000{}": { + "uid": 587, + "tpl": "Update the state machine during the physics process.", + "markers": {} + }, + "UpdateMode MANUAL = <2/>\u0000{\"1\": \"UpdateMode\", \"2\": \"2\"}": { + "uid": 588, + "tpl": "UpdateMode MANUAL = <2/>", + "markers": { + "1": "UpdateMode", + "2": "2" + } + }, + "Manually update the state machine by calling update from a script.\u0000{\"1\": \"update\"}": { + "uid": 589, + "tpl": "Manually update the state machine by calling update from a script.", + "markers": { + "1": "update" + } + }, + "LimboState ANYSTATE 🔗\u0000{\"1\": \"LimboState\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 590, + "tpl": "LimboState ANYSTATE 🔗", + "markers": { + "1": "LimboState", + "2": "🔗" + } + }, + "LimboState anystate()\u0000{\"1\": \"LimboState\"}": { + "uid": 591, + "tpl": "LimboState anystate()", + "markers": { + "1": "LimboState" + } + }, + "Useful for defining a transition from any state.\u0000{}": { + "uid": 592, + "tpl": "Useful for defining a transition from any state.", + "markers": {} + }, + "LimboState initial_state 🔗\u0000{\"1\": \"LimboState\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 593, + "tpl": "LimboState initial_state 🔗", + "markers": { + "1": "LimboState", + "2": "🔗" + } + }, + "<1/> set_initial_state(value: LimboState)\u0000{\"1\": \"void\", \"2\": \"LimboState\"}": { + "uid": 594, + "tpl": "<1/> set_initial_state(value: LimboState)", + "markers": { + "1": "void", + "2": "LimboState" + } + }, + "LimboState get_initial_state()\u0000{\"1\": \"LimboState\"}": { + "uid": 595, + "tpl": "LimboState get_initial_state()", + "markers": { + "1": "LimboState" + } + }, + "The substate that becomes active when the state machine is activated using the set_active method. If not explicitly set, the first child of the LimboHSM will be considered the initial state.\u0000{\"1\": \"set_active\"}": { + "uid": 596, + "tpl": "The substate that becomes active when the state machine is activated using the set_active method. If not explicitly set, the first child of the LimboHSM will be considered the initial state.", + "markers": { + "1": "set_active" + } + }, + "UpdateMode update_mode = <2/> 🔗\u0000{\"1\": \"UpdateMode\", \"2\": \"1\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 597, + "tpl": "UpdateMode update_mode = <2/> 🔗", + "markers": { + "1": "UpdateMode", + "2": "1", + "3": "🔗" + } + }, + "<1/> set_update_mode(value: UpdateMode)\u0000{\"1\": \"void\", \"2\": \"UpdateMode\"}": { + "uid": 598, + "tpl": "<1/> set_update_mode(value: UpdateMode)", + "markers": { + "1": "void", + "2": "UpdateMode" + } + }, + "UpdateMode get_update_mode()\u0000{\"1\": \"UpdateMode\"}": { + "uid": 599, + "tpl": "UpdateMode get_update_mode()", + "markers": { + "1": "UpdateMode" + } + }, + "Specifies when the state machine should be updated. See UpdateMode.\u0000{\"1\": \"UpdateMode\"}": { + "uid": 600, + "tpl": "Specifies when the state machine should be updated. See UpdateMode.", + "markers": { + "1": "UpdateMode" + } + }, + "<1/> add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable()) 🔗\u0000{\"1\": \"void\", \"2\": \"LimboState\", \"3\": \"LimboState\", \"4\": \"StringName\", \"5\": \"Callable\", \"6\": \"\\ud83d\\udd17\"}": { + "uid": 601, + "tpl": "<1/> add_transition(from_state: LimboState, to_state: LimboState, event: <4/>, guard: <5/> = Callable()) 🔗", + "markers": { + "1": "void", + "2": "LimboState", + "3": "LimboState", + "4": "StringName", + "5": "Callable", + "6": "🔗" + } + }, + "Establishes a transition from one state to another when <1/> is dispatched. Both <2/> and <3/> must be immediate children of this LimboHSM.\u0000{\"1\": \"event\", \"2\": \"from_state\", \"3\": \"to_state\"}": { + "uid": 602, + "tpl": "Establishes a transition from one state to another when <1/> is dispatched. Both <2/> and <3/> must be immediate children of this LimboHSM.", + "markers": { + "1": "event", + "2": "from_state", + "3": "to_state" + } + }, + "Optionally, a <1/> function can be specified, which must return a boolean value. If the guard function returns <2/>, the transition will not occur. The guard function is called immediately before the transition is considered. For a state-wide guard function, check out LimboState.set_guard.\u0000{\"1\": \"guard\", \"2\": \"false\", \"3\": \"LimboState.set_guard\"}": { + "uid": 603, + "tpl": "Optionally, a <1/> function can be specified, which must return a boolean value. If the guard function returns <2/>, the transition will not occur. The guard function is called immediately before the transition is considered. For a state-wide guard function, check out LimboState.set_guard.", + "markers": { + "1": "guard", + "2": "false", + "3": "LimboState.set_guard" + } + }, + "<1/> change_active_state(state: LimboState) 🔗\u0000{\"1\": \"void\", \"2\": \"LimboState\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 604, + "tpl": "<1/> change_active_state(state: LimboState) 🔗", + "markers": { + "1": "void", + "2": "LimboState", + "3": "🔗" + } + }, + "Changes the currently active substate to <1/>. If <2/> is already active, it will be exited and reentered.\u0000{\"1\": \"state\", \"2\": \"state\"}": { + "uid": 605, + "tpl": "Changes the currently active substate to <1/>. If <2/> is already active, it will be exited and reentered.", + "markers": { + "1": "state", + "2": "state" + } + }, + "<1/> must be a child of this LimboHSM.\u0000{\"1\": \"state\"}": { + "uid": 606, + "tpl": "<1/> must be a child of this LimboHSM.", + "markers": { + "1": "state" + } + }, + "LimboState get_active_state() <2/> 🔗\u0000{\"1\": \"LimboState\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 607, + "tpl": "LimboState get_active_state() <2/> 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + "Returns the currently active substate.\u0000{}": { + "uid": 608, + "tpl": "Returns the currently active substate.", + "markers": {} + }, + "LimboState get_leaf_state() <2/> 🔗\u0000{\"1\": \"LimboState\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 609, + "tpl": "LimboState get_leaf_state() <2/> 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + "Returns the currently active leaf state within the state machine.\u0000{}": { + "uid": 610, + "tpl": "Returns the currently active leaf state within the state machine.", + "markers": {} + }, + "LimboState get_previous_active_state() <2/> 🔗\u0000{\"1\": \"LimboState\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 611, + "tpl": "LimboState get_previous_active_state() <2/> 🔗", + "markers": { + "1": "LimboState", + "2": "const", + "3": "🔗" + } + }, + "Returns the previously active substate.\u0000{}": { + "uid": 612, + "tpl": "Returns the previously active substate.", + "markers": {} + }, + "<1/> has_transition(from_state: LimboState, event: <3/>) <4/> 🔗\u0000{\"1\": \"bool\", \"2\": \"LimboState\", \"3\": \"StringName\", \"4\": \"const\", \"5\": \"\\ud83d\\udd17\"}": { + "uid": 613, + "tpl": "<1/> has_transition(from_state: LimboState, event: <3/>) <4/> 🔗", + "markers": { + "1": "bool", + "2": "LimboState", + "3": "StringName", + "4": "const", + "5": "🔗" + } + }, + "Returns <1/> if there is a transition from <2/> for a given <3/>.\u0000{\"1\": \"true\", \"2\": \"from_state\", \"3\": \"event\"}": { + "uid": 614, + "tpl": "Returns <1/> if there is a transition from <2/> for a given <3/>.", + "markers": { + "1": "true", + "2": "from_state", + "3": "event" + } + }, + "<1/> initialize(agent: <2/>, parent_scope: Blackboard = null) 🔗\u0000{\"1\": \"void\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 615, + "tpl": "<1/> initialize(agent: <2/>, parent_scope: Blackboard = null) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "Blackboard", + "4": "🔗" + } + }, + "Initiates the state and calls LimboState._setup for both itself and all substates.\u0000{\"1\": \"LimboState._setup\"}": { + "uid": 616, + "tpl": "Initiates the state and calls LimboState._setup for both itself and all substates.", + "markers": { + "1": "LimboState._setup" + } + }, + "<1/> remove_transition(from_state: LimboState, event: <3/>) 🔗\u0000{\"1\": \"void\", \"2\": \"LimboState\", \"3\": \"StringName\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 617, + "tpl": "<1/> remove_transition(from_state: LimboState, event: <3/>) 🔗", + "markers": { + "1": "void", + "2": "LimboState", + "3": "StringName", + "4": "🔗" + } + }, + "Removes a transition from a state associated with specific <1/>.\u0000{\"1\": \"event\"}": { + "uid": 618, + "tpl": "Removes a transition from a state associated with specific <1/>.", + "markers": { + "1": "event" + } + }, + "<1/> set_active(active: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"bool\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 619, + "tpl": "<1/> set_active(active: <2/>) 🔗", + "markers": { + "1": "void", + "2": "bool", + "3": "🔗" + } + }, + "When set to <1/>, switches the state to initial_state and activates state processing according to update_mode.\u0000{\"1\": \"true\", \"2\": \"initial_state\", \"3\": \"update_mode\"}": { + "uid": 620, + "tpl": "When set to <1/>, switches the state to initial_state and activates state processing according to update_mode.", + "markers": { + "1": "true", + "2": "initial_state", + "3": "update_mode" + } + }, + "<1/> update(delta: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"float\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 621, + "tpl": "<1/> update(delta: <2/>) 🔗", + "markers": { + "1": "void", + "2": "float", + "3": "🔗" + } + }, + "Calls LimboState._update on itself and the active substate, with the call cascading down to the leaf state. This method is automatically triggered if update_mode is not set to MANUAL.\u0000{\"1\": \"LimboState._update\", \"2\": \"update_mode\", \"3\": \"MANUAL\"}": { + "uid": 622, + "tpl": "Calls LimboState._update on itself and the active substate, with the call cascading down to the leaf state. This method is automatically triggered if update_mode is not set to MANUAL.", + "markers": { + "1": "LimboState._update", + "2": "update_mode", + "3": "MANUAL" + } + }, + "BTState\u0000{}": { + "uid": 623, + "tpl": "BTState", + "markers": {} + }, + "A state node for LimboHSM that hosts a BehaviorTree.\u0000{\"1\": \"LimboHSM\", \"2\": \"BehaviorTree\"}": { + "uid": 624, + "tpl": "A state node for LimboHSM that hosts a BehaviorTree.", + "markers": { + "1": "LimboHSM", + "2": "BehaviorTree" + } + }, + "BTState is a LimboState node that manages a BehaviorTree to provide behavior logic for the state. It instantiates and runs the BehaviorTree resource, dispatching a state machine event upon <4/> or <5/>. Event names are customizable through success_event and failure_event. For further details on state machine events, see LimboState.dispatch.\u0000{\"1\": \"LimboState\", \"2\": \"BehaviorTree\", \"3\": \"BehaviorTree\", \"4\": \"SUCCESS\", \"5\": \"FAILURE\", \"6\": \"success_event\", \"7\": \"failure_event\", \"8\": \"LimboState.dispatch\"}": { + "uid": 625, + "tpl": "BTState is a LimboState node that manages a BehaviorTree to provide behavior logic for the state. It instantiates and runs the BehaviorTree resource, dispatching a state machine event upon <4/> or <5/>. Event names are customizable through success_event and failure_event. For further details on state machine events, see LimboState.dispatch.", + "markers": { + "1": "LimboState", + "2": "BehaviorTree", + "3": "BehaviorTree", + "4": "SUCCESS", + "5": "FAILURE", + "6": "success_event", + "7": "failure_event", + "8": "LimboState.dispatch" + } + }, + "behavior_tree\u0000{\"1\": \"behavior_tree\"}": { + "uid": 626, + "tpl": "behavior_tree", + "markers": { + "1": "behavior_tree" + } + }, + "failure_event\u0000{\"1\": \"failure_event\"}": { + "uid": 627, + "tpl": "failure_event", + "markers": { + "1": "failure_event" + } + }, + "monitor_performance\u0000{\"1\": \"monitor_performance\"}": { + "uid": 628, + "tpl": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + "success_event\u0000{\"1\": \"success_event\"}": { + "uid": 629, + "tpl": "success_event", + "markers": { + "1": "success_event" + } + }, + "get_bt_instance() <2/>\u0000{\"1\": \"get_bt_instance\", \"2\": \"const\"}": { + "uid": 630, + "tpl": "get_bt_instance() <2/>", + "markers": { + "1": "get_bt_instance", + "2": "const" + } + }, + "set_scene_root_hint(scene_root: <2/>)\u0000{\"1\": \"set_scene_root_hint\", \"2\": \"Node\"}": { + "uid": 631, + "tpl": "set_scene_root_hint(scene_root: <2/>)", + "markers": { + "1": "set_scene_root_hint", + "2": "Node" + } + }, + "BehaviorTree behavior_tree 🔗\u0000{\"1\": \"BehaviorTree\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 632, + "tpl": "BehaviorTree behavior_tree 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + "A BehaviorTree resource that defines state behavior.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 633, + "tpl": "A BehaviorTree resource that defines state behavior.", + "markers": { + "1": "BehaviorTree" + } + }, + "<1/> failure_event = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"failure\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 634, + "tpl": "<1/> failure_event = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"failure\"", + "3": "🔗" + } + }, + "<1/> set_failure_event(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 635, + "tpl": "<1/> set_failure_event(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_failure_event()\u0000{\"1\": \"StringName\"}": { + "uid": 636, + "tpl": "<1/> get_failure_event()", + "markers": { + "1": "StringName" + } + }, + "HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch.\u0000{\"1\": \"FAILURE\", \"2\": \"LimboState.dispatch\"}": { + "uid": 637, + "tpl": "HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch.", + "markers": { + "1": "FAILURE", + "2": "LimboState.dispatch" + } + }, + "<1/> monitor_performance = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 638, + "tpl": "<1/> monitor_performance = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTState node.\u0000{\"1\": \"true\"}": { + "uid": 639, + "tpl": "If <1/>, adds a performance monitor to “Debugger->Monitors” for each instance of this BTState node.", + "markers": { + "1": "true" + } + }, + "<1/> success_event = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"success\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 640, + "tpl": "<1/> success_event = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"success\"", + "3": "🔗" + } + }, + "<1/> set_success_event(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 641, + "tpl": "<1/> set_success_event(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_success_event()\u0000{\"1\": \"StringName\"}": { + "uid": 642, + "tpl": "<1/> get_success_event()", + "markers": { + "1": "StringName" + } + }, + "HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch.\u0000{\"1\": \"SUCCESS\", \"2\": \"LimboState.dispatch\"}": { + "uid": 643, + "tpl": "HSM event that will be dispatched when the behavior tree results in <1/>. See LimboState.dispatch.", + "markers": { + "1": "SUCCESS", + "2": "LimboState.dispatch" + } + }, + "BTInstance get_bt_instance() <2/> 🔗\u0000{\"1\": \"BTInstance\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 644, + "tpl": "BTInstance get_bt_instance() <2/> 🔗", + "markers": { + "1": "BTInstance", + "2": "const", + "3": "🔗" + } + }, + "<1/> set_scene_root_hint(scene_root: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"Node\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 645, + "tpl": "<1/> set_scene_root_hint(scene_root: <2/>) 🔗", + "markers": { + "1": "void", + "2": "Node", + "3": "🔗" + } + }, + "Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the state machine is initialized. This is typically useful when creating BTState nodes dynamically from code.\u0000{\"1\": \"Node\"}": { + "uid": 646, + "tpl": "Sets the <1/> that will be used as the scene root for the newly instantiated behavior tree. Should be called before the state machine is initialized. This is typically useful when creating BTState nodes dynamically from code.", + "markers": { + "1": "Node" + } + }, + "Full class reference is available in the side bar.\u0000{}": { + "uid": 647, + "tpl": "Full class reference is available in the side bar.", + "markers": {} + }, + "BBAabb\u0000{}": { + "uid": 648, + "tpl": "BBAabb", + "markers": {} + }, + "Inherits: BBParam\u0000{\"1\": \"BBParam\"}": { + "uid": 649, + "tpl": "Inherits: BBParam", + "markers": { + "1": "BBParam" + } + }, + "AABB-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 650, + "tpl": "AABB-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBArray\u0000{}": { + "uid": 651, + "tpl": "BBArray", + "markers": {} + }, + "Array-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 652, + "tpl": "Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBBasis\u0000{}": { + "uid": 653, + "tpl": "BBBasis", + "markers": {} + }, + "Basis-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 654, + "tpl": "Basis-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBBool\u0000{}": { + "uid": 655, + "tpl": "BBBool", + "markers": {} + }, + "Bool-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 656, + "tpl": "Bool-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBByteArray\u0000{}": { + "uid": 657, + "tpl": "BBByteArray", + "markers": {} + }, + "ByteArray-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 658, + "tpl": "ByteArray-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBColor\u0000{}": { + "uid": 659, + "tpl": "BBColor", + "markers": {} + }, + "Color-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 660, + "tpl": "Color-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBColorArray\u0000{}": { + "uid": 661, + "tpl": "BBColorArray", + "markers": {} + }, + "ColorArray-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 662, + "tpl": "ColorArray-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBDictionary\u0000{}": { + "uid": 663, + "tpl": "BBDictionary", + "markers": {} + }, + "Dictionary-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 664, + "tpl": "Dictionary-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBFloat\u0000{}": { + "uid": 665, + "tpl": "BBFloat", + "markers": {} + }, + "Float-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 666, + "tpl": "Float-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBFloat32Array\u0000{}": { + "uid": 667, + "tpl": "BBFloat32Array", + "markers": {} + }, + "PackedFloat32Array-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 668, + "tpl": "PackedFloat32Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBFloat64Array\u0000{}": { + "uid": 669, + "tpl": "BBFloat64Array", + "markers": {} + }, + "PackedFloat64Array-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 670, + "tpl": "PackedFloat64Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBInt\u0000{}": { + "uid": 671, + "tpl": "BBInt", + "markers": {} + }, + "Integer-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 672, + "tpl": "Integer-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBInt32Array\u0000{}": { + "uid": 673, + "tpl": "BBInt32Array", + "markers": {} + }, + "PackedInt32Array-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 674, + "tpl": "PackedInt32Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBInt64Array\u0000{}": { + "uid": 675, + "tpl": "BBInt64Array", + "markers": {} + }, + "PackedInt64Array-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 676, + "tpl": "PackedInt64Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBNode\u0000{}": { + "uid": 677, + "tpl": "BBNode", + "markers": {} + }, + "Node-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 678, + "tpl": "Node-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "Node-type parameter intended for use with BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 679, + "tpl": "Node-type parameter intended for use with BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "If the source is a blackboard variable, it allows any type extended from <1/>.\u0000{\"1\": \"Object\"}": { + "uid": 680, + "tpl": "If the source is a blackboard variable, it allows any type extended from <1/>.", + "markers": { + "1": "Object" + } + }, + "BBPlane\u0000{}": { + "uid": 681, + "tpl": "BBPlane", + "markers": {} + }, + "Plane-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 682, + "tpl": "Plane-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBProjection\u0000{}": { + "uid": 683, + "tpl": "BBProjection", + "markers": {} + }, + "Projection-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 684, + "tpl": "Projection-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBQuaternion\u0000{}": { + "uid": 685, + "tpl": "BBQuaternion", + "markers": {} + }, + "Quaternion-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 686, + "tpl": "Quaternion-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBRect2\u0000{}": { + "uid": 687, + "tpl": "BBRect2", + "markers": {} + }, + "Rect2-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 688, + "tpl": "Rect2-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBRect2i\u0000{}": { + "uid": 689, + "tpl": "BBRect2i", + "markers": {} + }, + "Rect2i-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 690, + "tpl": "Rect2i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBString\u0000{}": { + "uid": 691, + "tpl": "BBString", + "markers": {} + }, + "String-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 692, + "tpl": "String-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBStringArray\u0000{}": { + "uid": 693, + "tpl": "BBStringArray", + "markers": {} + }, + "StringArray-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 694, + "tpl": "StringArray-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBStringName\u0000{}": { + "uid": 695, + "tpl": "BBStringName", + "markers": {} + }, + "StringName-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 696, + "tpl": "StringName-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBTransform2D\u0000{}": { + "uid": 697, + "tpl": "BBTransform2D", + "markers": {} + }, + "Transform2D-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 698, + "tpl": "Transform2D-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBTransform3D\u0000{}": { + "uid": 699, + "tpl": "BBTransform3D", + "markers": {} + }, + "Transform3D-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 700, + "tpl": "Transform3D-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVariant\u0000{}": { + "uid": 701, + "tpl": "BBVariant", + "markers": {} + }, + "Variant-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 702, + "tpl": "Variant-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "Variant-type parameter intended for use with BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 703, + "tpl": "Variant-type parameter intended for use with BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "The data type is specified by type.\u0000{\"1\": \"type\"}": { + "uid": 704, + "tpl": "The data type is specified by type.", + "markers": { + "1": "type" + } + }, + "type\u0000{\"1\": \"type\"}": { + "uid": 705, + "tpl": "type", + "markers": { + "1": "type" + } + }, + "Variant.Type type = <1/> 🔗\u0000{\"1\": \"0\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 706, + "tpl": "Variant.Type type = <1/> 🔗", + "markers": { + "1": "0", + "2": "🔗" + } + }, + "<1/> set_type(value: Variant.Type)\u0000{\"1\": \"void\"}": { + "uid": 707, + "tpl": "<1/> set_type(value: Variant.Type)", + "markers": { + "1": "void" + } + }, + "Variant.Type get_type()\u0000{}": { + "uid": 708, + "tpl": "Variant.Type get_type()", + "markers": {} + }, + "Specified Variant.Type for the parameter value.\u0000{}": { + "uid": 709, + "tpl": "Specified Variant.Type for the parameter value.", + "markers": {} + }, + "BBVector2\u0000{}": { + "uid": 710, + "tpl": "BBVector2", + "markers": {} + }, + "Vector2-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 711, + "tpl": "Vector2-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVector2Array\u0000{}": { + "uid": 712, + "tpl": "BBVector2Array", + "markers": {} + }, + "Vector2Array-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 713, + "tpl": "Vector2Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVector2i\u0000{}": { + "uid": 714, + "tpl": "BBVector2i", + "markers": {} + }, + "Vector2i-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 715, + "tpl": "Vector2i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVector3\u0000{}": { + "uid": 716, + "tpl": "BBVector3", + "markers": {} + }, + "Vector3-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 717, + "tpl": "Vector3-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVector3Array\u0000{}": { + "uid": 718, + "tpl": "BBVector3Array", + "markers": {} + }, + "Vector3Array-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 719, + "tpl": "Vector3Array-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVector3i\u0000{}": { + "uid": 720, + "tpl": "BBVector3i", + "markers": {} + }, + "Vector3i-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 721, + "tpl": "Vector3i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVector4\u0000{}": { + "uid": 722, + "tpl": "BBVector4", + "markers": {} + }, + "Vector4-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 723, + "tpl": "Vector4-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BBVector4i\u0000{}": { + "uid": 724, + "tpl": "BBVector4i", + "markers": {} + }, + "Vector4i-type parameter for BehaviorTree tasks. See BBParam.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BBParam\"}": { + "uid": 725, + "tpl": "Vector4i-type parameter for BehaviorTree tasks. See BBParam.", + "markers": { + "1": "BehaviorTree", + "2": "BBParam" + } + }, + "BehaviorTree\u0000{}": { + "uid": 726, + "tpl": "BehaviorTree", + "markers": {} + }, + "Contains Behavior Tree data.\u0000{}": { + "uid": 727, + "tpl": "Contains Behavior Tree data.", + "markers": {} + }, + "Behavior Trees are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.\u0000{}": { + "uid": 728, + "tpl": "Behavior Trees are hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies, entities). They are designed to make it easier to create complex and highly modular behaviors for your games.", + "markers": {} + }, + "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include BTSequence, BTSelector, and BTInvert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of Blackboard. See BTTask.blackboard and Blackboard.\u0000{\"1\": \"BTSequence\", \"2\": \"BTSelector\", \"3\": \"BTInvert\", \"4\": \"BTTask\", \"5\": \"Blackboard\", \"6\": \"BTTask.blackboard\", \"7\": \"Blackboard\"}": { + "uid": 729, + "tpl": "Behavior Trees are composed of tasks that represent specific actions or decision-making rules. Tasks can be broadly categorized into two main types: control tasks and leaf tasks. Control tasks determine the execution flow within the tree. They include BTSequence, BTSelector, and BTInvert. Leaf tasks represent specific actions to perform, like moving or attacking, or conditions that need to be checked. The BTTask class provides the foundation for various building blocks of the Behavior Trees. BT tasks can share data with the help of Blackboard. See BTTask.blackboard and Blackboard.", + "markers": { + "1": "BTSequence", + "2": "BTSelector", + "3": "BTInvert", + "4": "BTTask", + "5": "Blackboard", + "6": "BTTask.blackboard", + "7": "Blackboard" + } + }, + "Note: To create your own actions, extend the BTAction class.\u0000{\"1\": \"BTAction\"}": { + "uid": 730, + "tpl": "Note: To create your own actions, extend the BTAction class.", + "markers": { + "1": "BTAction" + } + }, + "The BehaviorTree is executed from the root task and follows the rules specified by the control tasks, all the way down to the leaf tasks, which represent the actual actions that the agent should perform or conditions that should be checked. Each task returns a status when it is executed. It can be <1/>, <2/>, or <3/>. These statuses determine how the tree progresses. They are defined in Status.\u0000{\"1\": \"SUCCESS\", \"2\": \"RUNNING\", \"3\": \"FAILURE\", \"4\": \"Status\"}": { + "uid": 731, + "tpl": "The BehaviorTree is executed from the root task and follows the rules specified by the control tasks, all the way down to the leaf tasks, which represent the actual actions that the agent should perform or conditions that should be checked. Each task returns a status when it is executed. It can be <1/>, <2/>, or <3/>. These statuses determine how the tree progresses. They are defined in Status.", + "markers": { + "1": "SUCCESS", + "2": "RUNNING", + "3": "FAILURE", + "4": "Status" + } + }, + "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with BTSequence and BTSelector to craft your decision-making logic.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\", \"3\": \"BTSequence\", \"4\": \"BTSelector\"}": { + "uid": 732, + "tpl": "Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either <1/> or <2/> based on the state of the agent or its environment (e.g., “IsLowOnHealth”, “IsTargetInSight”). Conditions can be used together with BTSequence and BTSelector to craft your decision-making logic.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "BTSequence", + "4": "BTSelector" + } + }, + "Note: To create your own conditions, extend the BTCondition class.\u0000{\"1\": \"BTCondition\"}": { + "uid": 733, + "tpl": "Note: To create your own conditions, extend the BTCondition class.", + "markers": { + "1": "BTCondition" + } + }, + "Check out the BTTask class, which provides the foundation for various building blocks of Behavior Trees.\u0000{\"1\": \"BTTask\"}": { + "uid": 734, + "tpl": "Check out the BTTask class, which provides the foundation for various building blocks of Behavior Trees.", + "markers": { + "1": "BTTask" + } + }, + "blackboard_plan\u0000{\"1\": \"blackboard_plan\"}": { + "uid": 735, + "tpl": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + "description\u0000{\"1\": \"description\"}": { + "uid": 736, + "tpl": "description", + "markers": { + "1": "description" + } + }, + "BehaviorTree\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 737, + "tpl": "BehaviorTree", + "markers": { + "1": "BehaviorTree" + } + }, + "clone() <2/>\u0000{\"1\": \"clone\", \"2\": \"const\"}": { + "uid": 738, + "tpl": "clone() <2/>", + "markers": { + "1": "clone", + "2": "const" + } + }, + "copy_other(other: BehaviorTree)\u0000{\"1\": \"copy_other\", \"2\": \"BehaviorTree\"}": { + "uid": 739, + "tpl": "copy_other(other: BehaviorTree)", + "markers": { + "1": "copy_other", + "2": "BehaviorTree" + } + }, + "BTTask\u0000{\"1\": \"BTTask\"}": { + "uid": 740, + "tpl": "BTTask", + "markers": { + "1": "BTTask" + } + }, + "get_root_task() <2/>\u0000{\"1\": \"get_root_task\", \"2\": \"const\"}": { + "uid": 741, + "tpl": "get_root_task() <2/>", + "markers": { + "1": "get_root_task", + "2": "const" + } + }, + "instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/>\u0000{\"1\": \"instantiate\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Node\", \"5\": \"Node\", \"6\": \"const\"}": { + "uid": 742, + "tpl": "instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/>", + "markers": { + "1": "instantiate", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "Node", + "6": "const" + } + }, + "set_root_task(task: BTTask)\u0000{\"1\": \"set_root_task\", \"2\": \"BTTask\"}": { + "uid": 743, + "tpl": "set_root_task(task: BTTask)", + "markers": { + "1": "set_root_task", + "2": "BTTask" + } + }, + "plan_changed() 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 744, + "tpl": "plan_changed() 🔗", + "markers": { + "1": "🔗" + } + }, + "Emitted when the BlackboardPlan changes.\u0000{\"1\": \"BlackboardPlan\"}": { + "uid": 745, + "tpl": "Emitted when the BlackboardPlan changes.", + "markers": { + "1": "BlackboardPlan" + } + }, + "BlackboardPlan blackboard_plan 🔗\u0000{\"1\": \"BlackboardPlan\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 746, + "tpl": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + "<1/> description = <2/> 🔗\u0000{\"1\": \"String\", \"2\": \"\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 747, + "tpl": "<1/> description = <2/> 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + "<1/> set_description(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"String\"}": { + "uid": 748, + "tpl": "<1/> set_description(value: <2/>)", + "markers": { + "1": "void", + "2": "String" + } + }, + "<1/> get_description()\u0000{\"1\": \"String\"}": { + "uid": 749, + "tpl": "<1/> get_description()", + "markers": { + "1": "String" + } + }, + "User-provided description of the BehaviorTree.\u0000{}": { + "uid": 750, + "tpl": "User-provided description of the BehaviorTree.", + "markers": {} + }, + "BehaviorTree clone() <2/> 🔗\u0000{\"1\": \"BehaviorTree\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 751, + "tpl": "BehaviorTree clone() <2/> 🔗", + "markers": { + "1": "BehaviorTree", + "2": "const", + "3": "🔗" + } + }, + "Makes a copy of the BehaviorTree resource.\u0000{}": { + "uid": 752, + "tpl": "Makes a copy of the BehaviorTree resource.", + "markers": {} + }, + "<1/> copy_other(other: BehaviorTree) 🔗\u0000{\"1\": \"void\", \"2\": \"BehaviorTree\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 753, + "tpl": "<1/> copy_other(other: BehaviorTree) 🔗", + "markers": { + "1": "void", + "2": "BehaviorTree", + "3": "🔗" + } + }, + "Become a copy of another behavior tree.\u0000{}": { + "uid": 754, + "tpl": "Become a copy of another behavior tree.", + "markers": {} + }, + "BTTask get_root_task() <2/> 🔗\u0000{\"1\": \"BTTask\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 755, + "tpl": "BTTask get_root_task() <2/> 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + "Returns the root task of the BehaviorTree resource.\u0000{}": { + "uid": 756, + "tpl": "Returns the root task of the BehaviorTree resource.", + "markers": {} + }, + "BTInstance instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/> 🔗\u0000{\"1\": \"BTInstance\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Node\", \"5\": \"Node\", \"6\": \"const\", \"7\": \"\\ud83d\\udd17\"}": { + "uid": 757, + "tpl": "BTInstance instantiate(agent: <2/>, blackboard: Blackboard, instance_owner: <4/>, custom_scene_root: <5/> = null) <6/> 🔗", + "markers": { + "1": "BTInstance", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "Node", + "6": "const", + "7": "🔗" + } + }, + "Instantiates the behavior tree and returns BTInstance. <2/> should be the scene node that will own the behavior tree instance. This is typically a BTPlayer, BTState, or a custom player node that controls the behavior tree execution. Make sure to pass a Blackboard with values populated from blackboard_plan. See also BlackboardPlan.populate_blackboard & BlackboardPlan.create_blackboard.\u0000{\"1\": \"BTInstance\", \"2\": \"instance_owner\", \"3\": \"BTPlayer\", \"4\": \"BTState\", \"5\": \"Blackboard\", \"6\": \"blackboard_plan\", \"7\": \"BlackboardPlan.populate_blackboard\", \"8\": \"BlackboardPlan.create_blackboard\"}": { + "uid": 758, + "tpl": "Instantiates the behavior tree and returns BTInstance. <2/> should be the scene node that will own the behavior tree instance. This is typically a BTPlayer, BTState, or a custom player node that controls the behavior tree execution. Make sure to pass a Blackboard with values populated from blackboard_plan. See also BlackboardPlan.populate_blackboard & BlackboardPlan.create_blackboard.", + "markers": { + "1": "BTInstance", + "2": "instance_owner", + "3": "BTPlayer", + "4": "BTState", + "5": "Blackboard", + "6": "blackboard_plan", + "7": "BlackboardPlan.populate_blackboard", + "8": "BlackboardPlan.create_blackboard" + } + }, + "If <1/> is not <2/>, it will be used as the scene root for the newly instantiated behavior tree; otherwise, the scene root will be set to <3/>. Scene root is essential for BBNode instances to work properly.\u0000{\"1\": \"custom_scene_root\", \"2\": \"null\", \"3\": \"instance_owner.owner\", \"4\": \"BBNode\"}": { + "uid": 759, + "tpl": "If <1/> is not <2/>, it will be used as the scene root for the newly instantiated behavior tree; otherwise, the scene root will be set to <3/>. Scene root is essential for BBNode instances to work properly.", + "markers": { + "1": "custom_scene_root", + "2": "null", + "3": "instance_owner.owner", + "4": "BBNode" + } + }, + "<1/> set_root_task(task: BTTask) 🔗\u0000{\"1\": \"void\", \"2\": \"BTTask\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 760, + "tpl": "<1/> set_root_task(task: BTTask) 🔗", + "markers": { + "1": "void", + "2": "BTTask", + "3": "🔗" + } + }, + "Assigns a new root task to the BehaviorTree resource.\u0000{}": { + "uid": 761, + "tpl": "Assigns a new root task to the BehaviorTree resource.", + "markers": {} + }, + "BehaviorTreeData\u0000{}": { + "uid": 762, + "tpl": "BehaviorTreeData", + "markers": {} + }, + "Represents current state of a BehaviorTree instance.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 763, + "tpl": "Represents current state of a BehaviorTree instance.", + "markers": { + "1": "BehaviorTree" + } + }, + "This class is used by the LimboAI debugger for the serialization and deserialization of BehaviorTree instance data.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 764, + "tpl": "This class is used by the LimboAI debugger for the serialization and deserialization of BehaviorTree instance data.", + "markers": { + "1": "BehaviorTree" + } + }, + "Additionally, it can be used with BehaviorTreeView to visualize the current state of a BehaviorTree instance. It is meant to be utilized in custom in-game tools.\u0000{\"1\": \"BehaviorTreeView\", \"2\": \"BehaviorTree\"}": { + "uid": 765, + "tpl": "Additionally, it can be used with BehaviorTreeView to visualize the current state of a BehaviorTree instance. It is meant to be utilized in custom in-game tools.", + "markers": { + "1": "BehaviorTreeView", + "2": "BehaviorTree" + } + }, + "BehaviorTreeData\u0000{\"1\": \"BehaviorTreeData\"}": { + "uid": 766, + "tpl": "BehaviorTreeData", + "markers": { + "1": "BehaviorTreeData" + } + }, + "create_from_bt_instance(bt_instance: BTInstance) <3/>\u0000{\"1\": \"create_from_bt_instance\", \"2\": \"BTInstance\", \"3\": \"static\"}": { + "uid": 767, + "tpl": "create_from_bt_instance(bt_instance: BTInstance) <3/>", + "markers": { + "1": "create_from_bt_instance", + "2": "BTInstance", + "3": "static" + } + }, + "BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) <3/> 🔗\u0000{\"1\": \"BehaviorTreeData\", \"2\": \"BTInstance\", \"3\": \"static\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 768, + "tpl": "BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) <3/> 🔗", + "markers": { + "1": "BehaviorTreeData", + "2": "BTInstance", + "3": "static", + "4": "🔗" + } + }, + "Returns current state of the <1/> encoded as a BehaviorTreeData, suitable for use with BehaviorTreeView.\u0000{\"1\": \"bt_instance\", \"2\": \"BehaviorTreeView\"}": { + "uid": 769, + "tpl": "Returns current state of the <1/> encoded as a BehaviorTreeData, suitable for use with BehaviorTreeView.", + "markers": { + "1": "bt_instance", + "2": "BehaviorTreeView" + } + }, + "Behavior tree instance can be acquired with BTPlayer.get_bt_instance.\u0000{\"1\": \"BTPlayer.get_bt_instance\"}": { + "uid": 770, + "tpl": "Behavior tree instance can be acquired with BTPlayer.get_bt_instance.", + "markers": { + "1": "BTPlayer.get_bt_instance" + } + }, + "BehaviorTreeView\u0000{}": { + "uid": 771, + "tpl": "BehaviorTreeView", + "markers": {} + }, + "Visualizes the current state of a BehaviorTree instance.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 772, + "tpl": "Visualizes the current state of a BehaviorTree instance.", + "markers": { + "1": "BehaviorTree" + } + }, + "Visualizes the current state of a BehaviorTree instance. See also BehaviorTreeData.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BehaviorTreeData\"}": { + "uid": 773, + "tpl": "Visualizes the current state of a BehaviorTree instance. See also BehaviorTreeData.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTreeData" + } + }, + "update_interval_msec\u0000{\"1\": \"update_interval_msec\"}": { + "uid": 774, + "tpl": "update_interval_msec", + "markers": { + "1": "update_interval_msec" + } + }, + "clear()\u0000{\"1\": \"clear\"}": { + "uid": 775, + "tpl": "clear()", + "markers": { + "1": "clear" + } + }, + "update_tree(behavior_tree_data: BehaviorTreeData)\u0000{\"1\": \"update_tree\", \"2\": \"BehaviorTreeData\"}": { + "uid": 776, + "tpl": "update_tree(behavior_tree_data: BehaviorTreeData)", + "markers": { + "1": "update_tree", + "2": "BehaviorTreeData" + } + }, + "task_selected(type_name: <1/>, script_path: <2/>) 🔗\u0000{\"1\": \"String\", \"2\": \"String\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 777, + "tpl": "task_selected(type_name: <1/>, script_path: <2/>) 🔗", + "markers": { + "1": "String", + "2": "String", + "3": "🔗" + } + }, + "Emitted when a task item is selected in BehaviorTreeView.\u0000{}": { + "uid": 778, + "tpl": "Emitted when a task item is selected in BehaviorTreeView.", + "markers": {} + }, + "<1/> update_interval_msec = <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 779, + "tpl": "<1/> update_interval_msec = <2/> 🔗", + "markers": { + "1": "int", + "2": "0", + "3": "🔗" + } + }, + "<1/> set_update_interval_msec(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"int\"}": { + "uid": 780, + "tpl": "<1/> set_update_interval_msec(value: <2/>)", + "markers": { + "1": "void", + "2": "int" + } + }, + "<1/> get_update_interval_msec()\u0000{\"1\": \"int\"}": { + "uid": 781, + "tpl": "<1/> get_update_interval_msec()", + "markers": { + "1": "int" + } + }, + "Minimum delay between two updates (in milliseconds). Set to higher values for a lower CPU load.\u0000{}": { + "uid": 782, + "tpl": "Minimum delay between two updates (in milliseconds). Set to higher values for a lower CPU load.", + "markers": {} + }, + "<1/> clear() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 783, + "tpl": "<1/> clear() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Clears the tree view.\u0000{}": { + "uid": 784, + "tpl": "Clears the tree view.", + "markers": {} + }, + "<1/> update_tree(behavior_tree_data: BehaviorTreeData) 🔗\u0000{\"1\": \"void\", \"2\": \"BehaviorTreeData\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 785, + "tpl": "<1/> update_tree(behavior_tree_data: BehaviorTreeData) 🔗", + "markers": { + "1": "void", + "2": "BehaviorTreeData", + "3": "🔗" + } + }, + "Updates the representation of a BehaviorTree instance. See also BehaviorTreeData.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BehaviorTreeData\"}": { + "uid": 786, + "tpl": "Updates the representation of a BehaviorTree instance. See also BehaviorTreeData.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTreeData" + } + }, + "BlackboardPlan\u0000{}": { + "uid": 787, + "tpl": "BlackboardPlan", + "markers": {} + }, + "prefetch_nodepath_vars\u0000{\"1\": \"prefetch_nodepath_vars\"}": { + "uid": 788, + "tpl": "prefetch_nodepath_vars", + "markers": { + "1": "prefetch_nodepath_vars" + } + }, + "create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null)\u0000{\"1\": \"create_blackboard\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Node\"}": { + "uid": 789, + "tpl": "create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null)", + "markers": { + "1": "create_blackboard", + "2": "Node", + "3": "Blackboard", + "4": "Node" + } + }, + "BlackboardPlan\u0000{\"1\": \"BlackboardPlan\"}": { + "uid": 790, + "tpl": "BlackboardPlan", + "markers": { + "1": "BlackboardPlan" + } + }, + "get_base_plan() <2/>\u0000{\"1\": \"get_base_plan\", \"2\": \"const\"}": { + "uid": 791, + "tpl": "get_base_plan() <2/>", + "markers": { + "1": "get_base_plan", + "2": "const" + } + }, + "get_parent_scope_plan_provider() <2/>\u0000{\"1\": \"get_parent_scope_plan_provider\", \"2\": \"const\"}": { + "uid": 792, + "tpl": "get_parent_scope_plan_provider() <2/>", + "markers": { + "1": "get_parent_scope_plan_provider", + "2": "const" + } + }, + "is_derived() <2/>\u0000{\"1\": \"is_derived\", \"2\": \"const\"}": { + "uid": 793, + "tpl": "is_derived() <2/>", + "markers": { + "1": "is_derived", + "2": "const" + } + }, + "populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null)\u0000{\"1\": \"populate_blackboard\", \"2\": \"Blackboard\", \"3\": \"bool\", \"4\": \"Node\", \"5\": \"Node\"}": { + "uid": 794, + "tpl": "populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null)", + "markers": { + "1": "populate_blackboard", + "2": "Blackboard", + "3": "bool", + "4": "Node", + "5": "Node" + } + }, + "set_base_plan(blackboard_plan: BlackboardPlan)\u0000{\"1\": \"set_base_plan\", \"2\": \"BlackboardPlan\"}": { + "uid": 795, + "tpl": "set_base_plan(blackboard_plan: BlackboardPlan)", + "markers": { + "1": "set_base_plan", + "2": "BlackboardPlan" + } + }, + "set_parent_scope_plan_provider(callable: <2/>)\u0000{\"1\": \"set_parent_scope_plan_provider\", \"2\": \"Callable\"}": { + "uid": 796, + "tpl": "set_parent_scope_plan_provider(callable: <2/>)", + "markers": { + "1": "set_parent_scope_plan_provider", + "2": "Callable" + } + }, + "sync_with_base_plan()\u0000{\"1\": \"sync_with_base_plan\"}": { + "uid": 797, + "tpl": "sync_with_base_plan()", + "markers": { + "1": "sync_with_base_plan" + } + }, + "<1/> prefetch_nodepath_vars = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"true\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 798, + "tpl": "<1/> prefetch_nodepath_vars = <2/> 🔗", + "markers": { + "1": "bool", + "2": "true", + "3": "🔗" + } + }, + "<1/> set_prefetch_nodepath_vars(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 799, + "tpl": "<1/> set_prefetch_nodepath_vars(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> is_prefetching_nodepath_vars()\u0000{\"1\": \"bool\"}": { + "uid": 800, + "tpl": "<1/> is_prefetching_nodepath_vars()", + "markers": { + "1": "bool" + } + }, + "Enables or disables <1/> variable prefetching. If <2/>, <3/> values will be replaced with node instances when the Blackboard is created.\u0000{\"1\": \"NodePath\", \"2\": \"true\", \"3\": \"NodePath\", \"4\": \"Blackboard\"}": { + "uid": 801, + "tpl": "Enables or disables <1/> variable prefetching. If <2/>, <3/> values will be replaced with node instances when the Blackboard is created.", + "markers": { + "1": "NodePath", + "2": "true", + "3": "NodePath", + "4": "Blackboard" + } + }, + "Blackboard create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null) 🔗\u0000{\"1\": \"Blackboard\", \"2\": \"Node\", \"3\": \"Blackboard\", \"4\": \"Node\", \"5\": \"\\ud83d\\udd17\"}": { + "uid": 802, + "tpl": "Blackboard create_blackboard(prefetch_root: <2/>, parent_scope: Blackboard = null, prefetch_root_for_base_plan: <4/> = null) 🔗", + "markers": { + "1": "Blackboard", + "2": "Node", + "3": "Blackboard", + "4": "Node", + "5": "🔗" + } + }, + "Constructs a new instance of a Blackboard using this plan. If <2/> prefetching is enabled, <3/> will be used to retrieve node instances for <4/> variables and substitute their values.\u0000{\"1\": \"Blackboard\", \"2\": \"NodePath\", \"3\": \"prefetch_root\", \"4\": \"NodePath\"}": { + "uid": 803, + "tpl": "Constructs a new instance of a Blackboard using this plan. If <2/> prefetching is enabled, <3/> will be used to retrieve node instances for <4/> variables and substitute their values.", + "markers": { + "1": "Blackboard", + "2": "NodePath", + "3": "prefetch_root", + "4": "NodePath" + } + }, + "BlackboardPlan get_base_plan() <2/> 🔗\u0000{\"1\": \"BlackboardPlan\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 804, + "tpl": "BlackboardPlan get_base_plan() <2/> 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "const", + "3": "🔗" + } + }, + "Returns the base plan. See is_derived.\u0000{\"1\": \"is_derived\"}": { + "uid": 805, + "tpl": "Returns the base plan. See is_derived.", + "markers": { + "1": "is_derived" + } + }, + "<1/> get_parent_scope_plan_provider() <2/> 🔗\u0000{\"1\": \"Callable\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 806, + "tpl": "<1/> get_parent_scope_plan_provider() <2/> 🔗", + "markers": { + "1": "Callable", + "2": "const", + "3": "🔗" + } + }, + "Returns the parent scope plan provider - a callable that returns a BlackboardPlan.\u0000{}": { + "uid": 807, + "tpl": "Returns the parent scope plan provider - a callable that returns a BlackboardPlan.", + "markers": {} + }, + "<1/> is_derived() <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 808, + "tpl": "<1/> is_derived() <2/> 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + "Returns <1/> if this plan is derived from another, i.e., the base plan is not <2/>. A derived plan can only contain variables that are present in the base plan, and only variable values can be different.\u0000{\"1\": \"true\", \"2\": \"null\"}": { + "uid": 809, + "tpl": "Returns <1/> if this plan is derived from another, i.e., the base plan is not <2/>. A derived plan can only contain variables that are present in the base plan, and only variable values can be different.", + "markers": { + "1": "true", + "2": "null" + } + }, + "<1/> populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null) 🔗\u0000{\"1\": \"void\", \"2\": \"Blackboard\", \"3\": \"bool\", \"4\": \"Node\", \"5\": \"Node\", \"6\": \"\\ud83d\\udd17\"}": { + "uid": 810, + "tpl": "<1/> populate_blackboard(blackboard: Blackboard, overwrite: <3/>, prefetch_root: <4/>, prefetch_root_for_base_plan: <5/> = null) 🔗", + "markers": { + "1": "void", + "2": "Blackboard", + "3": "bool", + "4": "Node", + "5": "Node", + "6": "🔗" + } + }, + "Populates <1/> with the variables from this plan. If <2/> is <3/>, existing variables with the same names will be overwritten. If <4/> prefetching is enabled, <5/> will be used to retrieve node instances for <6/> variables and substitute their values.\u0000{\"1\": \"blackboard\", \"2\": \"overwrite\", \"3\": \"true\", \"4\": \"NodePath\", \"5\": \"prefetch_root\", \"6\": \"NodePath\"}": { + "uid": 811, + "tpl": "Populates <1/> with the variables from this plan. If <2/> is <3/>, existing variables with the same names will be overwritten. If <4/> prefetching is enabled, <5/> will be used to retrieve node instances for <6/> variables and substitute their values.", + "markers": { + "1": "blackboard", + "2": "overwrite", + "3": "true", + "4": "NodePath", + "5": "prefetch_root", + "6": "NodePath" + } + }, + "<1/> set_base_plan(blackboard_plan: BlackboardPlan) 🔗\u0000{\"1\": \"void\", \"2\": \"BlackboardPlan\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 812, + "tpl": "<1/> set_base_plan(blackboard_plan: BlackboardPlan) 🔗", + "markers": { + "1": "void", + "2": "BlackboardPlan", + "3": "🔗" + } + }, + "Sets the base plan. If assigned, this plan will be derived from the base plan.\u0000{}": { + "uid": 813, + "tpl": "Sets the base plan. If assigned, this plan will be derived from the base plan.", + "markers": {} + }, + "Use with caution, as it will remove variables not present in the base plan. Only use this for custom tooling.\u0000{}": { + "uid": 814, + "tpl": "Use with caution, as it will remove variables not present in the base plan. Only use this for custom tooling.", + "markers": {} + }, + "<1/> set_parent_scope_plan_provider(callable: <2/>) 🔗\u0000{\"1\": \"void\", \"2\": \"Callable\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 815, + "tpl": "<1/> set_parent_scope_plan_provider(callable: <2/>) 🔗", + "markers": { + "1": "void", + "2": "Callable", + "3": "🔗" + } + }, + "Sets the parent scope plan provider - a callable that returns a BlackboardPlan. Used to provide hints in the inspector. When set, mapping feature becomes available.\u0000{}": { + "uid": 816, + "tpl": "Sets the parent scope plan provider - a callable that returns a BlackboardPlan. Used to provide hints in the inspector. When set, mapping feature becomes available.", + "markers": {} + }, + "<1/> sync_with_base_plan() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 817, + "tpl": "<1/> sync_with_base_plan() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Synchronizes this plan with the base plan: removes variables not present in the base plan, and updates type information. Only use this for custom tooling.\u0000{}": { + "uid": 818, + "tpl": "Synchronizes this plan with the base plan: removes variables not present in the base plan, and updates type information. Only use this for custom tooling.", + "markers": {} + }, + "BT\u0000{}": { + "uid": 819, + "tpl": "BT", + "markers": {} + }, + "Inherited By: BTTask\u0000{\"1\": \"BTTask\"}": { + "uid": 820, + "tpl": "Inherited By: BTTask", + "markers": { + "1": "BTTask" + } + }, + "Base of BTTask.\u0000{\"1\": \"BTTask\"}": { + "uid": 821, + "tpl": "Base of BTTask.", + "markers": { + "1": "BTTask" + } + }, + "enum Status: 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 822, + "tpl": "enum Status: 🔗", + "markers": { + "1": "🔗" + } + }, + "Status FRESH = <2/>\u0000{\"1\": \"Status\", \"2\": \"0\"}": { + "uid": 823, + "tpl": "Status FRESH = <2/>", + "markers": { + "1": "Status", + "2": "0" + } + }, + "Task wasn’t executed yet or it was aborted and reset.\u0000{}": { + "uid": 824, + "tpl": "Task wasn’t executed yet or it was aborted and reset.", + "markers": {} + }, + "Status RUNNING = <2/>\u0000{\"1\": \"Status\", \"2\": \"1\"}": { + "uid": 825, + "tpl": "Status RUNNING = <2/>", + "markers": { + "1": "Status", + "2": "1" + } + }, + "Task is being performed and hasn’t finished yet.\u0000{}": { + "uid": 826, + "tpl": "Task is being performed and hasn’t finished yet.", + "markers": {} + }, + "Status FAILURE = <2/>\u0000{\"1\": \"Status\", \"2\": \"2\"}": { + "uid": 827, + "tpl": "Status FAILURE = <2/>", + "markers": { + "1": "Status", + "2": "2" + } + }, + "Task has finished with failure.\u0000{}": { + "uid": 828, + "tpl": "Task has finished with failure.", + "markers": {} + }, + "Status SUCCESS = <2/>\u0000{\"1\": \"Status\", \"2\": \"3\"}": { + "uid": 829, + "tpl": "Status SUCCESS = <2/>", + "markers": { + "1": "Status", + "2": "3" + } + }, + "Task has finished with success.\u0000{}": { + "uid": 830, + "tpl": "Task has finished with success.", + "markers": {} + }, + "BTAction\u0000{}": { + "uid": 831, + "tpl": "BTAction", + "markers": {} + }, + "Inherits: BTTask < BT\u0000{\"1\": \"BTTask\", \"2\": \"BT\"}": { + "uid": 832, + "tpl": "Inherits: BTTask < BT", + "markers": { + "1": "BTTask", + "2": "BT" + } + }, + "Inherited By: BTAwaitAnimation, BTCallMethod, BTConsolePrint, BTEvaluateExpression, BTFail, BTPauseAnimation, BTPlayAnimation, BTRandomWait, BTSetAgentProperty, BTSetVar, BTStopAnimation, BTWait, BTWaitTicks\u0000{\"1\": \"BTAwaitAnimation\", \"10\": \"BTSetVar\", \"11\": \"BTStopAnimation\", \"12\": \"BTWait\", \"13\": \"BTWaitTicks\", \"2\": \"BTCallMethod\", \"3\": \"BTConsolePrint\", \"4\": \"BTEvaluateExpression\", \"5\": \"BTFail\", \"6\": \"BTPauseAnimation\", \"7\": \"BTPlayAnimation\", \"8\": \"BTRandomWait\", \"9\": \"BTSetAgentProperty\"}": { + "uid": 833, + "tpl": "Inherited By: BTAwaitAnimation, BTCallMethod, BTConsolePrint, BTEvaluateExpression, BTFail, BTPauseAnimation, BTPlayAnimation, BTRandomWait, BTSetAgentProperty, BTSetVar, BTStopAnimation, BTWait, BTWaitTicks", + "markers": { + "1": "BTAwaitAnimation", + "2": "BTCallMethod", + "3": "BTConsolePrint", + "4": "BTEvaluateExpression", + "5": "BTFail", + "6": "BTPauseAnimation", + "7": "BTPlayAnimation", + "8": "BTRandomWait", + "9": "BTSetAgentProperty", + "10": "BTSetVar", + "11": "BTStopAnimation", + "12": "BTWait", + "13": "BTWaitTicks" + } + }, + "Base class for all BehaviorTree actions.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 834, + "tpl": "Base class for all BehaviorTree actions.", + "markers": { + "1": "BehaviorTree" + } + }, + "Base class for all actions within a BehaviorTree. You can create your own actions by extending the BTAction class.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 835, + "tpl": "Base class for all actions within a BehaviorTree. You can create your own actions by extending the BTAction class.", + "markers": { + "1": "BehaviorTree" + } + }, + "Represents a specific behavior or action in a BehaviorTree that an agent should execute. Actions are the lowest level of the BehaviorTree hierarchy and are responsible for performing the actual work required to achieve a goal. Actions do not have child tasks.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BehaviorTree\"}": { + "uid": 836, + "tpl": "Represents a specific behavior or action in a BehaviorTree that an agent should execute. Actions are the lowest level of the BehaviorTree hierarchy and are responsible for performing the actual work required to achieve a goal. Actions do not have child tasks.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree" + } + }, + "A single action can perform a task within one or multiple ticks. If it takes more than one tick to complete the task, the action should return <1/> status. When the task is finished, the action returns either <2/> or <3/> to indicate the outcome.\u0000{\"1\": \"RUNNING\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\"}": { + "uid": 837, + "tpl": "A single action can perform a task within one or multiple ticks. If it takes more than one tick to complete the task, the action should return <1/> status. When the task is finished, the action returns either <2/> or <3/> to indicate the outcome.", + "markers": { + "1": "RUNNING", + "2": "SUCCESS", + "3": "FAILURE" + } + }, + "BTAlwaysFail\u0000{}": { + "uid": 838, + "tpl": "BTAlwaysFail", + "markers": {} + }, + "Inherits: BTDecorator < BTTask < BT\u0000{\"1\": \"BTDecorator\", \"2\": \"BTTask\", \"3\": \"BT\"}": { + "uid": 839, + "tpl": "Inherits: BTDecorator < BTTask < BT", + "markers": { + "1": "BTDecorator", + "2": "BTTask", + "3": "BT" + } + }, + "BT decorator that converts <1/> into <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\"}": { + "uid": 840, + "tpl": "BT decorator that converts <1/> into <2/>.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + "BTAlwaysSucceed\u0000{}": { + "uid": 841, + "tpl": "BTAlwaysSucceed", + "markers": {} + }, + "BT decorator that converts <1/> into <2/>.\u0000{\"1\": \"FAILURE\", \"2\": \"SUCCESS\"}": { + "uid": 842, + "tpl": "BT decorator that converts <1/> into <2/>.", + "markers": { + "1": "FAILURE", + "2": "SUCCESS" + } + }, + "BTAwaitAnimation\u0000{}": { + "uid": 843, + "tpl": "BTAwaitAnimation", + "markers": {} + }, + "Inherits: BTAction < BTTask < BT\u0000{\"1\": \"BTAction\", \"2\": \"BTTask\", \"3\": \"BT\"}": { + "uid": 844, + "tpl": "Inherits: BTAction < BTTask < BT", + "markers": { + "1": "BTAction", + "2": "BTTask", + "3": "BT" + } + }, + "BT action that waits for an animation to finish playing.\u0000{}": { + "uid": 845, + "tpl": "BT action that waits for an animation to finish playing.", + "markers": {} + }, + "BTAwaitAnimation action waits for an animation on the specified <1/> node to finish playing and returns <2/>.\u0000{\"1\": \"AnimationPlayer\", \"2\": \"SUCCESS\"}": { + "uid": 846, + "tpl": "BTAwaitAnimation action waits for an animation on the specified <1/> node to finish playing and returns <2/>.", + "markers": { + "1": "AnimationPlayer", + "2": "SUCCESS" + } + }, + "Returns <1/> if the specified animation has finished playing or if the specified animation is not currently playing.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 847, + "tpl": "Returns <1/> if the specified animation has finished playing or if the specified animation is not currently playing.", + "markers": { + "1": "SUCCESS" + } + }, + "Returns <1/> if the specified animation doesn’t exist or if the action fails to get the <2/> node.\u0000{\"1\": \"FAILURE\", \"2\": \"AnimationPlayer\"}": { + "uid": 848, + "tpl": "Returns <1/> if the specified animation doesn’t exist or if the action fails to get the <2/> node.", + "markers": { + "1": "FAILURE", + "2": "AnimationPlayer" + } + }, + "animation_name\u0000{\"1\": \"animation_name\"}": { + "uid": 849, + "tpl": "animation_name", + "markers": { + "1": "animation_name" + } + }, + "BBNode\u0000{\"1\": \"BBNode\"}": { + "uid": 850, + "tpl": "BBNode", + "markers": { + "1": "BBNode" + } + }, + "animation_player\u0000{\"1\": \"animation_player\"}": { + "uid": 851, + "tpl": "animation_player", + "markers": { + "1": "animation_player" + } + }, + "max_time\u0000{\"1\": \"max_time\"}": { + "uid": 852, + "tpl": "max_time", + "markers": { + "1": "max_time" + } + }, + "<1/> animation_name = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 853, + "tpl": "<1/> animation_name = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "<1/> set_animation_name(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 854, + "tpl": "<1/> set_animation_name(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_animation_name()\u0000{\"1\": \"StringName\"}": { + "uid": 855, + "tpl": "<1/> get_animation_name()", + "markers": { + "1": "StringName" + } + }, + "Animation’s key within the <1/> node.\u0000{\"1\": \"AnimationPlayer\"}": { + "uid": 856, + "tpl": "Animation’s key within the <1/> node.", + "markers": { + "1": "AnimationPlayer" + } + }, + "BBNode animation_player 🔗\u0000{\"1\": \"BBNode\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 857, + "tpl": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + "<1/> set_animation_player(value: BBNode)\u0000{\"1\": \"void\", \"2\": \"BBNode\"}": { + "uid": 858, + "tpl": "<1/> set_animation_player(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + "BBNode get_animation_player()\u0000{\"1\": \"BBNode\"}": { + "uid": 859, + "tpl": "BBNode get_animation_player()", + "markers": { + "1": "BBNode" + } + }, + "Parameter that specifies the <1/> node.\u0000{\"1\": \"AnimationPlayer\"}": { + "uid": 860, + "tpl": "Parameter that specifies the <1/> node.", + "markers": { + "1": "AnimationPlayer" + } + }, + "<1/> max_time = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"1.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 861, + "tpl": "<1/> max_time = <2/> 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + "<1/> set_max_time(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 862, + "tpl": "<1/> set_max_time(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_max_time()\u0000{\"1\": \"float\"}": { + "uid": 863, + "tpl": "<1/> get_max_time()", + "markers": { + "1": "float" + } + }, + "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTAwaitAnimation will stop waiting and return <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 864, + "tpl": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTAwaitAnimation will stop waiting and return <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTCallMethod\u0000{}": { + "uid": 865, + "tpl": "BTCallMethod", + "markers": {} + }, + "BT action that calls a method on a specified <1/> or <2/>.\u0000{\"1\": \"Node\", \"2\": \"Object\"}": { + "uid": 866, + "tpl": "BT action that calls a method on a specified <1/> or <2/>.", + "markers": { + "1": "Node", + "2": "Object" + } + }, + "BTCallMethod action calls a method on the specified <2/> or <3/> instance and returns <4/>.\u0000{\"1\": \"method\", \"2\": \"Node\", \"3\": \"Object\", \"4\": \"SUCCESS\"}": { + "uid": 867, + "tpl": "BTCallMethod action calls a method on the specified <2/> or <3/> instance and returns <4/>.", + "markers": { + "1": "method", + "2": "Node", + "3": "Object", + "4": "SUCCESS" + } + }, + "Returns <1/> if the action encounters an issue during the method execution.\u0000{\"1\": \"FAILURE\"}": { + "uid": 868, + "tpl": "Returns <1/> if the action encounters an issue during the method execution.", + "markers": { + "1": "FAILURE" + } + }, + "Array[BBVariant]\u0000{\"1\": \"BBVariant\"}": { + "uid": 869, + "tpl": "Array[BBVariant]", + "markers": { + "1": "BBVariant" + } + }, + "args\u0000{\"1\": \"args\"}": { + "uid": 870, + "tpl": "args", + "markers": { + "1": "args" + } + }, + "args_include_delta\u0000{\"1\": \"args_include_delta\"}": { + "uid": 871, + "tpl": "args_include_delta", + "markers": { + "1": "args_include_delta" + } + }, + "method\u0000{\"1\": \"method\"}": { + "uid": 872, + "tpl": "method", + "markers": { + "1": "method" + } + }, + "node\u0000{\"1\": \"node\"}": { + "uid": 873, + "tpl": "node", + "markers": { + "1": "node" + } + }, + "result_var\u0000{\"1\": \"result_var\"}": { + "uid": 874, + "tpl": "result_var", + "markers": { + "1": "result_var" + } + }, + "Array[BBVariant] args = <2/> 🔗\u0000{\"1\": \"BBVariant\", \"2\": \"[]\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 875, + "tpl": "Array[BBVariant] args = <2/> 🔗", + "markers": { + "1": "BBVariant", + "2": "[]", + "3": "🔗" + } + }, + "<1/> set_args(value: Array[BBVariant])\u0000{\"1\": \"void\", \"2\": \"BBVariant\"}": { + "uid": 876, + "tpl": "<1/> set_args(value: Array[BBVariant])", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + "Array[BBVariant] get_args()\u0000{\"1\": \"BBVariant\"}": { + "uid": 877, + "tpl": "Array[BBVariant] get_args()", + "markers": { + "1": "BBVariant" + } + }, + "The arguments to be passed when calling the method.\u0000{}": { + "uid": 878, + "tpl": "The arguments to be passed when calling the method.", + "markers": {} + }, + "<1/> args_include_delta = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 879, + "tpl": "<1/> args_include_delta = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_include_delta(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 880, + "tpl": "<1/> set_include_delta(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> is_delta_included()\u0000{\"1\": \"bool\"}": { + "uid": 881, + "tpl": "<1/> is_delta_included()", + "markers": { + "1": "bool" + } + }, + "Include delta as a first parameter and shift the position of the rest of the arguments if any.\u0000{}": { + "uid": 882, + "tpl": "Include delta as a first parameter and shift the position of the rest of the arguments if any.", + "markers": {} + }, + "<1/> method = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 883, + "tpl": "<1/> method = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "<1/> set_method(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 884, + "tpl": "<1/> set_method(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_method()\u0000{\"1\": \"StringName\"}": { + "uid": 885, + "tpl": "<1/> get_method()", + "markers": { + "1": "StringName" + } + }, + "The name of the method to be called.\u0000{}": { + "uid": 886, + "tpl": "The name of the method to be called.", + "markers": {} + }, + "BBNode node 🔗\u0000{\"1\": \"BBNode\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 887, + "tpl": "BBNode node 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + "<1/> set_node_param(value: BBNode)\u0000{\"1\": \"void\", \"2\": \"BBNode\"}": { + "uid": 888, + "tpl": "<1/> set_node_param(value: BBNode)", + "markers": { + "1": "void", + "2": "BBNode" + } + }, + "BBNode get_node_param()\u0000{\"1\": \"BBNode\"}": { + "uid": 889, + "tpl": "BBNode get_node_param()", + "markers": { + "1": "BBNode" + } + }, + "Specifies the <1/> or <2/> instance containing the method to be called.\u0000{\"1\": \"Node\", \"2\": \"Object\"}": { + "uid": 890, + "tpl": "Specifies the <1/> or <2/> instance containing the method to be called.", + "markers": { + "1": "Node", + "2": "Object" + } + }, + "<1/> result_var = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 891, + "tpl": "<1/> result_var = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "<1/> set_result_var(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 892, + "tpl": "<1/> set_result_var(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_result_var()\u0000{\"1\": \"StringName\"}": { + "uid": 893, + "tpl": "<1/> get_result_var()", + "markers": { + "1": "StringName" + } + }, + "if non-empty, assign the result of the method call to the blackboard variable specified by this property.\u0000{}": { + "uid": 894, + "tpl": "if non-empty, assign the result of the method call to the blackboard variable specified by this property.", + "markers": {} + }, + "BTCheckAgentProperty\u0000{}": { + "uid": 895, + "tpl": "BTCheckAgentProperty", + "markers": {} + }, + "Inherits: BTCondition < BTTask < BT\u0000{\"1\": \"BTCondition\", \"2\": \"BTTask\", \"3\": \"BT\"}": { + "uid": 896, + "tpl": "Inherits: BTCondition < BTTask < BT", + "markers": { + "1": "BTCondition", + "2": "BTTask", + "3": "BT" + } + }, + "BT condition that checks agent’s property value.\u0000{}": { + "uid": 897, + "tpl": "BT condition that checks agent’s property value.", + "markers": {} + }, + "BTCheckAgentProperty examines the agent’s property value and compares it to value.\u0000{\"1\": \"value\"}": { + "uid": 898, + "tpl": "BTCheckAgentProperty examines the agent’s property value and compares it to value.", + "markers": { + "1": "value" + } + }, + "Returns <1/> or <2/> based on the check_type.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\", \"3\": \"check_type\"}": { + "uid": 899, + "tpl": "Returns <1/> or <2/> based on the check_type.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "check_type" + } + }, + "CheckType\u0000{\"1\": \"CheckType\"}": { + "uid": 900, + "tpl": "CheckType", + "markers": { + "1": "CheckType" + } + }, + "check_type\u0000{\"1\": \"check_type\"}": { + "uid": 901, + "tpl": "check_type", + "markers": { + "1": "check_type" + } + }, + "property\u0000{\"1\": \"property\"}": { + "uid": 902, + "tpl": "property", + "markers": { + "1": "property" + } + }, + "BBVariant\u0000{\"1\": \"BBVariant\"}": { + "uid": 903, + "tpl": "BBVariant", + "markers": { + "1": "BBVariant" + } + }, + "value\u0000{\"1\": \"value\"}": { + "uid": 904, + "tpl": "value", + "markers": { + "1": "value" + } + }, + "CheckType check_type = <2/> 🔗\u0000{\"1\": \"CheckType\", \"2\": \"0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 905, + "tpl": "CheckType check_type = <2/> 🔗", + "markers": { + "1": "CheckType", + "2": "0", + "3": "🔗" + } + }, + "<1/> set_check_type(value: CheckType)\u0000{\"1\": \"void\", \"2\": \"CheckType\"}": { + "uid": 906, + "tpl": "<1/> set_check_type(value: CheckType)", + "markers": { + "1": "void", + "2": "CheckType" + } + }, + "CheckType get_check_type()\u0000{\"1\": \"CheckType\"}": { + "uid": 907, + "tpl": "CheckType get_check_type()", + "markers": { + "1": "CheckType" + } + }, + "The type of check to be performed.\u0000{}": { + "uid": 908, + "tpl": "The type of check to be performed.", + "markers": {} + }, + "<1/> property = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 909, + "tpl": "<1/> property = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "<1/> set_property(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 910, + "tpl": "<1/> set_property(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_property()\u0000{\"1\": \"StringName\"}": { + "uid": 911, + "tpl": "<1/> get_property()", + "markers": { + "1": "StringName" + } + }, + "Parameter that specifies the agent’s property to be compared.\u0000{}": { + "uid": 912, + "tpl": "Parameter that specifies the agent’s property to be compared.", + "markers": {} + }, + "BBVariant value 🔗\u0000{\"1\": \"BBVariant\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 913, + "tpl": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + "<1/> set_value(value: BBVariant)\u0000{\"1\": \"void\", \"2\": \"BBVariant\"}": { + "uid": 914, + "tpl": "<1/> set_value(value: BBVariant)", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + "BBVariant get_value()\u0000{\"1\": \"BBVariant\"}": { + "uid": 915, + "tpl": "BBVariant get_value()", + "markers": { + "1": "BBVariant" + } + }, + "Parameter that specifies the value against which an agent’s property will be compared.\u0000{}": { + "uid": 916, + "tpl": "Parameter that specifies the value against which an agent’s property will be compared.", + "markers": {} + }, + "BTCheckTrigger\u0000{}": { + "uid": 917, + "tpl": "BTCheckTrigger", + "markers": {} + }, + "BT condition that checks a trigger (a boolean variable).\u0000{}": { + "uid": 918, + "tpl": "BT condition that checks a trigger (a boolean variable).", + "markers": {} + }, + "BTCheckTrigger verifies whether the variable is set to <2/>. If it is, the task switches it to <3/> and returns <4/>. Otherwise, it returns <5/>.\u0000{\"1\": \"variable\", \"2\": \"true\", \"3\": \"false\", \"4\": \"SUCCESS\", \"5\": \"FAILURE\"}": { + "uid": 919, + "tpl": "BTCheckTrigger verifies whether the variable is set to <2/>. If it is, the task switches it to <3/> and returns <4/>. Otherwise, it returns <5/>.", + "markers": { + "1": "variable", + "2": "true", + "3": "false", + "4": "SUCCESS", + "5": "FAILURE" + } + }, + "BTCheckTrigger can function as a “gate” within a BTSequence: when the trigger variable is set to <2/>, it permits the execution of subsequent tasks and then changes the variable to <3/>.\u0000{\"1\": \"BTSequence\", \"2\": \"true\", \"3\": \"false\"}": { + "uid": 920, + "tpl": "BTCheckTrigger can function as a “gate” within a BTSequence: when the trigger variable is set to <2/>, it permits the execution of subsequent tasks and then changes the variable to <3/>.", + "markers": { + "1": "BTSequence", + "2": "true", + "3": "false" + } + }, + "variable\u0000{\"1\": \"variable\"}": { + "uid": 921, + "tpl": "variable", + "markers": { + "1": "variable" + } + }, + "<1/> variable = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 922, + "tpl": "<1/> variable = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "A boolean variable on the blackboard used as a trigger. See also BTTask.blackboard.\u0000{\"1\": \"BTTask.blackboard\"}": { + "uid": 923, + "tpl": "A boolean variable on the blackboard used as a trigger. See also BTTask.blackboard.", + "markers": { + "1": "BTTask.blackboard" + } + }, + "If variable’s value is <1/>, BTCheckTrigger will switch it to <2/> and return <3/>.\u0000{\"1\": \"true\", \"2\": \"false\", \"3\": \"SUCCESS\"}": { + "uid": 924, + "tpl": "If variable’s value is <1/>, BTCheckTrigger will switch it to <2/> and return <3/>.", + "markers": { + "1": "true", + "2": "false", + "3": "SUCCESS" + } + }, + "If variable’s value is <1/>, BTCheckTrigger will return <2/>.\u0000{\"1\": \"false\", \"2\": \"FAILURE\"}": { + "uid": 925, + "tpl": "If variable’s value is <1/>, BTCheckTrigger will return <2/>.", + "markers": { + "1": "false", + "2": "FAILURE" + } + }, + "BTCheckVar\u0000{}": { + "uid": 926, + "tpl": "BTCheckVar", + "markers": {} + }, + "BT condition that checks a variable on the blackboard.\u0000{}": { + "uid": 927, + "tpl": "BT condition that checks a variable on the blackboard.", + "markers": {} + }, + "BTCheckVar evaluates the variable against value and returns <3/> or <4/> based on the check_type.\u0000{\"1\": \"variable\", \"2\": \"value\", \"3\": \"SUCCESS\", \"4\": \"FAILURE\", \"5\": \"check_type\"}": { + "uid": 928, + "tpl": "BTCheckVar evaluates the variable against value and returns <3/> or <4/> based on the check_type.", + "markers": { + "1": "variable", + "2": "value", + "3": "SUCCESS", + "4": "FAILURE", + "5": "check_type" + } + }, + "check_type\u0000{\"1\": \"check_type\"}": { + "uid": 929, + "tpl": "check_type", + "markers": { + "1": "check_type" + } + }, + "value\u0000{\"1\": \"value\"}": { + "uid": 930, + "tpl": "value", + "markers": { + "1": "value" + } + }, + "variable\u0000{\"1\": \"variable\"}": { + "uid": 931, + "tpl": "variable", + "markers": { + "1": "variable" + } + }, + "CheckType check_type = <2/> 🔗\u0000{\"1\": \"CheckType\", \"2\": \"0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 932, + "tpl": "CheckType check_type = <2/> 🔗", + "markers": { + "1": "CheckType", + "2": "0", + "3": "🔗" + } + }, + "BBVariant value 🔗\u0000{\"1\": \"BBVariant\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 933, + "tpl": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + "A parameter that specifies the value against which the variable will be compared.\u0000{\"1\": \"variable\"}": { + "uid": 934, + "tpl": "A parameter that specifies the value against which the variable will be compared.", + "markers": { + "1": "variable" + } + }, + "<1/> variable = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 935, + "tpl": "<1/> variable = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "The name of the variable to check its value.\u0000{}": { + "uid": 936, + "tpl": "The name of the variable to check its value.", + "markers": {} + }, + "BTComment\u0000{}": { + "uid": 937, + "tpl": "BTComment", + "markers": {} + }, + "BTComment adds annotations or explanatory notes to a BehaviorTree.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 938, + "tpl": "BTComment adds annotations or explanatory notes to a BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + "BTComment is used to add annotations or explanatory notes to a BehaviorTree.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 939, + "tpl": "BTComment is used to add annotations or explanatory notes to a BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + "Comments are not executed as part of the tree and are removed from runtime instances of the BehaviorTree.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 940, + "tpl": "Comments are not executed as part of the tree and are removed from runtime instances of the BehaviorTree.", + "markers": { + "1": "BehaviorTree" + } + }, + "BTComposite\u0000{}": { + "uid": 941, + "tpl": "BTComposite", + "markers": {} + }, + "Inherited By: BTDynamicSelector, BTDynamicSequence, BTParallel, BTProbabilitySelector, BTRandomSelector, BTRandomSequence, BTSelector, BTSequence\u0000{\"1\": \"BTDynamicSelector\", \"2\": \"BTDynamicSequence\", \"3\": \"BTParallel\", \"4\": \"BTProbabilitySelector\", \"5\": \"BTRandomSelector\", \"6\": \"BTRandomSequence\", \"7\": \"BTSelector\", \"8\": \"BTSequence\"}": { + "uid": 942, + "tpl": "Inherited By: BTDynamicSelector, BTDynamicSequence, BTParallel, BTProbabilitySelector, BTRandomSelector, BTRandomSequence, BTSelector, BTSequence", + "markers": { + "1": "BTDynamicSelector", + "2": "BTDynamicSequence", + "3": "BTParallel", + "4": "BTProbabilitySelector", + "5": "BTRandomSelector", + "6": "BTRandomSequence", + "7": "BTSelector", + "8": "BTSequence" + } + }, + "Base class for BT composite tasks.\u0000{}": { + "uid": 943, + "tpl": "Base class for BT composite tasks.", + "markers": {} + }, + "Base class for all BehaviorTree composite tasks. You can create your own composite tasks by extending the BTComposite class.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 944, + "tpl": "Base class for all BehaviorTree composite tasks. You can create your own composite tasks by extending the BTComposite class.", + "markers": { + "1": "BehaviorTree" + } + }, + "Composite is a control task within a BehaviorTree that contains one or more child tasks. It defines the structure and flow of the BehaviorTree by specifying how child tasks are executed. Composites can be used to group related tasks into a single unit, making it easier to manage and maintain the BehaviorTree. Examples of BehaviorTree composites include BTSelector, BTSequence, and BTParallel.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BehaviorTree\", \"3\": \"BehaviorTree\", \"4\": \"BehaviorTree\", \"5\": \"BTSelector\", \"6\": \"BTSequence\", \"7\": \"BTParallel\"}": { + "uid": 945, + "tpl": "Composite is a control task within a BehaviorTree that contains one or more child tasks. It defines the structure and flow of the BehaviorTree by specifying how child tasks are executed. Composites can be used to group related tasks into a single unit, making it easier to manage and maintain the BehaviorTree. Examples of BehaviorTree composites include BTSelector, BTSequence, and BTParallel.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree", + "3": "BehaviorTree", + "4": "BehaviorTree", + "5": "BTSelector", + "6": "BTSequence", + "7": "BTParallel" + } + }, + "BTCondition\u0000{}": { + "uid": 946, + "tpl": "BTCondition", + "markers": {} + }, + "Inherited By: BTCheckAgentProperty, BTCheckTrigger, BTCheckVar\u0000{\"1\": \"BTCheckAgentProperty\", \"2\": \"BTCheckTrigger\", \"3\": \"BTCheckVar\"}": { + "uid": 947, + "tpl": "Inherited By: BTCheckAgentProperty, BTCheckTrigger, BTCheckVar", + "markers": { + "1": "BTCheckAgentProperty", + "2": "BTCheckTrigger", + "3": "BTCheckVar" + } + }, + "Base class for BT conditions.\u0000{}": { + "uid": 948, + "tpl": "Base class for BT conditions.", + "markers": {} + }, + "Base class for all BehaviorTree conditions. You can create your own conditions by extending the BTCondition class.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 949, + "tpl": "Base class for all BehaviorTree conditions. You can create your own conditions by extending the BTCondition class.", + "markers": { + "1": "BehaviorTree" + } + }, + "Condition is a task within a BehaviorTree that checks for a specific condition before executing subsequent tasks. It is often used inside composite tasks to control the execution flow. Conditions are used to verify the state of the environment, check for the presence of an enemy, or evaluate the health status of the agent. The use of condition tasks in a BehaviorTree can improve system efficiency and prevent unnecessary actions. However, they may not be suitable for complex decision-making processes, and too many condition tasks can make the BehaviorTree difficult to read.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BehaviorTree\", \"3\": \"BehaviorTree\"}": { + "uid": 950, + "tpl": "Condition is a task within a BehaviorTree that checks for a specific condition before executing subsequent tasks. It is often used inside composite tasks to control the execution flow. Conditions are used to verify the state of the environment, check for the presence of an enemy, or evaluate the health status of the agent. The use of condition tasks in a BehaviorTree can improve system efficiency and prevent unnecessary actions. However, they may not be suitable for complex decision-making processes, and too many condition tasks can make the BehaviorTree difficult to read.", + "markers": { + "1": "BehaviorTree", + "2": "BehaviorTree", + "3": "BehaviorTree" + } + }, + "Conditions typically don’t take multiple ticks to finish and return either <1/> or <2/> immediately.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\"}": { + "uid": 951, + "tpl": "Conditions typically don’t take multiple ticks to finish and return either <1/> or <2/> immediately.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + "BTConsolePrint\u0000{}": { + "uid": 952, + "tpl": "BTConsolePrint", + "markers": {} + }, + "BT action task that outputs text to the console.\u0000{}": { + "uid": 953, + "tpl": "BT action task that outputs text to the console.", + "markers": {} + }, + "BTConsolePrint action outputs text to the console and returns <1/>. It can include placeholders for format arguments similar to GDScript’s % operator.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 954, + "tpl": "BTConsolePrint action outputs text to the console and returns <1/>. It can include placeholders for format arguments similar to GDScript’s % operator.", + "markers": { + "1": "SUCCESS" + } + }, + "bb_format_parameters\u0000{\"1\": \"bb_format_parameters\"}": { + "uid": 955, + "tpl": "bb_format_parameters", + "markers": { + "1": "bb_format_parameters" + } + }, + "text\u0000{\"1\": \"text\"}": { + "uid": 956, + "tpl": "text", + "markers": { + "1": "text" + } + }, + "<1/> bb_format_parameters = <2/> 🔗\u0000{\"1\": \"PackedStringArray\", \"2\": \"PackedStringArray()\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 957, + "tpl": "<1/> bb_format_parameters = <2/> 🔗", + "markers": { + "1": "PackedStringArray", + "2": "PackedStringArray()", + "3": "🔗" + } + }, + "<1/> set_bb_format_parameters(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"PackedStringArray\"}": { + "uid": 958, + "tpl": "<1/> set_bb_format_parameters(value: <2/>)", + "markers": { + "1": "void", + "2": "PackedStringArray" + } + }, + "<1/> get_bb_format_parameters()\u0000{\"1\": \"PackedStringArray\"}": { + "uid": 959, + "tpl": "<1/> get_bb_format_parameters()", + "markers": { + "1": "PackedStringArray" + } + }, + "The values of format parameters are used as format arguments for the text that will be printed.\u0000{}": { + "uid": 960, + "tpl": "The values of format parameters are used as format arguments for the text that will be printed.", + "markers": {} + }, + "Note: The returned array is copied and any changes to it will not update the original property value. See <1/> for more details.\u0000{\"1\": \"PackedStringArray\"}": { + "uid": 961, + "tpl": "Note: The returned array is copied and any changes to it will not update the original property value. See <1/> for more details.", + "markers": { + "1": "PackedStringArray" + } + }, + "<1/> text = <2/> 🔗\u0000{\"1\": \"String\", \"2\": \"\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 962, + "tpl": "<1/> text = <2/> 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + "<1/> set_text(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"String\"}": { + "uid": 963, + "tpl": "<1/> set_text(value: <2/>)", + "markers": { + "1": "void", + "2": "String" + } + }, + "<1/> get_text()\u0000{\"1\": \"String\"}": { + "uid": 964, + "tpl": "<1/> get_text()", + "markers": { + "1": "String" + } + }, + "The text to be printed, which can include multiple placeholders to be substituted with format arguments. These placeholders follow the same format as GDScript’s % operator and typically start with ‘%’ followed by a format specifier. For instance: %s for string, %d for integer, %f for real.\u0000{}": { + "uid": 965, + "tpl": "The text to be printed, which can include multiple placeholders to be substituted with format arguments. These placeholders follow the same format as GDScript’s % operator and typically start with ‘%’ followed by a format specifier. For instance: %s for string, %d for integer, %f for real.", + "markers": {} + }, + "BTCooldown\u0000{}": { + "uid": 966, + "tpl": "BTCooldown", + "markers": {} + }, + "BT decorator that executes its child task only if duration time has passed since the previous execution.\u0000{\"1\": \"duration\"}": { + "uid": 967, + "tpl": "BT decorator that executes its child task only if duration time has passed since the previous execution.", + "markers": { + "1": "duration" + } + }, + "BTCooldown runs its child task only if duration time has passed since the last successful child task execution. It will only consider successful executions unless trigger_on_failure is set to <3/>.\u0000{\"1\": \"duration\", \"2\": \"trigger_on_failure\", \"3\": \"true\"}": { + "uid": 968, + "tpl": "BTCooldown runs its child task only if duration time has passed since the last successful child task execution. It will only consider successful executions unless trigger_on_failure is set to <3/>.", + "markers": { + "1": "duration", + "2": "trigger_on_failure", + "3": "true" + } + }, + "Returns <1/>, if the child task results in <2/>.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\"}": { + "uid": 969, + "tpl": "Returns <1/>, if the child task results in <2/>.", + "markers": { + "1": "RUNNING", + "2": "RUNNING" + } + }, + "Returns <1/>, if the child task results in <2/>, and triggers the cooldown timer.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 970, + "tpl": "Returns <1/>, if the child task results in <2/>, and triggers the cooldown timer.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "Returns <1/>, if the child task results in <2/> or if duration time didn’t pass since the previous execution.\u0000{\"1\": \"FAILURE\", \"2\": \"FAILURE\", \"3\": \"duration\"}": { + "uid": 971, + "tpl": "Returns <1/>, if the child task results in <2/> or if duration time didn’t pass since the previous execution.", + "markers": { + "1": "FAILURE", + "2": "FAILURE", + "3": "duration" + } + }, + "cooldown_state_var\u0000{\"1\": \"cooldown_state_var\"}": { + "uid": 972, + "tpl": "cooldown_state_var", + "markers": { + "1": "cooldown_state_var" + } + }, + "duration\u0000{\"1\": \"duration\"}": { + "uid": 973, + "tpl": "duration", + "markers": { + "1": "duration" + } + }, + "process_pause\u0000{\"1\": \"process_pause\"}": { + "uid": 974, + "tpl": "process_pause", + "markers": { + "1": "process_pause" + } + }, + "start_cooled\u0000{\"1\": \"start_cooled\"}": { + "uid": 975, + "tpl": "start_cooled", + "markers": { + "1": "start_cooled" + } + }, + "trigger_on_failure\u0000{\"1\": \"trigger_on_failure\"}": { + "uid": 976, + "tpl": "trigger_on_failure", + "markers": { + "1": "trigger_on_failure" + } + }, + "<1/> cooldown_state_var = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 977, + "tpl": "<1/> cooldown_state_var = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "<1/> set_cooldown_state_var(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 978, + "tpl": "<1/> set_cooldown_state_var(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_cooldown_state_var()\u0000{\"1\": \"StringName\"}": { + "uid": 979, + "tpl": "<1/> get_cooldown_state_var()", + "markers": { + "1": "StringName" + } + }, + "A boolean variable used to store the cooldown state in the Blackboard. If left empty, the variable will be automatically generated and assigned.\u0000{\"1\": \"Blackboard\"}": { + "uid": 980, + "tpl": "A boolean variable used to store the cooldown state in the Blackboard. If left empty, the variable will be automatically generated and assigned.", + "markers": { + "1": "Blackboard" + } + }, + "If the variable’s value is set to <1/>, it indicates that the cooldown is activated. This feature is useful for checking the cooldown state from other parts of the tree or sharing it among different sections of the BehaviorTree.\u0000{\"1\": \"true\", \"2\": \"BehaviorTree\"}": { + "uid": 981, + "tpl": "If the variable’s value is set to <1/>, it indicates that the cooldown is activated. This feature is useful for checking the cooldown state from other parts of the tree or sharing it among different sections of the BehaviorTree.", + "markers": { + "1": "true", + "2": "BehaviorTree" + } + }, + "<1/> duration = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"10.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 982, + "tpl": "<1/> duration = <2/> 🔗", + "markers": { + "1": "float", + "2": "10.0", + "3": "🔗" + } + }, + "<1/> set_duration(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 983, + "tpl": "<1/> set_duration(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_duration()\u0000{\"1\": \"float\"}": { + "uid": 984, + "tpl": "<1/> get_duration()", + "markers": { + "1": "float" + } + }, + "Time to wait before permitting another child’s execution.\u0000{}": { + "uid": 985, + "tpl": "Time to wait before permitting another child’s execution.", + "markers": {} + }, + "<1/> process_pause = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 986, + "tpl": "<1/> process_pause = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_process_pause(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 987, + "tpl": "<1/> set_process_pause(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_process_pause()\u0000{\"1\": \"bool\"}": { + "uid": 988, + "tpl": "<1/> get_process_pause()", + "markers": { + "1": "bool" + } + }, + "If <1/>, process cooldown when the <2/> is paused.\u0000{\"1\": \"true\", \"2\": \"SceneTree\"}": { + "uid": 989, + "tpl": "If <1/>, process cooldown when the <2/> is paused.", + "markers": { + "1": "true", + "2": "SceneTree" + } + }, + "<1/> start_cooled = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 990, + "tpl": "<1/> start_cooled = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_start_cooled(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 991, + "tpl": "<1/> set_start_cooled(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_start_cooled()\u0000{\"1\": \"bool\"}": { + "uid": 992, + "tpl": "<1/> get_start_cooled()", + "markers": { + "1": "bool" + } + }, + "If <1/>, initiate a cooldown as if the child had been executed before the first BT tick.\u0000{\"1\": \"true\"}": { + "uid": 993, + "tpl": "If <1/>, initiate a cooldown as if the child had been executed before the first BT tick.", + "markers": { + "1": "true" + } + }, + "<1/> trigger_on_failure = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 994, + "tpl": "<1/> trigger_on_failure = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_trigger_on_failure(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 995, + "tpl": "<1/> set_trigger_on_failure(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_trigger_on_failure()\u0000{\"1\": \"bool\"}": { + "uid": 996, + "tpl": "<1/> get_trigger_on_failure()", + "markers": { + "1": "bool" + } + }, + "If <1/>, the cooldown will be activated if the child task also returns <2/>. Otherwise, the cooldown will only be triggered when the child task returns <3/>.\u0000{\"1\": \"true\", \"2\": \"FAILURE\", \"3\": \"SUCCESS\"}": { + "uid": 997, + "tpl": "If <1/>, the cooldown will be activated if the child task also returns <2/>. Otherwise, the cooldown will only be triggered when the child task returns <3/>.", + "markers": { + "1": "true", + "2": "FAILURE", + "3": "SUCCESS" + } + }, + "BTDecorator\u0000{}": { + "uid": 998, + "tpl": "BTDecorator", + "markers": {} + }, + "Inherited By: BTAlwaysFail, BTAlwaysSucceed, BTCooldown, BTDelay, BTForEach, BTInvert, BTNewScope, BTProbability, BTRepeat, BTRepeatUntilFailure, BTRepeatUntilSuccess, BTRunLimit, BTTimeLimit\u0000{\"1\": \"BTAlwaysFail\", \"10\": \"BTRepeatUntilFailure\", \"11\": \"BTRepeatUntilSuccess\", \"12\": \"BTRunLimit\", \"13\": \"BTTimeLimit\", \"2\": \"BTAlwaysSucceed\", \"3\": \"BTCooldown\", \"4\": \"BTDelay\", \"5\": \"BTForEach\", \"6\": \"BTInvert\", \"7\": \"BTNewScope\", \"8\": \"BTProbability\", \"9\": \"BTRepeat\"}": { + "uid": 999, + "tpl": "Inherited By: BTAlwaysFail, BTAlwaysSucceed, BTCooldown, BTDelay, BTForEach, BTInvert, BTNewScope, BTProbability, BTRepeat, BTRepeatUntilFailure, BTRepeatUntilSuccess, BTRunLimit, BTTimeLimit", + "markers": { + "1": "BTAlwaysFail", + "2": "BTAlwaysSucceed", + "3": "BTCooldown", + "4": "BTDelay", + "5": "BTForEach", + "6": "BTInvert", + "7": "BTNewScope", + "8": "BTProbability", + "9": "BTRepeat", + "10": "BTRepeatUntilFailure", + "11": "BTRepeatUntilSuccess", + "12": "BTRunLimit", + "13": "BTTimeLimit" + } + }, + "Base class for BT decorators.\u0000{}": { + "uid": 1000, + "tpl": "Base class for BT decorators.", + "markers": {} + }, + "Base class for all BehaviorTree decorators. You can create your own decorators by extending the BTDecorator class.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 1001, + "tpl": "Base class for all BehaviorTree decorators. You can create your own decorators by extending the BTDecorator class.", + "markers": { + "1": "BehaviorTree" + } + }, + "A decorator is a task within a BehaviorTree that alters the behavior of its child task. Decorators can have only one child task.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 1002, + "tpl": "A decorator is a task within a BehaviorTree that alters the behavior of its child task. Decorators can have only one child task.", + "markers": { + "1": "BehaviorTree" + } + }, + "Decorators can be used to add conditions, limits, or other constraints to the execution of a task. Examples of BehaviorTree decorators include BTInvert, BTRepeat, and BTCooldown. The use of BehaviorTree decorators can simplify the design and implementation of complex behaviors by adding additional logic to existing tasks.\u0000{\"1\": \"BehaviorTree\", \"2\": \"BTInvert\", \"3\": \"BTRepeat\", \"4\": \"BTCooldown\", \"5\": \"BehaviorTree\"}": { + "uid": 1003, + "tpl": "Decorators can be used to add conditions, limits, or other constraints to the execution of a task. Examples of BehaviorTree decorators include BTInvert, BTRepeat, and BTCooldown. The use of BehaviorTree decorators can simplify the design and implementation of complex behaviors by adding additional logic to existing tasks.", + "markers": { + "1": "BehaviorTree", + "2": "BTInvert", + "3": "BTRepeat", + "4": "BTCooldown", + "5": "BehaviorTree" + } + }, + "BTDelay\u0000{}": { + "uid": 1004, + "tpl": "BTDelay", + "markers": {} + }, + "BT decorator that introduces a delay before executing its child task.\u0000{}": { + "uid": 1005, + "tpl": "BT decorator that introduces a delay before executing its child task.", + "markers": {} + }, + "BTDelay introduces a delay of seconds before executing its child task. Returns <2/> during the delay period.\u0000{\"1\": \"seconds\", \"2\": \"RUNNING\"}": { + "uid": 1006, + "tpl": "BTDelay introduces a delay of seconds before executing its child task. Returns <2/> during the delay period.", + "markers": { + "1": "seconds", + "2": "RUNNING" + } + }, + "seconds\u0000{\"1\": \"seconds\"}": { + "uid": 1007, + "tpl": "seconds", + "markers": { + "1": "seconds" + } + }, + "<1/> seconds = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"1.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1008, + "tpl": "<1/> seconds = <2/> 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + "<1/> set_seconds(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1009, + "tpl": "<1/> set_seconds(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_seconds()\u0000{\"1\": \"float\"}": { + "uid": 1010, + "tpl": "<1/> get_seconds()", + "markers": { + "1": "float" + } + }, + "Delay duration in seconds.\u0000{}": { + "uid": 1011, + "tpl": "Delay duration in seconds.", + "markers": {} + }, + "BTDynamicSelector\u0000{}": { + "uid": 1012, + "tpl": "BTDynamicSelector", + "markers": {} + }, + "Inherits: BTComposite < BTTask < BT\u0000{\"1\": \"BTComposite\", \"2\": \"BTTask\", \"3\": \"BT\"}": { + "uid": 1013, + "tpl": "Inherits: BTComposite < BTTask < BT", + "markers": { + "1": "BTComposite", + "2": "BTTask", + "3": "BT" + } + }, + "BT composite that executes tasks from scratch every tick until first <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1014, + "tpl": "BT composite that executes tasks from scratch every tick until first <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTDynamicSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. Unlike BTSelector, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to retry higher-priority behaviors in every tick.\u0000{\"1\": \"SUCCESS\", \"2\": \"BTSelector\"}": { + "uid": 1015, + "tpl": "BTDynamicSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. Unlike BTSelector, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to retry higher-priority behaviors in every tick.", + "markers": { + "1": "SUCCESS", + "2": "BTSelector" + } + }, + "Returns <1/> if a child task results in <2/>. BTDynamicSelector will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"RUNNING\", \"4\": \"BTSequence\", \"5\": \"FAILURE\", \"6\": \"RUNNING\"}": { + "uid": 1016, + "tpl": "Returns <1/> if a child task results in <2/>. BTDynamicSelector will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING", + "4": "BTSequence", + "5": "FAILURE", + "6": "RUNNING" + } + }, + "Returns <1/> if all child tasks result in <2/>.\u0000{\"1\": \"FAILURE\", \"2\": \"FAILURE\"}": { + "uid": 1017, + "tpl": "Returns <1/> if all child tasks result in <2/>.", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + "Returns <1/> if a child task results in <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 1018, + "tpl": "Returns <1/> if a child task results in <2/>.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "BTDynamicSequence\u0000{}": { + "uid": 1019, + "tpl": "BTDynamicSequence", + "markers": {} + }, + "BT composite that executes tasks from scratch every tick as long as they return <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1020, + "tpl": "BT composite that executes tasks from scratch every tick as long as they return <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTDynamicSequence executes its child tasks sequentially, from first to last, for as long as they return <1/>. Unlike BTSequence, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to recheck conditions preceding a long-running action during each tick and abort the <3/> action when any condition results in <4/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"BTSequence\", \"3\": \"RUNNING\", \"4\": \"FAILURE\"}": { + "uid": 1021, + "tpl": "BTDynamicSequence executes its child tasks sequentially, from first to last, for as long as they return <1/>. Unlike BTSequence, it will execute tasks from the beginning every tick, reevaluating their statuses. It is quite useful when you want to recheck conditions preceding a long-running action during each tick and abort the <3/> action when any condition results in <4/>.", + "markers": { + "1": "SUCCESS", + "2": "BTSequence", + "3": "RUNNING", + "4": "FAILURE" + } + }, + "Returns <1/> if a child task results in <2/>. BTDynamicSequence will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"RUNNING\", \"4\": \"BTSequence\", \"5\": \"SUCCESS\", \"6\": \"RUNNING\"}": { + "uid": 1022, + "tpl": "Returns <1/> if a child task results in <2/>. BTDynamicSequence will remember the last <3/> child, but, unlike BTSequence, on the next execution tick, it will reexecute preceding tasks and reevaluate their return statuses. If any of the preceding tasks doesn’t result in <5/>, it will abort the remembered <6/> task.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING", + "4": "BTSequence", + "5": "SUCCESS", + "6": "RUNNING" + } + }, + "Returns <1/> if a child task results in <2/>.\u0000{\"1\": \"FAILURE\", \"2\": \"FAILURE\"}": { + "uid": 1023, + "tpl": "Returns <1/> if a child task results in <2/>.", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + "Returns <1/> if all child tasks result in <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 1024, + "tpl": "Returns <1/> if all child tasks result in <2/>.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "BTEvaluateExpression\u0000{}": { + "uid": 1025, + "tpl": "BTEvaluateExpression", + "markers": {} + }, + "BT action that evaluates an <1/> against a specified <2/> or <3/>.\u0000{\"1\": \"Expression\", \"2\": \"Node\", \"3\": \"Object\"}": { + "uid": 1026, + "tpl": "BT action that evaluates an <1/> against a specified <2/> or <3/>.", + "markers": { + "1": "Expression", + "2": "Node", + "3": "Object" + } + }, + "BTEvaluateExpression action evaluates an expression_string on the specified <2/> or <3/> instance and returns <4/> when the <5/> executes successfully.\u0000{\"1\": \"expression_string\", \"2\": \"Node\", \"3\": \"Object\", \"4\": \"SUCCESS\", \"5\": \"Expression\"}": { + "uid": 1027, + "tpl": "BTEvaluateExpression action evaluates an expression_string on the specified <2/> or <3/> instance and returns <4/> when the <5/> executes successfully.", + "markers": { + "1": "expression_string", + "2": "Node", + "3": "Object", + "4": "SUCCESS", + "5": "Expression" + } + }, + "Returns <1/> if the action encounters an issue during the <2/> parsing or execution.\u0000{\"1\": \"FAILURE\", \"2\": \"Expression\"}": { + "uid": 1028, + "tpl": "Returns <1/> if the action encounters an issue during the <2/> parsing or execution.", + "markers": { + "1": "FAILURE", + "2": "Expression" + } + }, + "expression_string\u0000{\"1\": \"expression_string\"}": { + "uid": 1029, + "tpl": "expression_string", + "markers": { + "1": "expression_string" + } + }, + "input_include_delta\u0000{\"1\": \"input_include_delta\"}": { + "uid": 1030, + "tpl": "input_include_delta", + "markers": { + "1": "input_include_delta" + } + }, + "input_names\u0000{\"1\": \"input_names\"}": { + "uid": 1031, + "tpl": "input_names", + "markers": { + "1": "input_names" + } + }, + "input_values\u0000{\"1\": \"input_values\"}": { + "uid": 1032, + "tpl": "input_values", + "markers": { + "1": "input_values" + } + }, + "node\u0000{\"1\": \"node\"}": { + "uid": 1033, + "tpl": "node", + "markers": { + "1": "node" + } + }, + "result_var\u0000{\"1\": \"result_var\"}": { + "uid": 1034, + "tpl": "result_var", + "markers": { + "1": "result_var" + } + }, + "Error\u0000{}": { + "uid": 1035, + "tpl": "Error", + "markers": {} + }, + "parse()\u0000{\"1\": \"parse\"}": { + "uid": 1036, + "tpl": "parse()", + "markers": { + "1": "parse" + } + }, + "<1/> expression_string = <2/> 🔗\u0000{\"1\": \"String\", \"2\": \"\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1037, + "tpl": "<1/> expression_string = <2/> 🔗", + "markers": { + "1": "String", + "2": "\"\"", + "3": "🔗" + } + }, + "<1/> set_expression_string(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"String\"}": { + "uid": 1038, + "tpl": "<1/> set_expression_string(value: <2/>)", + "markers": { + "1": "void", + "2": "String" + } + }, + "<1/> get_expression_string()\u0000{\"1\": \"String\"}": { + "uid": 1039, + "tpl": "<1/> get_expression_string()", + "markers": { + "1": "String" + } + }, + "The expression string to be parsed and executed.\u0000{}": { + "uid": 1040, + "tpl": "The expression string to be parsed and executed.", + "markers": {} + }, + "Warning: Call parse after updating expression_string to update the internal <3/> as it won’t be updated automatically.\u0000{\"1\": \"parse\", \"2\": \"expression_string\", \"3\": \"Expression\"}": { + "uid": 1041, + "tpl": "Warning: Call parse after updating expression_string to update the internal <3/> as it won’t be updated automatically.", + "markers": { + "1": "parse", + "2": "expression_string", + "3": "Expression" + } + }, + "<1/> input_include_delta = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1042, + "tpl": "<1/> input_include_delta = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_input_include_delta(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 1043, + "tpl": "<1/> set_input_include_delta(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> is_input_delta_included()\u0000{\"1\": \"bool\"}": { + "uid": 1044, + "tpl": "<1/> is_input_delta_included()", + "markers": { + "1": "bool" + } + }, + "If enabled, the input variable <1/> will be added to input_names and input_values.\u0000{\"1\": \"delta\", \"2\": \"input_names\", \"3\": \"input_values\"}": { + "uid": 1045, + "tpl": "If enabled, the input variable <1/> will be added to input_names and input_values.", + "markers": { + "1": "delta", + "2": "input_names", + "3": "input_values" + } + }, + "Warning: Call parse after toggling input_include_delta to update the internal <3/> as it won’t be updated automatically.\u0000{\"1\": \"parse\", \"2\": \"input_include_delta\", \"3\": \"Expression\"}": { + "uid": 1046, + "tpl": "Warning: Call parse after toggling input_include_delta to update the internal <3/> as it won’t be updated automatically.", + "markers": { + "1": "parse", + "2": "input_include_delta", + "3": "Expression" + } + }, + "<1/> input_names = <2/> 🔗\u0000{\"1\": \"PackedStringArray\", \"2\": \"PackedStringArray()\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1047, + "tpl": "<1/> input_names = <2/> 🔗", + "markers": { + "1": "PackedStringArray", + "2": "PackedStringArray()", + "3": "🔗" + } + }, + "<1/> set_input_names(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"PackedStringArray\"}": { + "uid": 1048, + "tpl": "<1/> set_input_names(value: <2/>)", + "markers": { + "1": "void", + "2": "PackedStringArray" + } + }, + "<1/> get_input_names()\u0000{\"1\": \"PackedStringArray\"}": { + "uid": 1049, + "tpl": "<1/> get_input_names()", + "markers": { + "1": "PackedStringArray" + } + }, + "List of variable names within expression_string for which the user will provide values for through input_values.\u0000{\"1\": \"expression_string\", \"2\": \"input_values\"}": { + "uid": 1050, + "tpl": "List of variable names within expression_string for which the user will provide values for through input_values.", + "markers": { + "1": "expression_string", + "2": "input_values" + } + }, + "Warning: Call parse after updating input_names to update the internal <3/> as it won’t be updated automatically.\u0000{\"1\": \"parse\", \"2\": \"input_names\", \"3\": \"Expression\"}": { + "uid": 1051, + "tpl": "Warning: Call parse after updating input_names to update the internal <3/> as it won’t be updated automatically.", + "markers": { + "1": "parse", + "2": "input_names", + "3": "Expression" + } + }, + "Array[BBVariant] input_values = <2/> 🔗\u0000{\"1\": \"BBVariant\", \"2\": \"[]\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1052, + "tpl": "Array[BBVariant] input_values = <2/> 🔗", + "markers": { + "1": "BBVariant", + "2": "[]", + "3": "🔗" + } + }, + "<1/> set_input_values(value: Array[BBVariant])\u0000{\"1\": \"void\", \"2\": \"BBVariant\"}": { + "uid": 1053, + "tpl": "<1/> set_input_values(value: Array[BBVariant])", + "markers": { + "1": "void", + "2": "BBVariant" + } + }, + "Array[BBVariant] get_input_values()\u0000{\"1\": \"BBVariant\"}": { + "uid": 1054, + "tpl": "Array[BBVariant] get_input_values()", + "markers": { + "1": "BBVariant" + } + }, + "List of values for variables specified in input_names. The values are mapped to the variables by their array index.\u0000{\"1\": \"input_names\"}": { + "uid": 1055, + "tpl": "List of values for variables specified in input_names. The values are mapped to the variables by their array index.", + "markers": { + "1": "input_names" + } + }, + "BBNode node 🔗\u0000{\"1\": \"BBNode\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1056, + "tpl": "BBNode node 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + "<1/> result_var = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1057, + "tpl": "<1/> result_var = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "Error parse() 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 1058, + "tpl": "Error parse() 🔗", + "markers": { + "1": "🔗" + } + }, + "Calls Expression.parse considering input_include_delta and input_names and returns its error code.\u0000{\"1\": \"input_include_delta\", \"2\": \"input_names\"}": { + "uid": 1059, + "tpl": "Calls Expression.parse considering input_include_delta and input_names and returns its error code.", + "markers": { + "1": "input_include_delta", + "2": "input_names" + } + }, + "BTFail\u0000{}": { + "uid": 1060, + "tpl": "BTFail", + "markers": {} + }, + "BT action that always returns <1/>.\u0000{\"1\": \"FAILURE\"}": { + "uid": 1061, + "tpl": "BT action that always returns <1/>.", + "markers": { + "1": "FAILURE" + } + }, + "BTForEach\u0000{}": { + "uid": 1062, + "tpl": "BTForEach", + "markers": {} + }, + "BT decorator that executes its child task for each element of an <1/>.\u0000{\"1\": \"Array\"}": { + "uid": 1063, + "tpl": "BT decorator that executes its child task for each element of an <1/>.", + "markers": { + "1": "Array" + } + }, + "BTForEach executes its child task for each element of an <1/>. During each iteration, the next element is stored in the specified Blackboard variable.\u0000{\"1\": \"Array\", \"2\": \"Blackboard\"}": { + "uid": 1064, + "tpl": "BTForEach executes its child task for each element of an <1/>. During each iteration, the next element is stored in the specified Blackboard variable.", + "markers": { + "1": "Array", + "2": "Blackboard" + } + }, + "Returns <1/> if the child task results in <2/> or if the child task results in <3/> on a non-last iteration.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"SUCCESS\"}": { + "uid": 1065, + "tpl": "Returns <1/> if the child task results in <2/> or if the child task results in <3/> on a non-last iteration.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "SUCCESS" + } + }, + "Returns <1/> if the child task results in <2/>.\u0000{\"1\": \"FAILURE\", \"2\": \"FAILURE\"}": { + "uid": 1066, + "tpl": "Returns <1/> if the child task results in <2/>.", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + "Returns <1/> if the child task results in <2/> on the last iteration.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 1067, + "tpl": "Returns <1/> if the child task results in <2/> on the last iteration.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "array_var\u0000{\"1\": \"array_var\"}": { + "uid": 1068, + "tpl": "array_var", + "markers": { + "1": "array_var" + } + }, + "save_var\u0000{\"1\": \"save_var\"}": { + "uid": 1069, + "tpl": "save_var", + "markers": { + "1": "save_var" + } + }, + "<1/> array_var = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1070, + "tpl": "<1/> array_var = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "<1/> set_array_var(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 1071, + "tpl": "<1/> set_array_var(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_array_var()\u0000{\"1\": \"StringName\"}": { + "uid": 1072, + "tpl": "<1/> get_array_var()", + "markers": { + "1": "StringName" + } + }, + "A variable within the Blackboard that holds an <2/>, which is used for the iteration process.\u0000{\"1\": \"Blackboard\", \"2\": \"Array\"}": { + "uid": 1073, + "tpl": "A variable within the Blackboard that holds an <2/>, which is used for the iteration process.", + "markers": { + "1": "Blackboard", + "2": "Array" + } + }, + "<1/> save_var = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1074, + "tpl": "<1/> save_var = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "<1/> set_save_var(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"StringName\"}": { + "uid": 1075, + "tpl": "<1/> set_save_var(value: <2/>)", + "markers": { + "1": "void", + "2": "StringName" + } + }, + "<1/> get_save_var()\u0000{\"1\": \"StringName\"}": { + "uid": 1076, + "tpl": "<1/> get_save_var()", + "markers": { + "1": "StringName" + } + }, + "A Blackboard variable used to store an element of the array referenced by array_var.\u0000{\"1\": \"Blackboard\", \"2\": \"array_var\"}": { + "uid": 1077, + "tpl": "A Blackboard variable used to store an element of the array referenced by array_var.", + "markers": { + "1": "Blackboard", + "2": "array_var" + } + }, + "BTInstance\u0000{}": { + "uid": 1078, + "tpl": "BTInstance", + "markers": {} + }, + "Represents a runtime instance of a BehaviorTree resource.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 1079, + "tpl": "Represents a runtime instance of a BehaviorTree resource.", + "markers": { + "1": "BehaviorTree" + } + }, + "Can be created using the BehaviorTree.instantiate method.\u0000{\"1\": \"BehaviorTree.instantiate\"}": { + "uid": 1080, + "tpl": "Can be created using the BehaviorTree.instantiate method.", + "markers": { + "1": "BehaviorTree.instantiate" + } + }, + "monitor_performance\u0000{\"1\": \"monitor_performance\"}": { + "uid": 1081, + "tpl": "monitor_performance", + "markers": { + "1": "monitor_performance" + } + }, + "get_agent() <2/>\u0000{\"1\": \"get_agent\", \"2\": \"const\"}": { + "uid": 1082, + "tpl": "get_agent() <2/>", + "markers": { + "1": "get_agent", + "2": "const" + } + }, + "get_blackboard() <2/>\u0000{\"1\": \"get_blackboard\", \"2\": \"const\"}": { + "uid": 1083, + "tpl": "get_blackboard() <2/>", + "markers": { + "1": "get_blackboard", + "2": "const" + } + }, + "get_last_status() <2/>\u0000{\"1\": \"get_last_status\", \"2\": \"const\"}": { + "uid": 1084, + "tpl": "get_last_status() <2/>", + "markers": { + "1": "get_last_status", + "2": "const" + } + }, + "get_owner_node() <2/>\u0000{\"1\": \"get_owner_node\", \"2\": \"const\"}": { + "uid": 1085, + "tpl": "get_owner_node() <2/>", + "markers": { + "1": "get_owner_node", + "2": "const" + } + }, + "get_root_task() <2/>\u0000{\"1\": \"get_root_task\", \"2\": \"const\"}": { + "uid": 1086, + "tpl": "get_root_task() <2/>", + "markers": { + "1": "get_root_task", + "2": "const" + } + }, + "get_source_bt_path() <2/>\u0000{\"1\": \"get_source_bt_path\", \"2\": \"const\"}": { + "uid": 1087, + "tpl": "get_source_bt_path() <2/>", + "markers": { + "1": "get_source_bt_path", + "2": "const" + } + }, + "is_instance_valid() <2/>\u0000{\"1\": \"is_instance_valid\", \"2\": \"const\"}": { + "uid": 1088, + "tpl": "is_instance_valid() <2/>", + "markers": { + "1": "is_instance_valid", + "2": "const" + } + }, + "register_with_debugger()\u0000{\"1\": \"register_with_debugger\"}": { + "uid": 1089, + "tpl": "register_with_debugger()", + "markers": { + "1": "register_with_debugger" + } + }, + "unregister_with_debugger()\u0000{\"1\": \"unregister_with_debugger\"}": { + "uid": 1090, + "tpl": "unregister_with_debugger()", + "markers": { + "1": "unregister_with_debugger" + } + }, + "update(delta: <2/>)\u0000{\"1\": \"update\", \"2\": \"float\"}": { + "uid": 1091, + "tpl": "update(delta: <2/>)", + "markers": { + "1": "update", + "2": "float" + } + }, + "freed() 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 1092, + "tpl": "freed() 🔗", + "markers": { + "1": "🔗" + } + }, + "Emitted when the behavior tree instance is freed. Used by debugger to unregister.\u0000{}": { + "uid": 1093, + "tpl": "Emitted when the behavior tree instance is freed. Used by debugger to unregister.", + "markers": {} + }, + "updated(status: <1/>) 🔗\u0000{\"1\": \"int\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1094, + "tpl": "updated(status: <1/>) 🔗", + "markers": { + "1": "int", + "2": "🔗" + } + }, + "Emitted when the behavior tree instance has finished updating.\u0000{}": { + "uid": 1095, + "tpl": "Emitted when the behavior tree instance has finished updating.", + "markers": {} + }, + "<1/> monitor_performance = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1096, + "tpl": "<1/> monitor_performance = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "If <1/>, adds a performance monitor for this instance to “Debugger->Monitors” in the editor.\u0000{\"1\": \"true\"}": { + "uid": 1097, + "tpl": "If <1/>, adds a performance monitor for this instance to “Debugger->Monitors” in the editor.", + "markers": { + "1": "true" + } + }, + "<1/> get_agent() <2/> 🔗\u0000{\"1\": \"Node\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1098, + "tpl": "<1/> get_agent() <2/> 🔗", + "markers": { + "1": "Node", + "2": "const", + "3": "🔗" + } + }, + "Returns the agent of the behavior tree instance.\u0000{}": { + "uid": 1099, + "tpl": "Returns the agent of the behavior tree instance.", + "markers": {} + }, + "Blackboard get_blackboard() <2/> 🔗\u0000{\"1\": \"Blackboard\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1100, + "tpl": "Blackboard get_blackboard() <2/> 🔗", + "markers": { + "1": "Blackboard", + "2": "const", + "3": "🔗" + } + }, + "Returns the blackboard of the behavior tree instance.\u0000{}": { + "uid": 1101, + "tpl": "Returns the blackboard of the behavior tree instance.", + "markers": {} + }, + "Status get_last_status() <2/> 🔗\u0000{\"1\": \"Status\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1102, + "tpl": "Status get_last_status() <2/> 🔗", + "markers": { + "1": "Status", + "2": "const", + "3": "🔗" + } + }, + "Returns the execution status of the last update.\u0000{}": { + "uid": 1103, + "tpl": "Returns the execution status of the last update.", + "markers": {} + }, + "<1/> get_owner_node() <2/> 🔗\u0000{\"1\": \"Node\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1104, + "tpl": "<1/> get_owner_node() <2/> 🔗", + "markers": { + "1": "Node", + "2": "const", + "3": "🔗" + } + }, + "Returns the scene <1/> that owns this behavior tree instance.\u0000{\"1\": \"Node\"}": { + "uid": 1105, + "tpl": "Returns the scene <1/> that owns this behavior tree instance.", + "markers": { + "1": "Node" + } + }, + "BTTask get_root_task() <2/> 🔗\u0000{\"1\": \"BTTask\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1106, + "tpl": "BTTask get_root_task() <2/> 🔗", + "markers": { + "1": "BTTask", + "2": "const", + "3": "🔗" + } + }, + "Returns the root task of the behavior tree instance.\u0000{}": { + "uid": 1107, + "tpl": "Returns the root task of the behavior tree instance.", + "markers": {} + }, + "<1/> get_source_bt_path() <2/> 🔗\u0000{\"1\": \"String\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1108, + "tpl": "<1/> get_source_bt_path() <2/> 🔗", + "markers": { + "1": "String", + "2": "const", + "3": "🔗" + } + }, + "Returns the file path to the behavior tree resource that was used to create this instance.\u0000{}": { + "uid": 1109, + "tpl": "Returns the file path to the behavior tree resource that was used to create this instance.", + "markers": {} + }, + "<1/> is_instance_valid() <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1110, + "tpl": "<1/> is_instance_valid() <2/> 🔗", + "markers": { + "1": "bool", + "2": "const", + "3": "🔗" + } + }, + "Returns <1/> if the behavior tree instance is properly initialized and can be used.\u0000{\"1\": \"true\"}": { + "uid": 1111, + "tpl": "Returns <1/> if the behavior tree instance is properly initialized and can be used.", + "markers": { + "1": "true" + } + }, + "<1/> register_with_debugger() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1112, + "tpl": "<1/> register_with_debugger() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Registers the behavior tree instance with the debugger.\u0000{}": { + "uid": 1113, + "tpl": "Registers the behavior tree instance with the debugger.", + "markers": {} + }, + "<1/> unregister_with_debugger() 🔗\u0000{\"1\": \"void\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1114, + "tpl": "<1/> unregister_with_debugger() 🔗", + "markers": { + "1": "void", + "2": "🔗" + } + }, + "Unregisters the behavior tree instance from the debugger. This is typically not necessary, as the debugger will automatically unregister the instance when it is freed.\u0000{}": { + "uid": 1115, + "tpl": "Unregisters the behavior tree instance from the debugger. This is typically not necessary, as the debugger will automatically unregister the instance when it is freed.", + "markers": {} + }, + "Status update(delta: <2/>) 🔗\u0000{\"1\": \"Status\", \"2\": \"float\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1116, + "tpl": "Status update(delta: <2/>) 🔗", + "markers": { + "1": "Status", + "2": "float", + "3": "🔗" + } + }, + "Ticks the behavior tree instance and returns its status.\u0000{}": { + "uid": 1117, + "tpl": "Ticks the behavior tree instance and returns its status.", + "markers": {} + }, + "BTInvert\u0000{}": { + "uid": 1118, + "tpl": "BTInvert", + "markers": {} + }, + "BT decorator that transforms <1/> into <2/> and <3/> into <4/>.\u0000{\"1\": \"FAILURE\", \"2\": \"SUCCESS\", \"3\": \"SUCCESS\", \"4\": \"FAILURE\"}": { + "uid": 1119, + "tpl": "BT decorator that transforms <1/> into <2/> and <3/> into <4/>.", + "markers": { + "1": "FAILURE", + "2": "SUCCESS", + "3": "SUCCESS", + "4": "FAILURE" + } + }, + "BTInvert transforms <1/> into <2/> and <3/> into <4/>.\u0000{\"1\": \"FAILURE\", \"2\": \"SUCCESS\", \"3\": \"SUCCESS\", \"4\": \"FAILURE\"}": { + "uid": 1120, + "tpl": "BTInvert transforms <1/> into <2/> and <3/> into <4/>.", + "markers": { + "1": "FAILURE", + "2": "SUCCESS", + "3": "SUCCESS", + "4": "FAILURE" + } + }, + "BTNewScope\u0000{}": { + "uid": 1121, + "tpl": "BTNewScope", + "markers": {} + }, + "Inherited By: BTSubtree\u0000{\"1\": \"BTSubtree\"}": { + "uid": 1122, + "tpl": "Inherited By: BTSubtree", + "markers": { + "1": "BTSubtree" + } + }, + "BT decorator that creates a new Blackboard scope.\u0000{\"1\": \"Blackboard\"}": { + "uid": 1123, + "tpl": "BT decorator that creates a new Blackboard scope.", + "markers": { + "1": "Blackboard" + } + }, + "BTNewScope creates a new Blackboard scope during initialization and populates it with data. See Blackboard.\u0000{\"1\": \"Blackboard\", \"2\": \"Blackboard\"}": { + "uid": 1124, + "tpl": "BTNewScope creates a new Blackboard scope during initialization and populates it with data. See Blackboard.", + "markers": { + "1": "Blackboard", + "2": "Blackboard" + } + }, + "Returns the status of the child task execution.\u0000{}": { + "uid": 1125, + "tpl": "Returns the status of the child task execution.", + "markers": {} + }, + "blackboard_plan\u0000{\"1\": \"blackboard_plan\"}": { + "uid": 1126, + "tpl": "blackboard_plan", + "markers": { + "1": "blackboard_plan" + } + }, + "BlackboardPlan blackboard_plan 🔗\u0000{\"1\": \"BlackboardPlan\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1127, + "tpl": "BlackboardPlan blackboard_plan 🔗", + "markers": { + "1": "BlackboardPlan", + "2": "🔗" + } + }, + "BTParallel\u0000{}": { + "uid": 1128, + "tpl": "BTParallel", + "markers": {} + }, + "BT composite that executes all of its child tasks simultaneously.\u0000{}": { + "uid": 1129, + "tpl": "BT composite that executes all of its child tasks simultaneously.", + "markers": {} + }, + "BTParallel executes all of its child tasks simultaneously. Note that BTParallel doesn’t involve multithreading. It processes each task sequentially, from first to last, in the same tick before returning a result. If one of the abort criterea is met, any tasks currently <1/> will be terminated, and the result will be either <2/> or <3/>. The num_failures_required determines when BTParallel fails and num_successes_required when it succeeds. When both are fullfilled, it gives priority to num_failures_required.\u0000{\"1\": \"RUNNING\", \"2\": \"FAILURE\", \"3\": \"SUCCESS\", \"4\": \"num_failures_required\", \"5\": \"num_successes_required\", \"6\": \"num_failures_required\"}": { + "uid": 1130, + "tpl": "BTParallel executes all of its child tasks simultaneously. Note that BTParallel doesn’t involve multithreading. It processes each task sequentially, from first to last, in the same tick before returning a result. If one of the abort criterea is met, any tasks currently <1/> will be terminated, and the result will be either <2/> or <3/>. The num_failures_required determines when BTParallel fails and num_successes_required when it succeeds. When both are fullfilled, it gives priority to num_failures_required.", + "markers": { + "1": "RUNNING", + "2": "FAILURE", + "3": "SUCCESS", + "4": "num_failures_required", + "5": "num_successes_required", + "6": "num_failures_required" + } + }, + "If set to repeat, all child tasks will be re-executed each tick, regardless of whether they previously resulted in <2/> or <3/>.\u0000{\"1\": \"repeat\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\"}": { + "uid": 1131, + "tpl": "If set to repeat, all child tasks will be re-executed each tick, regardless of whether they previously resulted in <2/> or <3/>.", + "markers": { + "1": "repeat", + "2": "SUCCESS", + "3": "FAILURE" + } + }, + "Returns <1/> when the required number of child tasks result in <2/>. When repeat is set to <4/>, if none of the criteria were met and all child tasks resulted in either <5/> or <6/>, BTParallel will return <7/>.\u0000{\"1\": \"FAILURE\", \"2\": \"FAILURE\", \"3\": \"repeat\", \"4\": \"false\", \"5\": \"SUCCESS\", \"6\": \"FAILURE\", \"7\": \"FAILURE\"}": { + "uid": 1132, + "tpl": "Returns <1/> when the required number of child tasks result in <2/>. When repeat is set to <4/>, if none of the criteria were met and all child tasks resulted in either <5/> or <6/>, BTParallel will return <7/>.", + "markers": { + "1": "FAILURE", + "2": "FAILURE", + "3": "repeat", + "4": "false", + "5": "SUCCESS", + "6": "FAILURE", + "7": "FAILURE" + } + }, + "Returns <1/> when the required number of child tasks result in <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 1133, + "tpl": "Returns <1/> when the required number of child tasks result in <2/>.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "Returns <1/> if none of the criterea were fulfilled, and either repeat is set to <3/> or a child task resulted in <4/>.\u0000{\"1\": \"RUNNING\", \"2\": \"repeat\", \"3\": \"true\", \"4\": \"RUNNING\"}": { + "uid": 1134, + "tpl": "Returns <1/> if none of the criterea were fulfilled, and either repeat is set to <3/> or a child task resulted in <4/>.", + "markers": { + "1": "RUNNING", + "2": "repeat", + "3": "true", + "4": "RUNNING" + } + }, + "num_failures_required\u0000{\"1\": \"num_failures_required\"}": { + "uid": 1135, + "tpl": "num_failures_required", + "markers": { + "1": "num_failures_required" + } + }, + "num_successes_required\u0000{\"1\": \"num_successes_required\"}": { + "uid": 1136, + "tpl": "num_successes_required", + "markers": { + "1": "num_successes_required" + } + }, + "repeat\u0000{\"1\": \"repeat\"}": { + "uid": 1137, + "tpl": "repeat", + "markers": { + "1": "repeat" + } + }, + "<1/> num_failures_required = <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"1\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1138, + "tpl": "<1/> num_failures_required = <2/> 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + "<1/> set_num_failures_required(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"int\"}": { + "uid": 1139, + "tpl": "<1/> set_num_failures_required(value: <2/>)", + "markers": { + "1": "void", + "2": "int" + } + }, + "<1/> get_num_failures_required()\u0000{\"1\": \"int\"}": { + "uid": 1140, + "tpl": "<1/> get_num_failures_required()", + "markers": { + "1": "int" + } + }, + "If the specified number of child tasks return <1/>, BTParallel will also return <2/>.\u0000{\"1\": \"FAILURE\", \"2\": \"FAILURE\"}": { + "uid": 1141, + "tpl": "If the specified number of child tasks return <1/>, BTParallel will also return <2/>.", + "markers": { + "1": "FAILURE", + "2": "FAILURE" + } + }, + "<1/> num_successes_required = <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"1\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1142, + "tpl": "<1/> num_successes_required = <2/> 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + "<1/> set_num_successes_required(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"int\"}": { + "uid": 1143, + "tpl": "<1/> set_num_successes_required(value: <2/>)", + "markers": { + "1": "void", + "2": "int" + } + }, + "<1/> get_num_successes_required()\u0000{\"1\": \"int\"}": { + "uid": 1144, + "tpl": "<1/> get_num_successes_required()", + "markers": { + "1": "int" + } + }, + "If the specified number of child tasks return <1/>, BTParallel will also return <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 1145, + "tpl": "If the specified number of child tasks return <1/>, BTParallel will also return <2/>.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "<1/> repeat = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1146, + "tpl": "<1/> repeat = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_repeat(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 1147, + "tpl": "<1/> set_repeat(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_repeat()\u0000{\"1\": \"bool\"}": { + "uid": 1148, + "tpl": "<1/> get_repeat()", + "markers": { + "1": "bool" + } + }, + "When <1/>, the child tasks will be executed again, regardless of whether they previously resulted in a <2/> or <3/>.\u0000{\"1\": \"true\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\"}": { + "uid": 1149, + "tpl": "When <1/>, the child tasks will be executed again, regardless of whether they previously resulted in a <2/> or <3/>.", + "markers": { + "1": "true", + "2": "SUCCESS", + "3": "FAILURE" + } + }, + "When <1/>, if none of the criteria were met, and all child tasks resulted in a <2/> or <3/>, BTParallel will return <4/>.\u0000{\"1\": \"false\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\", \"4\": \"FAILURE\"}": { + "uid": 1150, + "tpl": "When <1/>, if none of the criteria were met, and all child tasks resulted in a <2/> or <3/>, BTParallel will return <4/>.", + "markers": { + "1": "false", + "2": "SUCCESS", + "3": "FAILURE", + "4": "FAILURE" + } + }, + "BTPauseAnimation\u0000{}": { + "uid": 1151, + "tpl": "BTPauseAnimation", + "markers": {} + }, + "BT action that pauses the playback of an animation on the specified <1/> node.\u0000{\"1\": \"AnimationPlayer\"}": { + "uid": 1152, + "tpl": "BT action that pauses the playback of an animation on the specified <1/> node.", + "markers": { + "1": "AnimationPlayer" + } + }, + "BTPauseAnimation action pauses the playback of an animation on the specified <1/> node and returns <2/>.\u0000{\"1\": \"AnimationPlayer\", \"2\": \"SUCCESS\"}": { + "uid": 1153, + "tpl": "BTPauseAnimation action pauses the playback of an animation on the specified <1/> node and returns <2/>.", + "markers": { + "1": "AnimationPlayer", + "2": "SUCCESS" + } + }, + "Returns <1/> if the action fails to get the <2/> node.\u0000{\"1\": \"FAILURE\", \"2\": \"AnimationPlayer\"}": { + "uid": 1154, + "tpl": "Returns <1/> if the action fails to get the <2/> node.", + "markers": { + "1": "FAILURE", + "2": "AnimationPlayer" + } + }, + "animation_player\u0000{\"1\": \"animation_player\"}": { + "uid": 1155, + "tpl": "animation_player", + "markers": { + "1": "animation_player" + } + }, + "BBNode animation_player 🔗\u0000{\"1\": \"BBNode\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1156, + "tpl": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + "BTPlayAnimation\u0000{}": { + "uid": 1157, + "tpl": "BTPlayAnimation", + "markers": {} + }, + "BT action that plays an animation on the specified <1/> node.\u0000{\"1\": \"AnimationPlayer\"}": { + "uid": 1158, + "tpl": "BT action that plays an animation on the specified <1/> node.", + "markers": { + "1": "AnimationPlayer" + } + }, + "BTPlayAnimation action plays an animation on the specified <1/> node. If the await_completion is greater than <3/>, the action will wait for the animation to complete, with the maximum waiting time equal to await_completion.\u0000{\"1\": \"AnimationPlayer\", \"2\": \"await_completion\", \"3\": \"0\", \"4\": \"await_completion\"}": { + "uid": 1159, + "tpl": "BTPlayAnimation action plays an animation on the specified <1/> node. If the await_completion is greater than <3/>, the action will wait for the animation to complete, with the maximum waiting time equal to await_completion.", + "markers": { + "1": "AnimationPlayer", + "2": "await_completion", + "3": "0", + "4": "await_completion" + } + }, + "Returns <1/> if the animation finishes playing or if the elapsed time exceeds await_completion. When await_completion is set to <4/>, BTPlayAnimation doesn’t wait for the animation to finish and immediately returns <5/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"await_completion\", \"3\": \"await_completion\", \"4\": \"0\", \"5\": \"SUCCESS\"}": { + "uid": 1160, + "tpl": "Returns <1/> if the animation finishes playing or if the elapsed time exceeds await_completion. When await_completion is set to <4/>, BTPlayAnimation doesn’t wait for the animation to finish and immediately returns <5/>.", + "markers": { + "1": "SUCCESS", + "2": "await_completion", + "3": "await_completion", + "4": "0", + "5": "SUCCESS" + } + }, + "Returns <1/> if the animation is still playing and the elapsed time is less than await_completion.\u0000{\"1\": \"RUNNING\", \"2\": \"await_completion\"}": { + "uid": 1161, + "tpl": "Returns <1/> if the animation is still playing and the elapsed time is less than await_completion.", + "markers": { + "1": "RUNNING", + "2": "await_completion" + } + }, + "Returns <1/> if the action fails to play the requested animation.\u0000{\"1\": \"FAILURE\"}": { + "uid": 1162, + "tpl": "Returns <1/> if the action fails to play the requested animation.", + "markers": { + "1": "FAILURE" + } + }, + "animation_name\u0000{\"1\": \"animation_name\"}": { + "uid": 1163, + "tpl": "animation_name", + "markers": { + "1": "animation_name" + } + }, + "animation_player\u0000{\"1\": \"animation_player\"}": { + "uid": 1164, + "tpl": "animation_player", + "markers": { + "1": "animation_player" + } + }, + "await_completion\u0000{\"1\": \"await_completion\"}": { + "uid": 1165, + "tpl": "await_completion", + "markers": { + "1": "await_completion" + } + }, + "blend\u0000{\"1\": \"blend\"}": { + "uid": 1166, + "tpl": "blend", + "markers": { + "1": "blend" + } + }, + "from_end\u0000{\"1\": \"from_end\"}": { + "uid": 1167, + "tpl": "from_end", + "markers": { + "1": "from_end" + } + }, + "speed\u0000{\"1\": \"speed\"}": { + "uid": 1168, + "tpl": "speed", + "markers": { + "1": "speed" + } + }, + "<1/> animation_name = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1169, + "tpl": "<1/> animation_name = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "Animation’s key within the <1/> node. If empty, BTPlayAnimation will resume the last played animation if the <2/> was previously paused.\u0000{\"1\": \"AnimationPlayer\", \"2\": \"AnimationPlayer\"}": { + "uid": 1170, + "tpl": "Animation’s key within the <1/> node. If empty, BTPlayAnimation will resume the last played animation if the <2/> was previously paused.", + "markers": { + "1": "AnimationPlayer", + "2": "AnimationPlayer" + } + }, + "BBNode animation_player 🔗\u0000{\"1\": \"BBNode\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1171, + "tpl": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + "<1/> await_completion = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"0.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1172, + "tpl": "<1/> await_completion = <2/> 🔗", + "markers": { + "1": "float", + "2": "0.0", + "3": "🔗" + } + }, + "<1/> set_await_completion(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1173, + "tpl": "<1/> set_await_completion(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_await_completion()\u0000{\"1\": \"float\"}": { + "uid": 1174, + "tpl": "<1/> get_await_completion()", + "markers": { + "1": "float" + } + }, + "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTPlayAnimation will stop waiting and return <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1175, + "tpl": "The maximum duration to wait for the animation to complete (in seconds). If the animation doesn’t finish within this time, BTPlayAnimation will stop waiting and return <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "<1/> blend = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"-1.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1176, + "tpl": "<1/> blend = <2/> 🔗", + "markers": { + "1": "float", + "2": "-1.0", + "3": "🔗" + } + }, + "<1/> set_blend(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1177, + "tpl": "<1/> set_blend(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_blend()\u0000{\"1\": \"float\"}": { + "uid": 1178, + "tpl": "<1/> get_blend()", + "markers": { + "1": "float" + } + }, + "Custom blend time (in seconds). See AnimationPlayer.play.\u0000{}": { + "uid": 1179, + "tpl": "Custom blend time (in seconds). See AnimationPlayer.play.", + "markers": {} + }, + "<1/> from_end = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1180, + "tpl": "<1/> from_end = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_from_end(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 1181, + "tpl": "<1/> set_from_end(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_from_end()\u0000{\"1\": \"bool\"}": { + "uid": 1182, + "tpl": "<1/> get_from_end()", + "markers": { + "1": "bool" + } + }, + "Play animation from the end. Used in combination with negative speed to play animation in reverse. See AnimationPlayer.play.\u0000{\"1\": \"speed\"}": { + "uid": 1183, + "tpl": "Play animation from the end. Used in combination with negative speed to play animation in reverse. See AnimationPlayer.play.", + "markers": { + "1": "speed" + } + }, + "<1/> speed = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"1.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1184, + "tpl": "<1/> speed = <2/> 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + "<1/> set_speed(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1185, + "tpl": "<1/> set_speed(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_speed()\u0000{\"1\": \"float\"}": { + "uid": 1186, + "tpl": "<1/> get_speed()", + "markers": { + "1": "float" + } + }, + "Custom playback speed scaling ratio. See AnimationPlayer.play.\u0000{}": { + "uid": 1187, + "tpl": "Custom playback speed scaling ratio. See AnimationPlayer.play.", + "markers": {} + }, + "BTProbability\u0000{}": { + "uid": 1188, + "tpl": "BTProbability", + "markers": {} + }, + "BT decorator that executes its child task with a given probability.\u0000{}": { + "uid": 1189, + "tpl": "BT decorator that executes its child task with a given probability.", + "markers": {} + }, + "BTProbability executes its child task with a given probability defined by run_chance.\u0000{\"1\": \"run_chance\"}": { + "uid": 1190, + "tpl": "BTProbability executes its child task with a given probability defined by run_chance.", + "markers": { + "1": "run_chance" + } + }, + "Returns the result of the child task if it was executed; otherwise, it returns <1/>.\u0000{\"1\": \"FAILURE\"}": { + "uid": 1191, + "tpl": "Returns the result of the child task if it was executed; otherwise, it returns <1/>.", + "markers": { + "1": "FAILURE" + } + }, + "run_chance\u0000{\"1\": \"run_chance\"}": { + "uid": 1192, + "tpl": "run_chance", + "markers": { + "1": "run_chance" + } + }, + "<1/> run_chance = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"0.5\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1193, + "tpl": "<1/> run_chance = <2/> 🔗", + "markers": { + "1": "float", + "2": "0.5", + "3": "🔗" + } + }, + "<1/> set_run_chance(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1194, + "tpl": "<1/> set_run_chance(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_run_chance()\u0000{\"1\": \"float\"}": { + "uid": 1195, + "tpl": "<1/> get_run_chance()", + "markers": { + "1": "float" + } + }, + "Probability that defines how likely the child task will be executed.\u0000{}": { + "uid": 1196, + "tpl": "Probability that defines how likely the child task will be executed.", + "markers": {} + }, + "BTProbabilitySelector\u0000{}": { + "uid": 1197, + "tpl": "BTProbabilitySelector", + "markers": {} + }, + "BT composite that chooses a child task to execute based on attached probabilities.\u0000{}": { + "uid": 1198, + "tpl": "BT composite that chooses a child task to execute based on attached probabilities.", + "markers": {} + }, + "BTProbabilitySelector chooses a child task to execute based on attached probabilities. It is typically used for decision-making purposes. Probability distribution is calculated based on weights assigned to each child task.\u0000{}": { + "uid": 1199, + "tpl": "BTProbabilitySelector chooses a child task to execute based on attached probabilities. It is typically used for decision-making purposes. Probability distribution is calculated based on weights assigned to each child task.", + "markers": {} + }, + "Returns <1/> when a child task results in <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 1200, + "tpl": "Returns <1/> when a child task results in <2/>.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "Returns <1/> when a child task results in <2/>.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\"}": { + "uid": 1201, + "tpl": "Returns <1/> when a child task results in <2/>.", + "markers": { + "1": "RUNNING", + "2": "RUNNING" + } + }, + "The behavior of BTProbabilitySelector when a child task results in <1/> depends on the abort_on_failure value:\u0000{\"1\": \"FAILURE\", \"2\": \"abort_on_failure\"}": { + "uid": 1202, + "tpl": "The behavior of BTProbabilitySelector when a child task results in <1/> depends on the abort_on_failure value:", + "markers": { + "1": "FAILURE", + "2": "abort_on_failure" + } + }, + "If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will normalize the probability distribution over the remaining children and choose a new child task to be executed. If all child tasks fail, the composite will return <4/>.\u0000{\"1\": \"abort_on_failure\", \"2\": \"false\", \"3\": \"FAILURE\", \"4\": \"FAILURE\"}": { + "uid": 1203, + "tpl": "If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will normalize the probability distribution over the remaining children and choose a new child task to be executed. If all child tasks fail, the composite will return <4/>.", + "markers": { + "1": "abort_on_failure", + "2": "false", + "3": "FAILURE", + "4": "FAILURE" + } + }, + "If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will not choose another child task to be executed and will immediately return <4/>.\u0000{\"1\": \"abort_on_failure\", \"2\": \"true\", \"3\": \"FAILURE\", \"4\": \"FAILURE\"}": { + "uid": 1204, + "tpl": "If abort_on_failure is <2/>, when a child task results in <3/>, BTProbabilitySelector will not choose another child task to be executed and will immediately return <4/>.", + "markers": { + "1": "abort_on_failure", + "2": "true", + "3": "FAILURE", + "4": "FAILURE" + } + }, + "abort_on_failure\u0000{\"1\": \"abort_on_failure\"}": { + "uid": 1205, + "tpl": "abort_on_failure", + "markers": { + "1": "abort_on_failure" + } + }, + "get_probability(child_idx: <2/>) <3/>\u0000{\"1\": \"get_probability\", \"2\": \"int\", \"3\": \"const\"}": { + "uid": 1206, + "tpl": "get_probability(child_idx: <2/>) <3/>", + "markers": { + "1": "get_probability", + "2": "int", + "3": "const" + } + }, + "get_total_weight() <2/>\u0000{\"1\": \"get_total_weight\", \"2\": \"const\"}": { + "uid": 1207, + "tpl": "get_total_weight() <2/>", + "markers": { + "1": "get_total_weight", + "2": "const" + } + }, + "get_weight(child_idx: <2/>) <3/>\u0000{\"1\": \"get_weight\", \"2\": \"int\", \"3\": \"const\"}": { + "uid": 1208, + "tpl": "get_weight(child_idx: <2/>) <3/>", + "markers": { + "1": "get_weight", + "2": "int", + "3": "const" + } + }, + "has_probability(child_idx: <2/>) <3/>\u0000{\"1\": \"has_probability\", \"2\": \"int\", \"3\": \"const\"}": { + "uid": 1209, + "tpl": "has_probability(child_idx: <2/>) <3/>", + "markers": { + "1": "has_probability", + "2": "int", + "3": "const" + } + }, + "set_probability(child_idx: <2/>, probability: <3/>)\u0000{\"1\": \"set_probability\", \"2\": \"int\", \"3\": \"float\"}": { + "uid": 1210, + "tpl": "set_probability(child_idx: <2/>, probability: <3/>)", + "markers": { + "1": "set_probability", + "2": "int", + "3": "float" + } + }, + "set_weight(child_idx: <2/>, weight: <3/>)\u0000{\"1\": \"set_weight\", \"2\": \"int\", \"3\": \"float\"}": { + "uid": 1211, + "tpl": "set_weight(child_idx: <2/>, weight: <3/>)", + "markers": { + "1": "set_weight", + "2": "int", + "3": "float" + } + }, + "<1/> abort_on_failure = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1212, + "tpl": "<1/> abort_on_failure = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_abort_on_failure(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 1213, + "tpl": "<1/> set_abort_on_failure(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_abort_on_failure()\u0000{\"1\": \"bool\"}": { + "uid": 1214, + "tpl": "<1/> get_abort_on_failure()", + "markers": { + "1": "bool" + } + }, + "If <1/>, BTProbabilitySelector will not choose another child to execute and will return <2/> when a child task results in <3/>.\u0000{\"1\": \"true\", \"2\": \"FAILURE\", \"3\": \"FAILURE\"}": { + "uid": 1215, + "tpl": "If <1/>, BTProbabilitySelector will not choose another child to execute and will return <2/> when a child task results in <3/>.", + "markers": { + "1": "true", + "2": "FAILURE", + "3": "FAILURE" + } + }, + "<1/> get_probability(child_idx: <2/>) <3/> 🔗\u0000{\"1\": \"float\", \"2\": \"int\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1216, + "tpl": "<1/> get_probability(child_idx: <2/>) <3/> 🔗", + "markers": { + "1": "float", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + "Returns the child task’s selection probability.\u0000{}": { + "uid": 1217, + "tpl": "Returns the child task’s selection probability.", + "markers": {} + }, + "<1/> get_total_weight() <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"const\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1218, + "tpl": "<1/> get_total_weight() <2/> 🔗", + "markers": { + "1": "float", + "2": "const", + "3": "🔗" + } + }, + "Returns the total weight of all child tasks.\u0000{}": { + "uid": 1219, + "tpl": "Returns the total weight of all child tasks.", + "markers": {} + }, + "<1/> get_weight(child_idx: <2/>) <3/> 🔗\u0000{\"1\": \"float\", \"2\": \"int\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1220, + "tpl": "<1/> get_weight(child_idx: <2/>) <3/> 🔗", + "markers": { + "1": "float", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + "Returns the child task’s weight within the weighted probability selection algorithm.\u0000{}": { + "uid": 1221, + "tpl": "Returns the child task’s weight within the weighted probability selection algorithm.", + "markers": {} + }, + "<1/> has_probability(child_idx: <2/>) <3/> 🔗\u0000{\"1\": \"bool\", \"2\": \"int\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1222, + "tpl": "<1/> has_probability(child_idx: <2/>) <3/> 🔗", + "markers": { + "1": "bool", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + "Returns whether the child task at index <1/> participates within the weighted probability selection algorithm and has a probability assigned to it. Returns <2/> for BTComment tasks.\u0000{\"1\": \"child_idx\", \"2\": \"false\", \"3\": \"BTComment\"}": { + "uid": 1223, + "tpl": "Returns whether the child task at index <1/> participates within the weighted probability selection algorithm and has a probability assigned to it. Returns <2/> for BTComment tasks.", + "markers": { + "1": "child_idx", + "2": "false", + "3": "BTComment" + } + }, + "<1/> set_probability(child_idx: <2/>, probability: <3/>) 🔗\u0000{\"1\": \"void\", \"2\": \"int\", \"3\": \"float\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1224, + "tpl": "<1/> set_probability(child_idx: <2/>, probability: <3/>) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "float", + "4": "🔗" + } + }, + "Sets the child task’s weight calculated based on the desired probability.\u0000{}": { + "uid": 1225, + "tpl": "Sets the child task’s weight calculated based on the desired probability.", + "markers": {} + }, + "<1/> set_weight(child_idx: <2/>, weight: <3/>) 🔗\u0000{\"1\": \"void\", \"2\": \"int\", \"3\": \"float\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1226, + "tpl": "<1/> set_weight(child_idx: <2/>, weight: <3/>) 🔗", + "markers": { + "1": "void", + "2": "int", + "3": "float", + "4": "🔗" + } + }, + "Sets the child task’s weight for the weighted probability selection algorithm.\u0000{}": { + "uid": 1227, + "tpl": "Sets the child task’s weight for the weighted probability selection algorithm.", + "markers": {} + }, + "BTRandomSelector\u0000{}": { + "uid": 1228, + "tpl": "BTRandomSelector", + "markers": {} + }, + "BT composite that executes tasks in random order until first <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1229, + "tpl": "BT composite that executes tasks in random order until first <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTRandomSelector executes its child tasks in a random order until any child returns <1/>. If a child task results in <2/>, BTRandomSelector will immediately execute another child task until one of them returns <3/> or all of them result in <4/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\", \"3\": \"SUCCESS\", \"4\": \"FAILURE\"}": { + "uid": 1230, + "tpl": "BTRandomSelector executes its child tasks in a random order until any child returns <1/>. If a child task results in <2/>, BTRandomSelector will immediately execute another child task until one of them returns <3/> or all of them result in <4/>.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "SUCCESS", + "4": "FAILURE" + } + }, + "Returns <1/> if a child task results in <2/>. BTRandomSelector will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"RUNNING\"}": { + "uid": 1231, + "tpl": "Returns <1/> if a child task results in <2/>. BTRandomSelector will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + "BTRandomSequence\u0000{}": { + "uid": 1232, + "tpl": "BTRandomSequence", + "markers": {} + }, + "BT composite that executes tasks in random order as long as they return <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1233, + "tpl": "BT composite that executes tasks in random order as long as they return <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTRandomSequence executes its child tasks in a random order as long as they return <1/>. If a child task results in <2/>, BTRandomSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\", \"4\": \"SUCCESS\"}": { + "uid": 1234, + "tpl": "BTRandomSequence executes its child tasks in a random order as long as they return <1/>. If a child task results in <2/>, BTRandomSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS", + "3": "FAILURE", + "4": "SUCCESS" + } + }, + "Returns <1/> if a child task results in <2/>. BTRandomSequence will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"RUNNING\"}": { + "uid": 1235, + "tpl": "Returns <1/> if a child task results in <2/>. BTRandomSequence will remember the execution order and the last child task that returned <3/>, ensuring it resumes from that point in the next tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + "BTRandomWait\u0000{}": { + "uid": 1236, + "tpl": "BTRandomWait", + "markers": {} + }, + "BT action that waits for a randomized duration to elapse and then returns <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1237, + "tpl": "BT action that waits for a randomized duration to elapse and then returns <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTRandomWait action waits for a randomized duration to elapse and then returns <1/>. The duration is randomized within the specified range, defined by min_duration and max_duration.\u0000{\"1\": \"SUCCESS\", \"2\": \"min_duration\", \"3\": \"max_duration\"}": { + "uid": 1238, + "tpl": "BTRandomWait action waits for a randomized duration to elapse and then returns <1/>. The duration is randomized within the specified range, defined by min_duration and max_duration.", + "markers": { + "1": "SUCCESS", + "2": "min_duration", + "3": "max_duration" + } + }, + "max_duration\u0000{\"1\": \"max_duration\"}": { + "uid": 1239, + "tpl": "max_duration", + "markers": { + "1": "max_duration" + } + }, + "min_duration\u0000{\"1\": \"min_duration\"}": { + "uid": 1240, + "tpl": "min_duration", + "markers": { + "1": "min_duration" + } + }, + "<1/> max_duration = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"2.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1241, + "tpl": "<1/> max_duration = <2/> 🔗", + "markers": { + "1": "float", + "2": "2.0", + "3": "🔗" + } + }, + "<1/> set_max_duration(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1242, + "tpl": "<1/> set_max_duration(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_max_duration()\u0000{\"1\": \"float\"}": { + "uid": 1243, + "tpl": "<1/> get_max_duration()", + "markers": { + "1": "float" + } + }, + "Maximum duration for the wait.\u0000{}": { + "uid": 1244, + "tpl": "Maximum duration for the wait.", + "markers": {} + }, + "<1/> min_duration = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"1.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1245, + "tpl": "<1/> min_duration = <2/> 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + "<1/> set_min_duration(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1246, + "tpl": "<1/> set_min_duration(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_min_duration()\u0000{\"1\": \"float\"}": { + "uid": 1247, + "tpl": "<1/> get_min_duration()", + "markers": { + "1": "float" + } + }, + "Minimum duration for the wait.\u0000{}": { + "uid": 1248, + "tpl": "Minimum duration for the wait.", + "markers": {} + }, + "BTRepeat\u0000{}": { + "uid": 1249, + "tpl": "BTRepeat", + "markers": {} + }, + "BT decorator that repeats its child a specified number of times.\u0000{\"1\": \"times\"}": { + "uid": 1250, + "tpl": "BT decorator that repeats its child a specified number of times.", + "markers": { + "1": "times" + } + }, + "BTRepeat iterates its child task a specified number of times, as defined by times. If forever is <3/>, the child’s execution will be repeated indefinitely.\u0000{\"1\": \"times\", \"2\": \"forever\", \"3\": \"true\"}": { + "uid": 1251, + "tpl": "BTRepeat iterates its child task a specified number of times, as defined by times. If forever is <3/>, the child’s execution will be repeated indefinitely.", + "markers": { + "1": "times", + "2": "forever", + "3": "true" + } + }, + "Returns <1/> if the child task results in <2/>. If forever is <4/>, BTRepeat will always return <5/>.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"forever\", \"4\": \"true\", \"5\": \"RUNNING\"}": { + "uid": 1252, + "tpl": "Returns <1/> if the child task results in <2/>. If forever is <4/>, BTRepeat will always return <5/>.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "forever", + "4": "true", + "5": "RUNNING" + } + }, + "Returns <1/> if the specified number of successful executions is reached. If abort_on_failure is <3/>, a <4/> status returned by the child is also considered a successful execution.\u0000{\"1\": \"SUCCESS\", \"2\": \"abort_on_failure\", \"3\": \"false\", \"4\": \"FAILURE\"}": { + "uid": 1253, + "tpl": "Returns <1/> if the specified number of successful executions is reached. If abort_on_failure is <3/>, a <4/> status returned by the child is also considered a successful execution.", + "markers": { + "1": "SUCCESS", + "2": "abort_on_failure", + "3": "false", + "4": "FAILURE" + } + }, + "Returns <1/> if the child task results in <2/> when abort_on_failure is <4/>.\u0000{\"1\": \"FAILURE\", \"2\": \"FAILURE\", \"3\": \"abort_on_failure\", \"4\": \"true\"}": { + "uid": 1254, + "tpl": "Returns <1/> if the child task results in <2/> when abort_on_failure is <4/>.", + "markers": { + "1": "FAILURE", + "2": "FAILURE", + "3": "abort_on_failure", + "4": "true" + } + }, + "abort_on_failure\u0000{\"1\": \"abort_on_failure\"}": { + "uid": 1255, + "tpl": "abort_on_failure", + "markers": { + "1": "abort_on_failure" + } + }, + "forever\u0000{\"1\": \"forever\"}": { + "uid": 1256, + "tpl": "forever", + "markers": { + "1": "forever" + } + }, + "times\u0000{\"1\": \"times\"}": { + "uid": 1257, + "tpl": "times", + "markers": { + "1": "times" + } + }, + "<1/> abort_on_failure = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1258, + "tpl": "<1/> abort_on_failure = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "If <1/>, <2/> status returned by the child task is also considered as a successful execution.\u0000{\"1\": \"false\", \"2\": \"FAILURE\"}": { + "uid": 1259, + "tpl": "If <1/>, <2/> status returned by the child task is also considered as a successful execution.", + "markers": { + "1": "false", + "2": "FAILURE" + } + }, + "<1/> forever = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1260, + "tpl": "<1/> forever = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_forever(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 1261, + "tpl": "<1/> set_forever(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_forever()\u0000{\"1\": \"bool\"}": { + "uid": 1262, + "tpl": "<1/> get_forever()", + "markers": { + "1": "bool" + } + }, + "If <1/>, the child’s execution will be repeated indefinitely, always returning <2/>.\u0000{\"1\": \"true\", \"2\": \"RUNNING\"}": { + "uid": 1263, + "tpl": "If <1/>, the child’s execution will be repeated indefinitely, always returning <2/>.", + "markers": { + "1": "true", + "2": "RUNNING" + } + }, + "<1/> times = <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"1\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1264, + "tpl": "<1/> times = <2/> 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + "<1/> set_times(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"int\"}": { + "uid": 1265, + "tpl": "<1/> set_times(value: <2/>)", + "markers": { + "1": "void", + "2": "int" + } + }, + "<1/> get_times()\u0000{\"1\": \"int\"}": { + "uid": 1266, + "tpl": "<1/> get_times()", + "markers": { + "1": "int" + } + }, + "The number of times to repeat execution of the child task.\u0000{}": { + "uid": 1267, + "tpl": "The number of times to repeat execution of the child task.", + "markers": {} + }, + "BTRepeatUntilFailure\u0000{}": { + "uid": 1268, + "tpl": "BTRepeatUntilFailure", + "markers": {} + }, + "BT decorator that repeats its child task until <1/>.\u0000{\"1\": \"FAILURE\"}": { + "uid": 1269, + "tpl": "BT decorator that repeats its child task until <1/>.", + "markers": { + "1": "FAILURE" + } + }, + "BTRepeatUntilFailure repeats its child task until it results in <1/>.\u0000{\"1\": \"FAILURE\"}": { + "uid": 1270, + "tpl": "BTRepeatUntilFailure repeats its child task until it results in <1/>.", + "markers": { + "1": "FAILURE" + } + }, + "Returns <1/> if the child task results in <2/> or <3/>.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"SUCCESS\"}": { + "uid": 1271, + "tpl": "Returns <1/> if the child task results in <2/> or <3/>.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "SUCCESS" + } + }, + "Returns <1/> if the child task results in <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\"}": { + "uid": 1272, + "tpl": "Returns <1/> if the child task results in <2/>.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE" + } + }, + "BTRepeatUntilSuccess\u0000{}": { + "uid": 1273, + "tpl": "BTRepeatUntilSuccess", + "markers": {} + }, + "BT decorator that repeats its child task until <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1274, + "tpl": "BT decorator that repeats its child task until <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTRepeatUntilSuccess repeats its child task until it results in <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1275, + "tpl": "BTRepeatUntilSuccess repeats its child task until it results in <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "Returns <1/> if the child task results in <2/> or <3/>.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"FAILURE\"}": { + "uid": 1276, + "tpl": "Returns <1/> if the child task results in <2/> or <3/>.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "FAILURE" + } + }, + "Returns <1/> if the child task results in <2/>.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\"}": { + "uid": 1277, + "tpl": "Returns <1/> if the child task results in <2/>.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS" + } + }, + "BTRunLimit\u0000{}": { + "uid": 1278, + "tpl": "BTRunLimit", + "markers": {} + }, + "BT decorator that restricts the execution of its child a limited number of times.\u0000{}": { + "uid": 1279, + "tpl": "BT decorator that restricts the execution of its child a limited number of times.", + "markers": {} + }, + "BTRunLimit restricts the execution of the child task to a maximum number of times, defined by run_limit.\u0000{\"1\": \"run_limit\"}": { + "uid": 1280, + "tpl": "BTRunLimit restricts the execution of the child task to a maximum number of times, defined by run_limit.", + "markers": { + "1": "run_limit" + } + }, + "Returns <1/> if the limit on executions is exceeded; otherwise, it returns the status of the child task.\u0000{\"1\": \"FAILURE\"}": { + "uid": 1281, + "tpl": "Returns <1/> if the limit on executions is exceeded; otherwise, it returns the status of the child task.", + "markers": { + "1": "FAILURE" + } + }, + "CountPolicy\u0000{\"1\": \"CountPolicy\"}": { + "uid": 1282, + "tpl": "CountPolicy", + "markers": { + "1": "CountPolicy" + } + }, + "count_policy\u0000{\"1\": \"count_policy\"}": { + "uid": 1283, + "tpl": "count_policy", + "markers": { + "1": "count_policy" + } + }, + "run_limit\u0000{\"1\": \"run_limit\"}": { + "uid": 1284, + "tpl": "run_limit", + "markers": { + "1": "run_limit" + } + }, + "enum CountPolicy: 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 1285, + "tpl": "enum CountPolicy: 🔗", + "markers": { + "1": "🔗" + } + }, + "CountPolicy COUNT_SUCCESSFUL = <2/>\u0000{\"1\": \"CountPolicy\", \"2\": \"0\"}": { + "uid": 1286, + "tpl": "CountPolicy COUNT_SUCCESSFUL = <2/>", + "markers": { + "1": "CountPolicy", + "2": "0" + } + }, + "Count only successful runs towards the limit.\u0000{}": { + "uid": 1287, + "tpl": "Count only successful runs towards the limit.", + "markers": {} + }, + "CountPolicy COUNT_FAILED = <2/>\u0000{\"1\": \"CountPolicy\", \"2\": \"1\"}": { + "uid": 1288, + "tpl": "CountPolicy COUNT_FAILED = <2/>", + "markers": { + "1": "CountPolicy", + "2": "1" + } + }, + "Count only failed runs towards the limit.\u0000{}": { + "uid": 1289, + "tpl": "Count only failed runs towards the limit.", + "markers": {} + }, + "CountPolicy COUNT_ALL = <2/>\u0000{\"1\": \"CountPolicy\", \"2\": \"2\"}": { + "uid": 1290, + "tpl": "CountPolicy COUNT_ALL = <2/>", + "markers": { + "1": "CountPolicy", + "2": "2" + } + }, + "Count successful and failed runs towards the limit.\u0000{}": { + "uid": 1291, + "tpl": "Count successful and failed runs towards the limit.", + "markers": {} + }, + "CountPolicy count_policy = <2/> 🔗\u0000{\"1\": \"CountPolicy\", \"2\": \"0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1292, + "tpl": "CountPolicy count_policy = <2/> 🔗", + "markers": { + "1": "CountPolicy", + "2": "0", + "3": "🔗" + } + }, + "<1/> set_count_policy(value: CountPolicy)\u0000{\"1\": \"void\", \"2\": \"CountPolicy\"}": { + "uid": 1293, + "tpl": "<1/> set_count_policy(value: CountPolicy)", + "markers": { + "1": "void", + "2": "CountPolicy" + } + }, + "CountPolicy get_count_policy()\u0000{\"1\": \"CountPolicy\"}": { + "uid": 1294, + "tpl": "CountPolicy get_count_policy()", + "markers": { + "1": "CountPolicy" + } + }, + "Which runs should be counted towards the limit: successful, failed, or all?\u0000{}": { + "uid": 1295, + "tpl": "Which runs should be counted towards the limit: successful, failed, or all?", + "markers": {} + }, + "<1/> run_limit = <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"1\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1296, + "tpl": "<1/> run_limit = <2/> 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + "<1/> set_run_limit(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"int\"}": { + "uid": 1297, + "tpl": "<1/> set_run_limit(value: <2/>)", + "markers": { + "1": "void", + "2": "int" + } + }, + "<1/> get_run_limit()\u0000{\"1\": \"int\"}": { + "uid": 1298, + "tpl": "<1/> get_run_limit()", + "markers": { + "1": "int" + } + }, + "The maximum number of times the child is permitted to be executed.\u0000{}": { + "uid": 1299, + "tpl": "The maximum number of times the child is permitted to be executed.", + "markers": {} + }, + "BTSelector\u0000{}": { + "uid": 1300, + "tpl": "BTSelector", + "markers": {} + }, + "BT composite that sequentially executes tasks until first <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1301, + "tpl": "BT composite that sequentially executes tasks until first <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. If a child task results in <2/>, BTSelector will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSelector and BTSequence are two of the most common building blocks of behavior trees. Essentially, while BTSequence is similar to a boolean AND operation, BTSelector is similar to a boolean OR operation. Selectors enable the behavior tree to respond to changes in the environment and trigger transitions between various fallback behaviors.\u0000{\"1\": \"SUCCESS\", \"2\": \"FAILURE\", \"3\": \"SUCCESS\", \"4\": \"FAILURE\", \"5\": \"BTSequence\", \"6\": \"BTSequence\"}": { + "uid": 1302, + "tpl": "BTSelector executes its child tasks sequentially, from first to last, until any child returns <1/>. If a child task results in <2/>, BTSelector will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSelector and BTSequence are two of the most common building blocks of behavior trees. Essentially, while BTSequence is similar to a boolean AND operation, BTSelector is similar to a boolean OR operation. Selectors enable the behavior tree to respond to changes in the environment and trigger transitions between various fallback behaviors.", + "markers": { + "1": "SUCCESS", + "2": "FAILURE", + "3": "SUCCESS", + "4": "FAILURE", + "5": "BTSequence", + "6": "BTSequence" + } + }, + "Returns <1/> if a child task results in <2/>. BTSelector will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"RUNNING\"}": { + "uid": 1303, + "tpl": "Returns <1/> if a child task results in <2/>. BTSelector will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + "BTSequence\u0000{}": { + "uid": 1304, + "tpl": "BTSequence", + "markers": {} + }, + "BT composite that sequentially executes tasks as long as they return <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1305, + "tpl": "BT composite that sequentially executes tasks as long as they return <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "BTSequence executes its child tasks sequentially, from first to last, as long as they return <1/>. If a child task results in <2/>, BTSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSequence and BTSelector are two of the most common building blocks of behavior trees. Essentially, while BTSelector is similar to a boolean OR operation, BTSequence is similar to a boolean AND operation. Sequences enable the behavior tree to compose complex behaviors from a chain of simpler tasks.\u0000{\"1\": \"SUCCESS\", \"2\": \"SUCCESS\", \"3\": \"FAILURE\", \"4\": \"SUCCESS\", \"5\": \"BTSelector\", \"6\": \"BTSelector\"}": { + "uid": 1306, + "tpl": "BTSequence executes its child tasks sequentially, from first to last, as long as they return <1/>. If a child task results in <2/>, BTSequence will immediately execute the next child task until one of them returns <3/> or all of them result in <4/>. BTSequence and BTSelector are two of the most common building blocks of behavior trees. Essentially, while BTSelector is similar to a boolean OR operation, BTSequence is similar to a boolean AND operation. Sequences enable the behavior tree to compose complex behaviors from a chain of simpler tasks.", + "markers": { + "1": "SUCCESS", + "2": "SUCCESS", + "3": "FAILURE", + "4": "SUCCESS", + "5": "BTSelector", + "6": "BTSelector" + } + }, + "Returns <1/> if any child task results in <2/>. BTSequence will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick.\u0000{\"1\": \"RUNNING\", \"2\": \"RUNNING\", \"3\": \"RUNNING\"}": { + "uid": 1307, + "tpl": "Returns <1/> if any child task results in <2/>. BTSequence will remember the last child task that returned <3/>, ensuring it resumes from that point in the next execution tick.", + "markers": { + "1": "RUNNING", + "2": "RUNNING", + "3": "RUNNING" + } + }, + "BTSetAgentProperty\u0000{}": { + "uid": 1308, + "tpl": "BTSetAgentProperty", + "markers": {} + }, + "BT action that assigns a value to the specified agent’s property.\u0000{}": { + "uid": 1309, + "tpl": "BT action that assigns a value to the specified agent’s property.", + "markers": {} + }, + "BTSetAgentProperty assigns the specified value to the agent’s property identified by the property and returns <3/>. Optionally, it can perform a specific operation before assignment.\u0000{\"1\": \"value\", \"2\": \"property\", \"3\": \"SUCCESS\", \"4\": \"operation\"}": { + "uid": 1310, + "tpl": "BTSetAgentProperty assigns the specified value to the agent’s property identified by the property and returns <3/>. Optionally, it can perform a specific operation before assignment.", + "markers": { + "1": "value", + "2": "property", + "3": "SUCCESS", + "4": "operation" + } + }, + "Returns <1/> if it fails to set the property.\u0000{\"1\": \"FAILURE\"}": { + "uid": 1311, + "tpl": "Returns <1/> if it fails to set the property.", + "markers": { + "1": "FAILURE" + } + }, + "Operation\u0000{\"1\": \"Operation\"}": { + "uid": 1312, + "tpl": "Operation", + "markers": { + "1": "Operation" + } + }, + "operation\u0000{\"1\": \"operation\"}": { + "uid": 1313, + "tpl": "operation", + "markers": { + "1": "operation" + } + }, + "property\u0000{\"1\": \"property\"}": { + "uid": 1314, + "tpl": "property", + "markers": { + "1": "property" + } + }, + "value\u0000{\"1\": \"value\"}": { + "uid": 1315, + "tpl": "value", + "markers": { + "1": "value" + } + }, + "Operation operation = <2/> 🔗\u0000{\"1\": \"Operation\", \"2\": \"0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1316, + "tpl": "Operation operation = <2/> 🔗", + "markers": { + "1": "Operation", + "2": "0", + "3": "🔗" + } + }, + "<1/> set_operation(value: Operation)\u0000{\"1\": \"void\", \"2\": \"Operation\"}": { + "uid": 1317, + "tpl": "<1/> set_operation(value: Operation)", + "markers": { + "1": "void", + "2": "Operation" + } + }, + "Operation get_operation()\u0000{\"1\": \"Operation\"}": { + "uid": 1318, + "tpl": "Operation get_operation()", + "markers": { + "1": "Operation" + } + }, + "Specifies the operation to be performed before assignment. Operation is executed as follows:\u0000{}": { + "uid": 1319, + "tpl": "Specifies the operation to be performed before assignment. Operation is executed as follows:", + "markers": {} + }, + "<1/> property = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1320, + "tpl": "<1/> property = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "Parameter that specifies the agent’s property name.\u0000{}": { + "uid": 1321, + "tpl": "Parameter that specifies the agent’s property name.", + "markers": {} + }, + "BBVariant value 🔗\u0000{\"1\": \"BBVariant\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1322, + "tpl": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + "Parameter that specifies the value that will be assigned to agent’s property.\u0000{}": { + "uid": 1323, + "tpl": "Parameter that specifies the value that will be assigned to agent’s property.", + "markers": {} + }, + "BTSetVar\u0000{}": { + "uid": 1324, + "tpl": "BTSetVar", + "markers": {} + }, + "BT action that assigns value to the variable and then returns <3/>.\u0000{\"1\": \"value\", \"2\": \"variable\", \"3\": \"SUCCESS\"}": { + "uid": 1325, + "tpl": "BT action that assigns value to the variable and then returns <3/>.", + "markers": { + "1": "value", + "2": "variable", + "3": "SUCCESS" + } + }, + "BTSetVar assigns value to the variable and then returns <3/>. Optionally, it can perform a specific operation before assignment.\u0000{\"1\": \"value\", \"2\": \"variable\", \"3\": \"SUCCESS\", \"4\": \"operation\"}": { + "uid": 1326, + "tpl": "BTSetVar assigns value to the variable and then returns <3/>. Optionally, it can perform a specific operation before assignment.", + "markers": { + "1": "value", + "2": "variable", + "3": "SUCCESS", + "4": "operation" + } + }, + "Returns <1/> if it fails to set the variable.\u0000{\"1\": \"FAILURE\", \"2\": \"variable\"}": { + "uid": 1327, + "tpl": "Returns <1/> if it fails to set the variable.", + "markers": { + "1": "FAILURE", + "2": "variable" + } + }, + "operation\u0000{\"1\": \"operation\"}": { + "uid": 1328, + "tpl": "operation", + "markers": { + "1": "operation" + } + }, + "value\u0000{\"1\": \"value\"}": { + "uid": 1329, + "tpl": "value", + "markers": { + "1": "value" + } + }, + "variable\u0000{\"1\": \"variable\"}": { + "uid": 1330, + "tpl": "variable", + "markers": { + "1": "variable" + } + }, + "Operation operation = <2/> 🔗\u0000{\"1\": \"Operation\", \"2\": \"0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1331, + "tpl": "Operation operation = <2/> 🔗", + "markers": { + "1": "Operation", + "2": "0", + "3": "🔗" + } + }, + "BBVariant value 🔗\u0000{\"1\": \"BBVariant\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1332, + "tpl": "BBVariant value 🔗", + "markers": { + "1": "BBVariant", + "2": "🔗" + } + }, + "Parameter that specifies the value to be assigned to the variable.\u0000{}": { + "uid": 1333, + "tpl": "Parameter that specifies the value to be assigned to the variable.", + "markers": {} + }, + "<1/> variable = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1334, + "tpl": "<1/> variable = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "Name of the variable to which the value will be assigned.\u0000{}": { + "uid": 1335, + "tpl": "Name of the variable to which the value will be assigned.", + "markers": {} + }, + "BTStopAnimation\u0000{}": { + "uid": 1336, + "tpl": "BTStopAnimation", + "markers": {} + }, + "BT action that stops the playback of an animation on the specified <1/> node.\u0000{\"1\": \"AnimationPlayer\"}": { + "uid": 1337, + "tpl": "BT action that stops the playback of an animation on the specified <1/> node.", + "markers": { + "1": "AnimationPlayer" + } + }, + "BTStopAnimation action stops the playback of an animation on the specified <1/> node and returns <2/>. If animation_name is set, it will only stop the playback if the specified animation is currently playing.\u0000{\"1\": \"AnimationPlayer\", \"2\": \"SUCCESS\", \"3\": \"animation_name\"}": { + "uid": 1338, + "tpl": "BTStopAnimation action stops the playback of an animation on the specified <1/> node and returns <2/>. If animation_name is set, it will only stop the playback if the specified animation is currently playing.", + "markers": { + "1": "AnimationPlayer", + "2": "SUCCESS", + "3": "animation_name" + } + }, + "animation_name\u0000{\"1\": \"animation_name\"}": { + "uid": 1339, + "tpl": "animation_name", + "markers": { + "1": "animation_name" + } + }, + "animation_player\u0000{\"1\": \"animation_player\"}": { + "uid": 1340, + "tpl": "animation_player", + "markers": { + "1": "animation_player" + } + }, + "keep_state\u0000{\"1\": \"keep_state\"}": { + "uid": 1341, + "tpl": "keep_state", + "markers": { + "1": "keep_state" + } + }, + "<1/> animation_name = <2/> 🔗\u0000{\"1\": \"StringName\", \"2\": \"&\\\"\\\"\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1342, + "tpl": "<1/> animation_name = <2/> 🔗", + "markers": { + "1": "StringName", + "2": "&\"\"", + "3": "🔗" + } + }, + "Animation’s key within the <1/> node. If not empty, BTStopAnimation will only stop the playback if the specified animation is currently playing.\u0000{\"1\": \"AnimationPlayer\"}": { + "uid": 1343, + "tpl": "Animation’s key within the <1/> node. If not empty, BTStopAnimation will only stop the playback if the specified animation is currently playing.", + "markers": { + "1": "AnimationPlayer" + } + }, + "BBNode animation_player 🔗\u0000{\"1\": \"BBNode\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1344, + "tpl": "BBNode animation_player 🔗", + "markers": { + "1": "BBNode", + "2": "🔗" + } + }, + "<1/> keep_state = <2/> 🔗\u0000{\"1\": \"bool\", \"2\": \"false\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1345, + "tpl": "<1/> keep_state = <2/> 🔗", + "markers": { + "1": "bool", + "2": "false", + "3": "🔗" + } + }, + "<1/> set_keep_state(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"bool\"}": { + "uid": 1346, + "tpl": "<1/> set_keep_state(value: <2/>)", + "markers": { + "1": "void", + "2": "bool" + } + }, + "<1/> get_keep_state()\u0000{\"1\": \"bool\"}": { + "uid": 1347, + "tpl": "<1/> get_keep_state()", + "markers": { + "1": "bool" + } + }, + "If <1/>, the animation state is not updated visually.\u0000{\"1\": \"true\"}": { + "uid": 1348, + "tpl": "If <1/>, the animation state is not updated visually.", + "markers": { + "1": "true" + } + }, + "BTSubtree\u0000{}": { + "uid": 1349, + "tpl": "BTSubtree", + "markers": {} + }, + "Inherits: BTNewScope < BTDecorator < BTTask < BT\u0000{\"1\": \"BTNewScope\", \"2\": \"BTDecorator\", \"3\": \"BTTask\", \"4\": \"BT\"}": { + "uid": 1350, + "tpl": "Inherits: BTNewScope < BTDecorator < BTTask < BT", + "markers": { + "1": "BTNewScope", + "2": "BTDecorator", + "3": "BTTask", + "4": "BT" + } + }, + "BT decorator that instantiates and runs a subtree within the larger tree.\u0000{}": { + "uid": 1351, + "tpl": "BT decorator that instantiates and runs a subtree within the larger tree.", + "markers": {} + }, + "BTSubtree instantiates a BehaviorTree and includes its root task as a child during initialization, while also creating a new Blackboard scope.\u0000{\"1\": \"BehaviorTree\", \"2\": \"Blackboard\"}": { + "uid": 1352, + "tpl": "BTSubtree instantiates a BehaviorTree and includes its root task as a child during initialization, while also creating a new Blackboard scope.", + "markers": { + "1": "BehaviorTree", + "2": "Blackboard" + } + }, + "Returns the status of the subtree’s execution.\u0000{}": { + "uid": 1353, + "tpl": "Returns the status of the subtree’s execution.", + "markers": {} + }, + "Subtree blackboard variables can be mapped to the main tree blackboard plan variables. Check out mapping section in the inspector.\u0000{}": { + "uid": 1354, + "tpl": "Subtree blackboard variables can be mapped to the main tree blackboard plan variables. Check out mapping section in the inspector.", + "markers": {} + }, + "Note: BTSubTree is designed as a simpler loader, and does not support updating subtree at runtime. A custom subtree decorator is better suited:\u0000{\"1\": \"subtree\"}": { + "uid": 1355, + "tpl": "Note: BTSubTree is designed as a simpler loader, and does not support updating subtree at runtime. A custom subtree decorator is better suited:", + "markers": { + "1": "subtree" + } + }, + "This allows for the BehaviorTree to load a specific behavior tree from a variable in the blackboard, or from some other location, and use that new behavior tree at runtime.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 1356, + "tpl": "This allows for the BehaviorTree to load a specific behavior tree from a variable in the blackboard, or from some other location, and use that new behavior tree at runtime.", + "markers": { + "1": "BehaviorTree" + } + }, + "subtree\u0000{\"1\": \"subtree\"}": { + "uid": 1357, + "tpl": "subtree", + "markers": { + "1": "subtree" + } + }, + "BehaviorTree subtree 🔗\u0000{\"1\": \"BehaviorTree\", \"2\": \"\\ud83d\\udd17\"}": { + "uid": 1358, + "tpl": "BehaviorTree subtree 🔗", + "markers": { + "1": "BehaviorTree", + "2": "🔗" + } + }, + "<1/> set_subtree(value: BehaviorTree)\u0000{\"1\": \"void\", \"2\": \"BehaviorTree\"}": { + "uid": 1359, + "tpl": "<1/> set_subtree(value: BehaviorTree)", + "markers": { + "1": "void", + "2": "BehaviorTree" + } + }, + "BehaviorTree get_subtree()\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 1360, + "tpl": "BehaviorTree get_subtree()", + "markers": { + "1": "BehaviorTree" + } + }, + "A BehaviorTree resource that will be instantiated as a subtree.\u0000{\"1\": \"BehaviorTree\"}": { + "uid": 1361, + "tpl": "A BehaviorTree resource that will be instantiated as a subtree.", + "markers": { + "1": "BehaviorTree" + } + }, + "BTTimeLimit\u0000{}": { + "uid": 1362, + "tpl": "BTTimeLimit", + "markers": {} + }, + "BT decorator that sets a time limit for its child’s execution.\u0000{}": { + "uid": 1363, + "tpl": "BT decorator that sets a time limit for its child’s execution.", + "markers": {} + }, + "BTTimeLimit allocates a limited time for the child’s execution and aborts it, returning <1/> if the time_limit is exceeded.\u0000{\"1\": \"FAILURE\", \"2\": \"time_limit\"}": { + "uid": 1364, + "tpl": "BTTimeLimit allocates a limited time for the child’s execution and aborts it, returning <1/> if the time_limit is exceeded.", + "markers": { + "1": "FAILURE", + "2": "time_limit" + } + }, + "Returns <1/> if the time_limit is exceeded; otherwise, it returns the status of the child task.\u0000{\"1\": \"FAILURE\", \"2\": \"time_limit\"}": { + "uid": 1365, + "tpl": "Returns <1/> if the time_limit is exceeded; otherwise, it returns the status of the child task.", + "markers": { + "1": "FAILURE", + "2": "time_limit" + } + }, + "time_limit\u0000{\"1\": \"time_limit\"}": { + "uid": 1366, + "tpl": "time_limit", + "markers": { + "1": "time_limit" + } + }, + "<1/> time_limit = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"5.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1367, + "tpl": "<1/> time_limit = <2/> 🔗", + "markers": { + "1": "float", + "2": "5.0", + "3": "🔗" + } + }, + "<1/> set_time_limit(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"float\"}": { + "uid": 1368, + "tpl": "<1/> set_time_limit(value: <2/>)", + "markers": { + "1": "void", + "2": "float" + } + }, + "<1/> get_time_limit()\u0000{\"1\": \"float\"}": { + "uid": 1369, + "tpl": "<1/> get_time_limit()", + "markers": { + "1": "float" + } + }, + "Time allocated for the child task’s execution.\u0000{}": { + "uid": 1370, + "tpl": "Time allocated for the child task’s execution.", + "markers": {} + }, + "BTWait\u0000{}": { + "uid": 1371, + "tpl": "BTWait", + "markers": {} + }, + "BT action that waits for a specified duration to elapse and then returns <2/>.\u0000{\"1\": \"duration\", \"2\": \"SUCCESS\"}": { + "uid": 1372, + "tpl": "BT action that waits for a specified duration to elapse and then returns <2/>.", + "markers": { + "1": "duration", + "2": "SUCCESS" + } + }, + "duration\u0000{\"1\": \"duration\"}": { + "uid": 1373, + "tpl": "duration", + "markers": { + "1": "duration" + } + }, + "<1/> duration = <2/> 🔗\u0000{\"1\": \"float\", \"2\": \"1.0\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1374, + "tpl": "<1/> duration = <2/> 🔗", + "markers": { + "1": "float", + "2": "1.0", + "3": "🔗" + } + }, + "There is currently no description for this property. Please help us by contributing one!\u0000{}": { + "uid": 1375, + "tpl": "There is currently no description for this property. Please help us by contributing one!", + "markers": {} + }, + "BTWaitTicks\u0000{}": { + "uid": 1376, + "tpl": "BTWaitTicks", + "markers": {} + }, + "BT action that waits for a specified number of ticks to elapse and then returns <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1377, + "tpl": "BT action that waits for a specified number of ticks to elapse and then returns <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "num_ticks\u0000{\"1\": \"num_ticks\"}": { + "uid": 1378, + "tpl": "num_ticks", + "markers": { + "1": "num_ticks" + } + }, + "<1/> num_ticks = <2/> 🔗\u0000{\"1\": \"int\", \"2\": \"1\", \"3\": \"\\ud83d\\udd17\"}": { + "uid": 1379, + "tpl": "<1/> num_ticks = <2/> 🔗", + "markers": { + "1": "int", + "2": "1", + "3": "🔗" + } + }, + "<1/> set_num_ticks(value: <2/>)\u0000{\"1\": \"void\", \"2\": \"int\"}": { + "uid": 1380, + "tpl": "<1/> set_num_ticks(value: <2/>)", + "markers": { + "1": "void", + "2": "int" + } + }, + "<1/> get_num_ticks()\u0000{\"1\": \"int\"}": { + "uid": 1381, + "tpl": "<1/> get_num_ticks()", + "markers": { + "1": "int" + } + }, + "The number of ticks to wait before returning <1/>.\u0000{\"1\": \"SUCCESS\"}": { + "uid": 1382, + "tpl": "The number of ticks to wait before returning <1/>.", + "markers": { + "1": "SUCCESS" + } + }, + "LimboUtility\u0000{}": { + "uid": 1383, + "tpl": "LimboUtility", + "markers": {} + }, + "Helper functions for LimboAI.\u0000{}": { + "uid": 1384, + "tpl": "Helper functions for LimboAI.", + "markers": {} + }, + "decorate_output_var(variable: <2/>) <3/>\u0000{\"1\": \"decorate_output_var\", \"2\": \"String\", \"3\": \"const\"}": { + "uid": 1385, + "tpl": "decorate_output_var(variable: <2/>) <3/>", + "markers": { + "1": "decorate_output_var", + "2": "String", + "3": "const" + } + }, + "decorate_var(variable: <2/>) <3/>\u0000{\"1\": \"decorate_var\", \"2\": \"String\", \"3\": \"const\"}": { + "uid": 1386, + "tpl": "decorate_var(variable: <2/>) <3/>", + "markers": { + "1": "decorate_var", + "2": "String", + "3": "const" + } + }, + "get_check_operator_string(check: CheckType) <3/>\u0000{\"1\": \"get_check_operator_string\", \"2\": \"CheckType\", \"3\": \"const\"}": { + "uid": 1387, + "tpl": "get_check_operator_string(check: CheckType) <3/>", + "markers": { + "1": "get_check_operator_string", + "2": "CheckType", + "3": "const" + } + }, + "get_operation_string(operation: Operation) <3/>\u0000{\"1\": \"get_operation_string\", \"2\": \"Operation\", \"3\": \"const\"}": { + "uid": 1388, + "tpl": "get_operation_string(operation: Operation) <3/>", + "markers": { + "1": "get_operation_string", + "2": "Operation", + "3": "const" + } + }, + "get_status_name(status: <2/>) <3/>\u0000{\"1\": \"get_status_name\", \"2\": \"int\", \"3\": \"const\"}": { + "uid": 1389, + "tpl": "get_status_name(status: <2/>) <3/>", + "markers": { + "1": "get_status_name", + "2": "int", + "3": "const" + } + }, + "get_task_icon(class_or_script_path: <2/>) <3/>\u0000{\"1\": \"get_task_icon\", \"2\": \"String\", \"3\": \"const\"}": { + "uid": 1390, + "tpl": "get_task_icon(class_or_script_path: <2/>) <3/>", + "markers": { + "1": "get_task_icon", + "2": "String", + "3": "const" + } + }, + "perform_check(check: CheckType, a: <3/>, b: <4/>)\u0000{\"1\": \"perform_check\", \"2\": \"CheckType\", \"3\": \"Variant\", \"4\": \"Variant\"}": { + "uid": 1391, + "tpl": "perform_check(check: CheckType, a: <3/>, b: <4/>)", + "markers": { + "1": "perform_check", + "2": "CheckType", + "3": "Variant", + "4": "Variant" + } + }, + "perform_operation(operation: Operation, a: <3/>, b: <4/>)\u0000{\"1\": \"perform_operation\", \"2\": \"Operation\", \"3\": \"Variant\", \"4\": \"Variant\"}": { + "uid": 1392, + "tpl": "perform_operation(operation: Operation, a: <3/>, b: <4/>)", + "markers": { + "1": "perform_operation", + "2": "Operation", + "3": "Variant", + "4": "Variant" + } + }, + "enum CheckType: 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 1393, + "tpl": "enum CheckType: 🔗", + "markers": { + "1": "🔗" + } + }, + "CheckType CHECK_EQUAL = <2/>\u0000{\"1\": \"CheckType\", \"2\": \"0\"}": { + "uid": 1394, + "tpl": "CheckType CHECK_EQUAL = <2/>", + "markers": { + "1": "CheckType", + "2": "0" + } + }, + "Equality Check.\u0000{}": { + "uid": 1395, + "tpl": "Equality Check.", + "markers": {} + }, + "CheckType CHECK_LESS_THAN = <2/>\u0000{\"1\": \"CheckType\", \"2\": \"1\"}": { + "uid": 1396, + "tpl": "CheckType CHECK_LESS_THAN = <2/>", + "markers": { + "1": "CheckType", + "2": "1" + } + }, + "Less Than Check.\u0000{}": { + "uid": 1397, + "tpl": "Less Than Check.", + "markers": {} + }, + "CheckType CHECK_LESS_THAN_OR_EQUAL = <2/>\u0000{\"1\": \"CheckType\", \"2\": \"2\"}": { + "uid": 1398, + "tpl": "CheckType CHECK_LESS_THAN_OR_EQUAL = <2/>", + "markers": { + "1": "CheckType", + "2": "2" + } + }, + "Less Than or Equal To Check.\u0000{}": { + "uid": 1399, + "tpl": "Less Than or Equal To Check.", + "markers": {} + }, + "CheckType CHECK_GREATER_THAN = <2/>\u0000{\"1\": \"CheckType\", \"2\": \"3\"}": { + "uid": 1400, + "tpl": "CheckType CHECK_GREATER_THAN = <2/>", + "markers": { + "1": "CheckType", + "2": "3" + } + }, + "Greater Than Check.\u0000{}": { + "uid": 1401, + "tpl": "Greater Than Check.", + "markers": {} + }, + "CheckType CHECK_GREATER_THAN_OR_EQUAL = <2/>\u0000{\"1\": \"CheckType\", \"2\": \"4\"}": { + "uid": 1402, + "tpl": "CheckType CHECK_GREATER_THAN_OR_EQUAL = <2/>", + "markers": { + "1": "CheckType", + "2": "4" + } + }, + "Greater Than or Equal To Check\u0000{}": { + "uid": 1403, + "tpl": "Greater Than or Equal To Check", + "markers": {} + }, + "CheckType CHECK_NOT_EQUAL = <2/>\u0000{\"1\": \"CheckType\", \"2\": \"5\"}": { + "uid": 1404, + "tpl": "CheckType CHECK_NOT_EQUAL = <2/>", + "markers": { + "1": "CheckType", + "2": "5" + } + }, + "Inequality Check.\u0000{}": { + "uid": 1405, + "tpl": "Inequality Check.", + "markers": {} + }, + "enum Operation: 🔗\u0000{\"1\": \"\\ud83d\\udd17\"}": { + "uid": 1406, + "tpl": "enum Operation: 🔗", + "markers": { + "1": "🔗" + } + }, + "Operation OPERATION_NONE = <2/>\u0000{\"1\": \"Operation\", \"2\": \"0\"}": { + "uid": 1407, + "tpl": "Operation OPERATION_NONE = <2/>", + "markers": { + "1": "Operation", + "2": "0" + } + }, + "No operation.\u0000{}": { + "uid": 1408, + "tpl": "No operation.", + "markers": {} + }, + "Operation OPERATION_ADDITION = <2/>\u0000{\"1\": \"Operation\", \"2\": \"1\"}": { + "uid": 1409, + "tpl": "Operation OPERATION_ADDITION = <2/>", + "markers": { + "1": "Operation", + "2": "1" + } + }, + "Arithmetic addition.\u0000{}": { + "uid": 1410, + "tpl": "Arithmetic addition.", + "markers": {} + }, + "Operation OPERATION_SUBTRACTION = <2/>\u0000{\"1\": \"Operation\", \"2\": \"2\"}": { + "uid": 1411, + "tpl": "Operation OPERATION_SUBTRACTION = <2/>", + "markers": { + "1": "Operation", + "2": "2" + } + }, + "Arithmetic subtraction.\u0000{}": { + "uid": 1412, + "tpl": "Arithmetic subtraction.", + "markers": {} + }, + "Operation OPERATION_MULTIPLICATION = <2/>\u0000{\"1\": \"Operation\", \"2\": \"3\"}": { + "uid": 1413, + "tpl": "Operation OPERATION_MULTIPLICATION = <2/>", + "markers": { + "1": "Operation", + "2": "3" + } + }, + "Arithmetic multiplication.\u0000{}": { + "uid": 1414, + "tpl": "Arithmetic multiplication.", + "markers": {} + }, + "Operation OPERATION_DIVISION = <2/>\u0000{\"1\": \"Operation\", \"2\": \"4\"}": { + "uid": 1415, + "tpl": "Operation OPERATION_DIVISION = <2/>", + "markers": { + "1": "Operation", + "2": "4" + } + }, + "Arithmetic division.\u0000{}": { + "uid": 1416, + "tpl": "Arithmetic division.", + "markers": {} + }, + "Operation OPERATION_MODULO = <2/>\u0000{\"1\": \"Operation\", \"2\": \"5\"}": { + "uid": 1417, + "tpl": "Operation OPERATION_MODULO = <2/>", + "markers": { + "1": "Operation", + "2": "5" + } + }, + "Produces the remainder of an integer division.\u0000{}": { + "uid": 1418, + "tpl": "Produces the remainder of an integer division.", + "markers": {} + }, + "Operation OPERATION_POWER = <2/>\u0000{\"1\": \"Operation\", \"2\": \"6\"}": { + "uid": 1419, + "tpl": "Operation OPERATION_POWER = <2/>", + "markers": { + "1": "Operation", + "2": "6" + } + }, + "Multiply <1/> by itself <2/> times.\u0000{\"1\": \"a\", \"2\": \"b\"}": { + "uid": 1420, + "tpl": "Multiply <1/> by itself <2/> times.", + "markers": { + "1": "a", + "2": "b" + } + }, + "Operation OPERATION_BIT_SHIFT_LEFT = <2/>\u0000{\"1\": \"Operation\", \"2\": \"7\"}": { + "uid": 1421, + "tpl": "Operation OPERATION_BIT_SHIFT_LEFT = <2/>", + "markers": { + "1": "Operation", + "2": "7" + } + }, + "Bitwise left shift.\u0000{}": { + "uid": 1422, + "tpl": "Bitwise left shift.", + "markers": {} + }, + "Operation OPERATION_BIT_SHIFT_RIGHT = <2/>\u0000{\"1\": \"Operation\", \"2\": \"8\"}": { + "uid": 1423, + "tpl": "Operation OPERATION_BIT_SHIFT_RIGHT = <2/>", + "markers": { + "1": "Operation", + "2": "8" + } + }, + "Bitwise right shift.\u0000{}": { + "uid": 1424, + "tpl": "Bitwise right shift.", + "markers": {} + }, + "Operation OPERATION_BIT_AND = <2/>\u0000{\"1\": \"Operation\", \"2\": \"9\"}": { + "uid": 1425, + "tpl": "Operation OPERATION_BIT_AND = <2/>", + "markers": { + "1": "Operation", + "2": "9" + } + }, + "Bitwise AND.\u0000{}": { + "uid": 1426, + "tpl": "Bitwise AND.", + "markers": {} + }, + "Operation OPERATION_BIT_OR = <2/>\u0000{\"1\": \"Operation\", \"2\": \"10\"}": { + "uid": 1427, + "tpl": "Operation OPERATION_BIT_OR = <2/>", + "markers": { + "1": "Operation", + "2": "10" + } + }, + "Bitwise OR.\u0000{}": { + "uid": 1428, + "tpl": "Bitwise OR.", + "markers": {} + }, + "Operation OPERATION_BIT_XOR = <2/>\u0000{\"1\": \"Operation\", \"2\": \"11\"}": { + "uid": 1429, + "tpl": "Operation OPERATION_BIT_XOR = <2/>", + "markers": { + "1": "Operation", + "2": "11" + } + }, + "Bitwise XOR.\u0000{}": { + "uid": 1430, + "tpl": "Bitwise XOR.", + "markers": {} + }, + "<1/> decorate_output_var(variable: <2/>) <3/> 🔗\u0000{\"1\": \"String\", \"2\": \"String\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1431, + "tpl": "<1/> decorate_output_var(variable: <2/>) <3/> 🔗", + "markers": { + "1": "String", + "2": "String", + "3": "const", + "4": "🔗" + } + }, + "Just like decorate_var, produces a string with a Blackboard variable name that is formatted for display, and also adds an additional symbol to indicate that the variable is used as an output.\u0000{\"1\": \"decorate_var\", \"2\": \"Blackboard\"}": { + "uid": 1432, + "tpl": "Just like decorate_var, produces a string with a Blackboard variable name that is formatted for display, and also adds an additional symbol to indicate that the variable is used as an output.", + "markers": { + "1": "decorate_var", + "2": "Blackboard" + } + }, + "<1/> decorate_var(variable: <2/>) <3/> 🔗\u0000{\"1\": \"String\", \"2\": \"String\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1433, + "tpl": "<1/> decorate_var(variable: <2/>) <3/> 🔗", + "markers": { + "1": "String", + "2": "String", + "3": "const", + "4": "🔗" + } + }, + "Produces a string with a Blackboard variable name that is formatted for display or console output.\u0000{\"1\": \"Blackboard\"}": { + "uid": 1434, + "tpl": "Produces a string with a Blackboard variable name that is formatted for display or console output.", + "markers": { + "1": "Blackboard" + } + }, + "<1/> get_check_operator_string(check: CheckType) <3/> 🔗\u0000{\"1\": \"String\", \"2\": \"CheckType\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1435, + "tpl": "<1/> get_check_operator_string(check: CheckType) <3/> 🔗", + "markers": { + "1": "String", + "2": "CheckType", + "3": "const", + "4": "🔗" + } + }, + "Returns an operator string for a CheckType enum value. For example, CHECK_EQUAL returns “==”.\u0000{\"1\": \"CheckType\", \"2\": \"CHECK_EQUAL\"}": { + "uid": 1436, + "tpl": "Returns an operator string for a CheckType enum value. For example, CHECK_EQUAL returns “==”.", + "markers": { + "1": "CheckType", + "2": "CHECK_EQUAL" + } + }, + "<1/> get_operation_string(operation: Operation) <3/> 🔗\u0000{\"1\": \"String\", \"2\": \"Operation\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1437, + "tpl": "<1/> get_operation_string(operation: Operation) <3/> 🔗", + "markers": { + "1": "String", + "2": "Operation", + "3": "const", + "4": "🔗" + } + }, + "Returns a string representation of an Operation enum value.\u0000{\"1\": \"Operation\"}": { + "uid": 1438, + "tpl": "Returns a string representation of an Operation enum value.", + "markers": { + "1": "Operation" + } + }, + "<1/> get_status_name(status: <2/>) <3/> 🔗\u0000{\"1\": \"String\", \"2\": \"int\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1439, + "tpl": "<1/> get_status_name(status: <2/>) <3/> 🔗", + "markers": { + "1": "String", + "2": "int", + "3": "const", + "4": "🔗" + } + }, + "Returns a name of a BTTask status code.\u0000{\"1\": \"BTTask\"}": { + "uid": 1440, + "tpl": "Returns a name of a BTTask status code.", + "markers": { + "1": "BTTask" + } + }, + "<1/> get_task_icon(class_or_script_path: <2/>) <3/> 🔗\u0000{\"1\": \"Texture2D\", \"2\": \"String\", \"3\": \"const\", \"4\": \"\\ud83d\\udd17\"}": { + "uid": 1441, + "tpl": "<1/> get_task_icon(class_or_script_path: <2/>) <3/> 🔗", + "markers": { + "1": "Texture2D", + "2": "String", + "3": "const", + "4": "🔗" + } + }, + "Returns the icon texture associated with a task based on its class name or script resource path.\u0000{}": { + "uid": 1442, + "tpl": "Returns the icon texture associated with a task based on its class name or script resource path.", + "markers": {} + }, + "<1/> perform_check(check: CheckType, a: <3/>, b: <4/>) 🔗\u0000{\"1\": \"bool\", \"2\": \"CheckType\", \"3\": \"Variant\", \"4\": \"Variant\", \"5\": \"\\ud83d\\udd17\"}": { + "uid": 1443, + "tpl": "<1/> perform_check(check: CheckType, a: <3/>, b: <4/>) 🔗", + "markers": { + "1": "bool", + "2": "CheckType", + "3": "Variant", + "4": "Variant", + "5": "🔗" + } + }, + "Performs a <1/> on two values, <2/> and <3/>, and returns <4/> if the check passes.\u0000{\"1\": \"check\", \"2\": \"a\", \"3\": \"b\", \"4\": \"true\"}": { + "uid": 1444, + "tpl": "Performs a <1/> on two values, <2/> and <3/>, and returns <4/> if the check passes.", + "markers": { + "1": "check", + "2": "a", + "3": "b", + "4": "true" + } + }, + "<1/> perform_operation(operation: Operation, a: <3/>, b: <4/>) 🔗\u0000{\"1\": \"Variant\", \"2\": \"Operation\", \"3\": \"Variant\", \"4\": \"Variant\", \"5\": \"\\ud83d\\udd17\"}": { + "uid": 1445, + "tpl": "<1/> perform_operation(operation: Operation, a: <3/>, b: <4/>) 🔗", + "markers": { + "1": "Variant", + "2": "Operation", + "3": "Variant", + "4": "Variant", + "5": "🔗" + } + }, + "Performs an <1/> on two values, <2/> and <3/>, and returns the result.\u0000{\"1\": \"operation\", \"2\": \"a\", \"3\": \"b\"}": { + "uid": 1446, + "tpl": "Performs an <1/> on two values, <2/> and <3/>, and returns the result.", + "markers": { + "1": "operation", + "2": "a", + "3": "b" + } + }, + "Getting started\u0000{}": { + "uid": 1447, + "tpl": "Getting started", + "markers": {} + }, + "Behavior Trees\u0000{}": { + "uid": 1448, + "tpl": "Behavior Trees", + "markers": {} + }, + "Hierarchical State MachineS\u0000{}": { + "uid": 1449, + "tpl": "Hierarchical State MachineS", + "markers": {} + }, + "Class reference\u0000{}": { + "uid": 1450, + "tpl": "Class reference", + "markers": {} + }, + "LimboAI 1.0 documentation\u0000{}": { + "uid": 1451, + "tpl": "LimboAI 1.0 documentation", + "markers": {} + } + } +} \ No newline at end of file diff --git a/docs/limboai-stable/_static/_sphinx_javascript_frameworks_compat.js b/docs/limboai-stable/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8141580 --- /dev/null +++ b/docs/limboai-stable/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs/limboai-stable/_static/base-stemmer.js b/docs/limboai-stable/_static/base-stemmer.js new file mode 100644 index 0000000..e6fa0c4 --- /dev/null +++ b/docs/limboai-stable/_static/base-stemmer.js @@ -0,0 +1,476 @@ +// @ts-check + +/**@constructor*/ +BaseStemmer = function() { + /** @protected */ + this.current = ''; + this.cursor = 0; + this.limit = 0; + this.limit_backward = 0; + this.bra = 0; + this.ket = 0; + + /** + * @param {string} value + */ + this.setCurrent = function(value) { + this.current = value; + this.cursor = 0; + this.limit = this.current.length; + this.limit_backward = 0; + this.bra = this.cursor; + this.ket = this.limit; + }; + + /** + * @return {string} + */ + this.getCurrent = function() { + return this.current; + }; + + /** + * @param {BaseStemmer} other + */ + this.copy_from = function(other) { + /** @protected */ + this.current = other.current; + this.cursor = other.cursor; + this.limit = other.limit; + this.limit_backward = other.limit_backward; + this.bra = other.bra; + this.ket = other.ket; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.in_grouping = function(s, min, max) { + /** @protected */ + if (this.cursor >= this.limit) return false; + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) return false; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; + this.cursor++; + return true; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_in_grouping = function(s, min, max) { + /** @protected */ + while (this.cursor < this.limit) { + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) + return true; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) + return true; + this.cursor++; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.in_grouping_b = function(s, min, max) { + /** @protected */ + if (this.cursor <= this.limit_backward) return false; + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) return false; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false; + this.cursor--; + return true; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_in_grouping_b = function(s, min, max) { + /** @protected */ + while (this.cursor > this.limit_backward) { + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) return true; + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return true; + this.cursor--; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.out_grouping = function(s, min, max) { + /** @protected */ + if (this.cursor >= this.limit) return false; + var ch = this.current.charCodeAt(this.cursor); + if (ch > max || ch < min) { + this.cursor++; + return true; + } + ch -= min; + if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) { + this.cursor++; + return true; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_out_grouping = function(s, min, max) { + /** @protected */ + while (this.cursor < this.limit) { + var ch = this.current.charCodeAt(this.cursor); + if (ch <= max && ch >= min) { + ch -= min; + if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) != 0) { + return true; + } + } + this.cursor++; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.out_grouping_b = function(s, min, max) { + /** @protected */ + if (this.cursor <= this.limit_backward) return false; + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch > max || ch < min) { + this.cursor--; + return true; + } + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) { + this.cursor--; + return true; + } + return false; + }; + + /** + * @param {number[]} s + * @param {number} min + * @param {number} max + * @return {boolean} + */ + this.go_out_grouping_b = function(s, min, max) { + /** @protected */ + while (this.cursor > this.limit_backward) { + var ch = this.current.charCodeAt(this.cursor - 1); + if (ch <= max && ch >= min) { + ch -= min; + if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) != 0) { + return true; + } + } + this.cursor--; + } + return false; + }; + + /** + * @param {string} s + * @return {boolean} + */ + this.eq_s = function(s) + { + /** @protected */ + if (this.limit - this.cursor < s.length) return false; + if (this.current.slice(this.cursor, this.cursor + s.length) != s) + { + return false; + } + this.cursor += s.length; + return true; + }; + + /** + * @param {string} s + * @return {boolean} + */ + this.eq_s_b = function(s) + { + /** @protected */ + if (this.cursor - this.limit_backward < s.length) return false; + if (this.current.slice(this.cursor - s.length, this.cursor) != s) + { + return false; + } + this.cursor -= s.length; + return true; + }; + + /** + * @param {Among[]} v + * @return {number} + */ + this.find_among = function(v) + { + /** @protected */ + var i = 0; + var j = v.length; + + var c = this.cursor; + var l = this.limit; + + var common_i = 0; + var common_j = 0; + + var first_key_inspected = false; + + while (true) + { + var k = i + ((j - i) >>> 1); + var diff = 0; + var common = common_i < common_j ? common_i : common_j; // smaller + // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional) + var w = v[k]; + var i2; + for (i2 = common; i2 < w[0].length; i2++) + { + if (c + common == l) + { + diff = -1; + break; + } + diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2); + if (diff != 0) break; + common++; + } + if (diff < 0) + { + j = k; + common_j = common; + } + else + { + i = k; + common_i = common; + } + if (j - i <= 1) + { + if (i > 0) break; // v->s has been inspected + if (j == i) break; // only one item in v + + // - but now we need to go round once more to get + // v->s inspected. This looks messy, but is actually + // the optimal approach. + + if (first_key_inspected) break; + first_key_inspected = true; + } + } + do { + var w = v[i]; + if (common_i >= w[0].length) + { + this.cursor = c + w[0].length; + if (w.length < 4) return w[2]; + var res = w[3](this); + this.cursor = c + w[0].length; + if (res) return w[2]; + } + i = w[1]; + } while (i >= 0); + return 0; + }; + + // find_among_b is for backwards processing. Same comments apply + /** + * @param {Among[]} v + * @return {number} + */ + this.find_among_b = function(v) + { + /** @protected */ + var i = 0; + var j = v.length + + var c = this.cursor; + var lb = this.limit_backward; + + var common_i = 0; + var common_j = 0; + + var first_key_inspected = false; + + while (true) + { + var k = i + ((j - i) >> 1); + var diff = 0; + var common = common_i < common_j ? common_i : common_j; + var w = v[k]; + var i2; + for (i2 = w[0].length - 1 - common; i2 >= 0; i2--) + { + if (c - common == lb) + { + diff = -1; + break; + } + diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2); + if (diff != 0) break; + common++; + } + if (diff < 0) + { + j = k; + common_j = common; + } + else + { + i = k; + common_i = common; + } + if (j - i <= 1) + { + if (i > 0) break; + if (j == i) break; + if (first_key_inspected) break; + first_key_inspected = true; + } + } + do { + var w = v[i]; + if (common_i >= w[0].length) + { + this.cursor = c - w[0].length; + if (w.length < 4) return w[2]; + var res = w[3](this); + this.cursor = c - w[0].length; + if (res) return w[2]; + } + i = w[1]; + } while (i >= 0); + return 0; + }; + + /* to replace chars between c_bra and c_ket in this.current by the + * chars in s. + */ + /** + * @param {number} c_bra + * @param {number} c_ket + * @param {string} s + * @return {number} + */ + this.replace_s = function(c_bra, c_ket, s) + { + /** @protected */ + var adjustment = s.length - (c_ket - c_bra); + this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket); + this.limit += adjustment; + if (this.cursor >= c_ket) this.cursor += adjustment; + else if (this.cursor > c_bra) this.cursor = c_bra; + return adjustment; + }; + + /** + * @return {boolean} + */ + this.slice_check = function() + { + /** @protected */ + if (this.bra < 0 || + this.bra > this.ket || + this.ket > this.limit || + this.limit > this.current.length) + { + return false; + } + return true; + }; + + /** + * @param {number} c_bra + * @return {boolean} + */ + this.slice_from = function(s) + { + /** @protected */ + var result = false; + if (this.slice_check()) + { + this.replace_s(this.bra, this.ket, s); + result = true; + } + return result; + }; + + /** + * @return {boolean} + */ + this.slice_del = function() + { + /** @protected */ + return this.slice_from(""); + }; + + /** + * @param {number} c_bra + * @param {number} c_ket + * @param {string} s + */ + this.insert = function(c_bra, c_ket, s) + { + /** @protected */ + var adjustment = this.replace_s(c_bra, c_ket, s); + if (c_bra <= this.bra) this.bra += adjustment; + if (c_bra <= this.ket) this.ket += adjustment; + }; + + /** + * @return {string} + */ + this.slice_to = function() + { + /** @protected */ + var result = ''; + if (this.slice_check()) + { + result = this.current.slice(this.bra, this.ket); + } + return result; + }; + + /** + * @return {string} + */ + this.assign_to = function() + { + /** @protected */ + return this.current.slice(0, this.limit); + }; +}; diff --git a/docs/limboai-stable/_static/basic.css b/docs/limboai-stable/_static/basic.css new file mode 100644 index 0000000..4738b2e --- /dev/null +++ b/docs/limboai-stable/_static/basic.css @@ -0,0 +1,906 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/limboai-stable/_static/check-solid.svg b/docs/limboai-stable/_static/check-solid.svg new file mode 100644 index 0000000..92fad4b --- /dev/null +++ b/docs/limboai-stable/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/limboai-stable/_static/check-solid.svg.import b/docs/limboai-stable/_static/check-solid.svg.import new file mode 100644 index 0000000..4896a99 --- /dev/null +++ b/docs/limboai-stable/_static/check-solid.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vlb2a6o030bu" +path="res://.godot/imported/check-solid.svg-216a308fbdcbd4c66c5e500894b3dffe.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://docs/limboai-stable/_static/check-solid.svg" +dest_files=["res://.godot/imported/check-solid.svg-216a308fbdcbd4c66c5e500894b3dffe.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/docs/limboai-stable/_static/clipboard.min.js b/docs/limboai-stable/_static/clipboard.min.js new file mode 100644 index 0000000..54b3c46 --- /dev/null +++ b/docs/limboai-stable/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/docs/limboai-stable/_static/copy-button.svg.import b/docs/limboai-stable/_static/copy-button.svg.import new file mode 100644 index 0000000..7b1ae2a --- /dev/null +++ b/docs/limboai-stable/_static/copy-button.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ddgnkpp2yb0ev" +path="res://.godot/imported/copy-button.svg-cc0202eefcb369fe9f17ac4a20579f3c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://docs/limboai-stable/_static/copy-button.svg" +dest_files=["res://.godot/imported/copy-button.svg-cc0202eefcb369fe9f17ac4a20579f3c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/docs/limboai-stable/_static/copybutton.css b/docs/limboai-stable/_static/copybutton.css new file mode 100644 index 0000000..f1916ec --- /dev/null +++ b/docs/limboai-stable/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/docs/limboai-stable/_static/copybutton.js b/docs/limboai-stable/_static/copybutton.js new file mode 100644 index 0000000..2ea7ff3 --- /dev/null +++ b/docs/limboai-stable/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs/limboai-stable/_static/copybutton_funcs.js b/docs/limboai-stable/_static/copybutton_funcs.js new file mode 100644 index 0000000..dbe1aaa --- /dev/null +++ b/docs/limboai-stable/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/docs/limboai-stable/_static/css/badge_only.css b/docs/limboai-stable/_static/css/badge_only.css new file mode 100644 index 0000000..88ba55b --- /dev/null +++ b/docs/limboai-stable/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px} \ No newline at end of file diff --git a/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..6cb60000181dbd348963953ac8ac54afb46c63d5 GIT binary patch literal 87624 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

!pma|lSQ?8FBe{DRl|@FzhU7Cb>&@ataZS{g zrCQo@Lushkm71KyL3$%QD?KeSADp!x{f z=8g-xggQyFIyp&U(+DO4!2ygCg$vPu1pqEc^*Qa)IPstXB!i@fDLx<-```)5UsmT$Yl%a2onC zAFmUqUVZ7M=U;sB~=#ZhJ zS2lbGii8+5IZ#kxQUi*iaRi9X

#R4x5a04mzf2YJ>#U<-Nc81}`=EFMdUjIP>d| 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

b(7>T&1{%W+D%3_gwxcBR7_myM-&X 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 DnuPx& literal 0 HcmV?d00001 diff --git a/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2.import b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2.import new file mode 100644 index 0000000..af1e3da --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cl24wwl4j8hp1" +path="res://.godot/imported/Roboto-Slab-Bold.woff2-6ae669fcfa86d5f388f2528be78db101.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2" +dest_files=["res://.godot/imported/Roboto-Slab-Bold.woff2-6ae669fcfa86d5f388f2528be78db101.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=3 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..f815f63f99da80ad2be69e4021023ec2981eaea0 GIT binary patch literal 86288 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 z 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

msZ%O|+*Z+LS;;x4v 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%0AU9xwl*jMUcB+ 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 NDMp1hFB${m{{V&DCTjoy literal 0 HcmV?d00001 diff --git a/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff.import b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff.import new file mode 100644 index 0000000..9e7c48e --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://ugeogpx5y20n" +path="res://.godot/imported/lato-bold-italic.woff-569e122e3da39928773a5db3a9a2b97b.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff" +dest_files=["res://.godot/imported/lato-bold-italic.woff-569e122e3da39928773a5db3a9a2b97b.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=3 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2 b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c4e3d804b57b625b16a36d767bfca6bbf63d414e GIT binary patch literal 193308 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

l?s7}*4vp!2W|88=L^r| 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

nR1?qM=|aYy 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

F}woT zIx({Ow~?=c{IbPJ5zvC(7;};$g#;0Fa{7*mQAQ%X=w$qiu85S|NqUrZb+@qZm2{8e z#ITitbb#a$T)aZfiM@b%fD8{t?{GbO>iI|*iyAQ|sIOyfMW(gup3swA7&#MlG;pgE zbH!*y@(ACPtOdyswIXo3lVU}I6S)P|GN`^&$e393;?cR4%3w*+&(Y$ajJ!7jyp;JN zxsy)u+p13y5 zRv%)$M#nwp$-1;D2}vU!Lq9{keeKVQfQ1s=Va$nwg~||QV*H8}Q7TB~DQ-H7R4~_y zxzpoUMCoX~K|ealj459cq@!A+Lg@qC7)!-XsGxjKLJi0Z7zF{%9gD`~bd6ev8t`50 z+FnHtF2xnuB?_bYUqd*>9l+vzyz?acghy=Ku5)WAEN2Po^+&#mq}#IVc7*0hFofU; zzL(eaf+g?1ueo^o>(fWm5o4UPME*nb@FmNcrVGmqT3s-eF~bb1dobe+asx2gyHm81 zh7tk2^O>^DuD|MGO(v33uvJI(iolVuC*loe%OgW1j$o~hl9h+40X>mhFf0)Uj8)M7 z8(D2@|3g;mRiS~P8O)pgq!e|x1Ff}l?$PsXLOZmLY$Q8Gy-q&pc-?;|m+HeBKuqN- z`z5LxzR~X>)c#8v2Ij76!BI=h^V=-&i9P2-2B8--A*5yy9mpDT$*5%vT@pv1oalNc zu=}#<<~ihuV`CjYpv4avsa4(I&YOcP6_U$^C+OSkd2r267gzdh0YB-Rv=yk!2>=kK zeL1v}r)Q_za@&%O+BTDBZ%z^bk<7Y*%yW^=e~v*r5v{$dV*flKloI?~{a*U1DHk5b%JuP-UQD)Q<;Mzz`aL zD1LG#^8PAZn2olcZrwep#baMJA4XEt7?Tb!S9mMgX8N)y9bmqlDHS>p6GaJ`+Ad;H ztrE@+ZG&tV9|iXwSgxtR@zV_nqzXS#s|SF15aENy{M_ZR0U!pn)<^+i0$-p7HcA zPBVIYr;qrqLyZoUROpSMM&E};(tX*BDMp0+H-!#wbi@JAAYZDeIa{u>PZLsss&j11 zxI?eY+yjcEy)d!%1HZQBHHE6f8?>PNc`X@UvywUd*L}>7~emq^G_pOdj7G3vGG=Zu$A)mZP}OQ!B`{h;sNQMR>ht6 z=O5vWzOgMz^ZC#;rBuv#?sndGEvg|pOKmqUtrR*?MPujVA`?wYu6>9mn#$^}W@17< zb>$o$M6q5Fk3-aS)&oRc>!m9`88^jgi*>xsG_?jugym`E)ag-_w)SG&(ckGsaox?| zR!1t`9$t#^JRh(Y8T70EASl^tbyE!hMp-tEW^5nq9c;BF?g+s34n~Fj3f#F5Hv~p? zn#ZeW2u@0mEqhpB!nG7M%}QK`UA>3TyoS%rOn-D2^b_?bM0vlYp19cSP2%;t_+H#U zSbnV!uk}jfS(pL1mk^ar)lpAgtj7|slbdS zP3bOA`6Y3_KqzsRQpA0Ts=;dHmSb=2{j2iZ;mQ_VYoa(CBJ{?`ti91jozY3AQC%W2 zjP1A7#-juSIU14K8u}wd&xVM8`jtPbcb0sW!t%|t^jxB}PD~5sI!*rtcwwt@L8#$5 z>k8oYwZ?EGzWk=F(`x(pm%C-p=>{40@{gAl-+P3C$0(&0`IPXuh&E1cDW478^=H;b zg^dGrK#0R@@55~Ib)aCQPk70t!#T*f!u~vNczu<4#PE$odssD9&Jz9wok}lanN#L# zcH#@YD-C%eYpNf64_6~z@vyA;A{wAe4 z5rlLr1}MyD8`qJC`p_(AMd!=+!1Ic-CmqhU7U(&j~31xb*-<< z4b%-b;1D^#aN{%Zmm9bSLr5rNYO_vemR}{0rfkkTBEX`QXWL>yg@?3>xe$b9GS

8ef8K{ReTQT1j*|N=yGY3`pO&^8cVFIF5q8r(x&+80p#lAF=a`?4g(d=C!;H#LV#ibs2NtX>?Se4o7ML%Dy?bzq#UFV^!Gucrb zr~|TD5iwI;@m(9~K!*-@go4agUO+gGiple-l^sOH-v?+dS3q}VK-gU7h$KQ?**&(SaZng5~u!~WUzH}3OLsy*#M znHrsjUq95wV90I5UigVz{aRlcQgUHZE?BR~(vcKV%{q5husCt_EBv_}5%`1BI)=T# z?=c&Q7Je1aw(U1FSPOrr1I!KR@@w_K6Q+AH6zVCt+r!<@_sEl};JZr0G zYO4qHXqGcMYq3iEn98q^yCWtSH3=+ll{)&r!H2-#oh!))#0Pc9aLety%^Avr-eofWm zG+3{Fu_w34gSBxi1tga3u%?ltVpsHU7EpZdQBOoV`+MnIzw^o{xyKq!!@M$gEnm0k zuMfJRPbU<6fo#d!7yGWdu0*HJO2wjay%O(@CQJTJxiXJ8ZU${hSnW)HbkP`;d6*KS zl~SnX9c+xD{n!sdEXX2TTj@LzTHQkAr6Lc?B>ACP5jI=MkfyYwH~i0cBL0$=1=M#u z3;;aQhma0~;2qa1$VV6#gg$7Z=+$pNpZcS=p`E@F)qdx5MWv0>hA!8MYj=;wiagk< zWQ=-2_Te?6HuhA&+e+e6WXS+v8l5rn%&$aE*=W;J8Hf1{@Xv{(AL5_#MvR(F0FyBS zi4!vJQ4pzb^9C|~63d)?Ee;FP;q{A9Yb&AM;I}6e=Mv%6G9?lvk z(FO#06q2Bbj-C~KC#D80eVlRxe`J63U+-%af>50U;(t|^QQ-mJoxUr6zF9DYWE^Ug znMT+nPeNfdYIG$i@08k#%@LL-u`qfjI!AziAW5g(ip9}mPofqyLv+Ug{!Xmd-j&w4 zQ}ZiSoR}?`OUQ@8xE-M@FOIk_P<$SXB4-898sl6b`Cx29C8va+pcn;Kbox{x_#mHj zzCHSV03$l_D+zB9{7?ovfR#u$SZ}@3h|t<^4O$X3F=jgaDBhsN2MuRast2$cKjhr* zJ3UhlPf)!(IE*U{_l%0SE-_)R?;S*DX?|-QGle9V@L=SXr?2uzP_3!atg4L=8sOi>(hZg?gGh2A6QC37?yq-DYoH!E*E5fix>#Oe z72aQZ9}Kf~L#ZI_WRX0Q#k(Gccosa(WTF|3kFgr)&~ zSV`GjOZnzm06&&@Ig*b!VpeI9MFqJcgIt4mnWrky;#_|pf%ry;mHRXuAhoc9Xr?7z zW&w&4LC+7?Z$BiCUY;ibwi+@mmmfwncK#~p$FJT9D?W)K=w3tlXDUj~Kodg%lb<45 zLNm_9S+xmTy7WR{qW@Hnv1%XWnfCM-4O_L(@l1Q%qM##Bk!bJs&?lUm{Vf^E*T@Lv zUP;Ea=kd;X0}YQX^glev*d$*=B9yx%i+(q(Dmr52*A~Q}RZ)!9R zwUF!Q!jt1V%#U!L*cxyaida_5YE7}#PdU|3CAp%XpL+Gm@%#yfbN zy77N64|BMFyrfIU3=#}Sk6L|`>p8|q{qldG278V@rGEJd9eef7e~;Fn;OYjUvvme1 zuDp>u%BJ%i!xy$D#3k`8zF>Fff52%VdjoNR@>=)j6#E{q>j6aEl;9CrWEn z-QbsF#O49+*&^Q&GhVarxFQ<7;UA+qL+T4Aci~2jT~Ji zNe{Ch96|po$E-qfJz#9m-IjG=3(#BM^L;LFO&-E&VQnpo-m&lFHu7gnu^RA zt?4CHP7SIx-K(wn3FG#Z>!4P*MUU51w08VKNQ=vt(H%OV zcmA&ryuV!k1eF4j=}7bW2(sL!web69$1lZv49=E)3_6`S-#VT}q2y|hA~S$R$s0Z&Tc)JE>nStN;BY{_waI3ChaT$h%%XiA zp~p^wcPlhd=)p|T9c=mQTVBz~DPEXfrB6gOKT)$t#7K^rJv-BWBtrZ)=HuUJ9lppf zsKO>}$IYL;)On;pEEV^0+}z})4(b1xYMy_O`bWKM1Z~SWbWJByZfO*mpyRTM@L{>W z7WDTNO{Ihen&Ipb*@Mrws~$D62K^T`_y0j=K>RjIa?AqHbyn6@2gN}16FZAU5>d|J zfWx<1q`=?J6W!9mJ+mgulrN*@LoU7CqZl+^)0kt~y*zrQM&l zGpwth%$0WYzB_b{LNM!STwy+&f*60n`8uwdGydGV<`FqtkQB@7T%zo8*)eMtefakN zc1^-|4Zf@HGeLVg!7|be;x~noV>Wc#HJpNMk&2kPKfe7dWqDml)UfnJ&mapLwOz~U z#TH~3kv;wG7cHA?e(fk-{c+sRLE6< ztvBl*o*5wCq21w>|M{l!(uC0PtAN{7jHh^$zb56e*N3)|E~ya|6}?; zJvje$;D1FpuiqR8;MM4&lo7`|rYRtL1U7f7Ury;fwBM9Sj{S#E0aA@FqHY;NnPz|{ z%j*)NY{=s=0IGHE|1+7+x)#4i7eluUrA#wOljTiGLN-Kp4DjETiE<&~;{XfmTJ9QM zGTkz)GR+W87V(mVuaLUjUwCl#Sl61?=yK_nk(OyjYO+X`{L$w@{+As;zZ>={Z2wy( zUnag?|Ky78gCFMC<+t1Q_-A?;S7j)-nn8XnZ`#WUMJ(C}b0bXJ*|?Jdn2{qv+sXcp6e1ag8fWC|50$R_hGl6VtB4(tMpnu zm2w}LX`!8~KX7=za9^!@mvEN=`q)0!u33BLcuu3*hl+-ZR?Hr_6Bw#K-SHw&S|g@| zAdo?$qNB7U3FKjHVjM=Euir+pKhD0n5Kv5B><(=|FRX_ecrguTG)Xv4ZdBQe=+##) zpt*0ec~Q)j0S`Fu`ZbHaxEYrW^v&FQTyo$R-@hVMrFb69DPZJBmU+z`*T zgcfC6RT51qC;AToz_yf)H&$7}UQuz&Z|(gX`wi!fT^MZ90TXlH+D)T_C)kxp&2`iM z6VY*x4OQ-))3sMcA^m6dPsoqP zirH0rA(}|m5B5x3;2mpzx>4Q4z+UZR(gp0g>b~gQqvjv|W?=?=g^J-|L?Ht!e^33x zQs)FGQXQ);!xN%nW{nKjdZ8WSdAB`I;-6UOTzVP4b(+&*_6$yrF4sJX;BXt3g^C~7 zwl2GS*TF+#$kk_YLt(-&{H^-K^o{x}g3YY$!r863)EBt7f)#Uen~*-@9YpPKs=gpU z@tDa)m;^LXaC)&b-z)y%C@}ApHMbeYOx=$~*iICKQMT@J_fMc{u+VQ^Z*J=*=c{zj zo8{(G?c2pDP1>7bJ__nFu)S;)x+ZzuTkYGRwvm5UPM4u54;3XfI%+O1GWu z$Ce6#Ev$NI6bP^^qBh@>_FLYY>;~S_y}uwYF|gN5uh~jaeGZfnVy1^jP{|o8MENn< zdV>bkM3QQcOaz2z`CK0D8mROL2!NUn)OGqe+6~z*@{>haI?>KKg7awvY-0siV{#|V zQ&1en3kR=qy*?e#pSxAuv};UHi&dqUE9JTqob8|Ad3{lYyqNhiuv9O%pIOMU6{!ZZ z6R-@XY}PDoYpP9rM^-1WwWJBb*+_NyWZTW%e@Sk4VO!k(R#wGRBHHoGC7p4mA^R?7 z<&V%0X`j^`lVo)LWuGaW%Aqn!I5UQ_P*yReVt<3=)RbGccc&1euV zJ!!pfy&vYWwQ1L=treeNCIHXF0nuro!YaQCKbhrZ$AH)8V*QiG$^Jv(<_+fr?=at`1pDTay$w!p?WdNgY+GX+IpCbJDk$j&%-9i>b92ww71VNbR&X^aYHDJ4H~8A*t>>i& zT3UMR_!YWlu*Ih8+luEX0gJJr`k{+`lyTVn8vD#(@4A_MuesNwm3*UloL@2n+B^+U zCO`E42Cr$Fgois8Ts0pWEQdk`joKWGn`Z03X=NXr*q_*I!mpWq^d?=G`Ih})pDQNL zimZl7d9n@p)`rla3f170{3V{|WP?ec>gHKBHcs!fF7-BnZ1)P3t3$MRg(<+SHTqvjwq`9wg`m)UwSVBp*mB+yr5eA3||7cCmil&#CvQ#{3- z@N%x`rK(NIghtMQF{qF`<%>G8ns37JWPmQ9kX%-TZ1TrzA}4GhwkrFyF?5K{jrifI z5S9vC6kd`SyjHU>A`?b=L#{C2-S(*ZTY=EZtBZOg9_G;}RL{x)t@vp;=#Y(QEiH`qqMO{u6k8OGmZcpW#;eY` z9HgK<)2+DK>~kHzTu*b&*(2&R6PooNfrYC_7Ri(j5&R`UTZUDWTe~MkyfVSlZi99+ z7o3dp09H%NQ=VZKjhy!h?`uI;hQZi$CgS|XSDVAys>t(SlFej5U+sVY3|Q&myRWD& z8}qmi&!4-dYpaTb(?U$ShLd$G9p)v(!6EYC5HC|~YH&!h?$nrmX(!v%m}YGuQ9b?J zop-Vs>iiE^HfUHGWrd<~YrPDA!ypRsh;G%lA=tbci^0B1W`NQI z3qa0+86f|_iW`C~Uo6G3=6S7$+KT~-9iQK}Z_k+7?(#Cq<=DNAyaPpXb&zIHL?NKkwZ?NFI9X(Y9W;Z0N8Q!nQXWV9m`?b zFtT-Xl;wP_`4BRJe=~u$al3VNTo!2zBUHhyX&u)E_LvHKh&nEHwrUUmyh3j-^DoD4Xps@ga?^}L7b62@* zlCbJE1S8d>_7EwTpZ-y9_3o$6boI?ujxCx!jE!XK@M;DI2EOn0E)p6wzm7o8WXfb> z9(SqVa@bT8QPZf}q8=4tp640niGq2Hz~_u=V-N9%PSN)3C7+yFcYHFrxrmCSYpO(xA@{^xWt{Wh!=CI5HKnKq^K#6S!Z3HPwM+(Lc z_4{ji8vOB^i^_8V@ny?7a~_+x;k8>yEKCk^8!`9k6q}yd)PZj>MJt&|AGIzuVW@V44jK(+-KbqHMcF*3NQLV4YgTcW(rc=1 z4u>UU58jzZK2r)I)f6(d>KXt8lRdt0^vx)ROxAnNF6&gH>4>YR3)A3RWte7syHVd| zg-i-gUkRP=mQkcE+bw=O7b^8mUX~-Iwpw%)DN-#BE$d4Wv+*tVnbO~-AhO-i8%(LF z^s}U{`UV2m4(Jx9YWHY{0W9n*WfN@d>*~0cE%r5v@oW3=YDqw>Ip<}dul{NNNhcQ` z*Kkn5op1LsIPeg;GEaX=YyaIM|B{$y`Rn^wu~jy`Hz8vSRCH}=(Ni~gM5NDx3Q z0{E8RoV6CoE>iMjl)1C!NY8SGWj=HMc{{?y*p4S`gz1tvtKl4+ko9fHb2P%z$Hiv#n zjbw)RehL?!?@WX2B_bCA=YsS!?FA|cFM!v!qn!?;d!7SwfU3wv3^FY8J&LpXORte2&-)Jot00S^n0OuDozoGp)tQnLV1zPm0y_lW>~$fa(7!px83 ze#8+U8#-=E{*7s!#tgi8qyi4TG+mpxem&=2bI+4lKYwZ9b$*sRLH~Aw zBKGh`)j2tejiF9gX1J_qR`o~lR{VyIjf^DTY5{pYIEKBU2h z5ntKpfsEyn@;B21@3&+{mz@2Wrn+o5%u0NT#;>7gc8!yq@rFuM(OOp7bt7*(Epk@a zH5#{TDU^NrbIZ^o-jYSUO(`9Dq5&)@`cf^Ckj@4&7Y3Pw1hwM7qo_RJ%9WtjBFTP} zsX>w>Y6+5)@Q^27JjNZzn+}g|pr!&#EUw(*@jB;je@c^-UU)9JIz@WjDq9~G)F4jS zozX_&!(YVIhTMh>W#^fS)bL2lS_2n`_hr&kU;7E4!=cZ7+}??>8(zIXo~T&MXPK10 zIeo^9d2d(Tn0T9zb=b|oL6UV7cd?$;!%%^j)uQQhB6!^2vl=JY%}`N~wh}kk&ESZi zr5~syDks@Pp*6QO^QpcStTKAuE9KjA94w_ak4w?_Gqjy+!VcFiJscf}Vr#Z-I@$W# za1A&QC-<-Rt#Gd0_m0}NTee*Y@-VPlkR4u>9o|?mu}^St>Ny;$)2DBTelssF-#+&o z-**__r*`#rtns3OB;8(fz1Q&P4Y)-Ifs3|(fDte;U!~>R+0(q3TVj}7;+R_^w0F$e zJ%eq%WV8~`YW`e@5?GUPcLP;cU_~tMCjd?Vu2^` z$NrLow_9mBrvwsP4B;ac41!`Zu71Abm)PCJ*eZkUDuWK-cXF%~Pa+~oBJ7?D3Oqn+ zuPSiHBAsy^MddpTJW{B#H#*}OPmrO;2b_P zN&DWgxyY`EW!{dbFs&8UURniNkD!dFW8?@BNV-fB45!ehR<~J?T;&K*eA+ylcXuq2 zg++I_M&+UR#5YVw@%Dmia*gWGQj_tK`OWG-U)nk6QXvPqX}bD0k>qDgR zSyaGuD$XquJzV%i4DZwz^jCkH+h{4|8PLfI+f9atrpd&ov9f&)>#ixIP35IcRlvWF zCb)JF^W}eXeIDjJo%D)Na&;!48%!N$hK%3mMH_9;YkoU4Y;0Md$7& zx0lKYwyo+eaoFkMqBC@pghN)wRsmJ9} zQ8VmUrkvrXOps$A@-I2&@v@sOMvE;@n3>C_$tU`~P}8*}aBQsCPnih)rF`K_VO6ny z5%!ishH&oPRib>@+eQ43O}=qH)73o(DlhZJ`s43t)vn^?!&DY0vdm@uzcAg(6r3@n zv?;VH4DCOv`zle1ov+m&pVfIr(rSLG&0^M%RxU4cZSUl{PV?-TIB zV@fwrOFIyi#K<}DA71fH(<}Mm1W*|MLP&74Ab{b{SIN!DHrVr z!ekOll&bW7vBDgqbdT+M8dqP&m55jAQ+?TherBBx(gd8g#24A9Ibih1^Fey6kJrZQ>}vY-@=|B%a##LLPnEsctG zLpIrViGxGdXF>WAn|CB)7b?5J3jLh=m@`bpy`#KLc0HOY4txUkXW`niEu@pDxI&}# z8Xj$cyXEKe-+)@vZMIib7Vlf=(Gl&F?A!e^J~=T_D+|DP-J!dCo`uXkVjae1Dri8l zQ)S4zQ0Bqxb)kKs$QfVQBJ}Zqwp6;R<+82Y`P}nJI}!K!BC3dYK4x%*_-Q*PhDGi$ zFHjCpn-)i~yJg)PK5iR*U2xv2Uuf9&)zYqa$%C|HGY3E!Dk8h;cKg9F2&s~+S>=kN zybSuLGDdVj=b-ZN6msQXC91V$Mnpp}dk(SPXmeIJdUQSP>b&8#x5I6>i&*Dd<~TmO z!vXs-^KBVM=iWy9F=sAaYtc+}we(!1MRKI+2g{4&HMVoz4c*11gK=Qpa@pY|E;J2X z%_Utx>%AA}7l_{Jcdh6+d_Dk5^qNT=wXXwR8+`Z??3GDX=CbcO*VZoMOA`tkgcP^xS5qwr#3YbL8aIWJ}nt2Ek@jO*-;vQCz{9=*<%3#JYXngExN)4uTp! z-C=t*m*Hx$+{|89z40}*){WN|{%X*BV`O`L;xcNY!xpd3$SKmOhJ;Mm`}hd0KlMql{HI%_`VNRv3y@5@}+C`#e+c0%sYKd*V{ZmRa$P>LpN>>HQJEh|6)`!k5IL4zs#I_5tJ3a|6=gF>a3JdaPsiBwX6F6VpfBg8r4GeqKi5MJn0~Nz|DWxu&Ajy zsUfM@@E~jP8DzS3pj8&;;ppV3j=Ye6z|H%;b+%O!+u6~>QLAgQc~OP;n{S8j>nI=% zkVf^r!~PVMHfDZJC0FED*{u5$yB6jT%xz?Sm{j9a{@LtMy(`ehMX!9cJDhb4K!*atinN;Z+$Z7kin%!i|Aapi^vpIrEYTxptxTtD* zq%pK#wVm@4Vn{EypNq3v6dYViWBOQ`B7r&aN}0Kr6U)@D%gj?7PHsqK)lJG}cdVl4 ztg3gcs+TyaNm;8A(Bro!k63=}GoBO0I|5>+`qju&U0E|~_?cdc%IP}zLkc@lyY>Dn|718m|_!8RleZ`I(F0JgTqu4 z*4ewbp=M+oLo5qKpiFN}&575gd4bw8BH%AxrgX4wS!h@SZFoX=L;`I@LPL)%ez&YV z7+;q_>3s{s$me&{{ ze4)8PBnM?ooFto{EsRz}Pd4pwmwC?&T?-}BC7u`Y7Tlx#=JHkWr^EsD=hiD#k#zotj_2F*V6 zeO>G@tfTIWL~iSNCYyj14zU@$5G7BHPVPz#Ye%X7%N?Qkl^VIMf4E#PD($<9KYlHT z>s@IsOw_MBw{QAkv%H_b0eQ^6yxvYmYu?)HW=*wuMhKPl+sxWWi7mP?@`K zqpm3uf{FYF6Maf6gS}&~y%X5#Jkw{4(BVKh5Hi#Htu@H3>mXsTeZU|)wHb5q<6iX= zRcC=ci`_>e2g_DU7P}}S2MgacZwfwuo{23S2d)U2XdP^otL=R5QB4P3%2i!#Z?M@v zXg%-+m3g;&i|y9s^EuOWtKJ^SdeB|ZoI~L=KOdIZ+i*6it=qp6F;t2KtR27iu{-v@ z0fjNFU{tnd6=sE>V!_gjOhvkcyR>Nz$VRRnjXr|BwOc&wKV9dd*(V#mF&|~hb4uNM zxq1F6n2^l*^Ya%ts}|jFM97?3Rz{Dr-tD&jxPMhP?Eul(Z_KUP8kq>09}n3A;oN156$#47IdHJeaVmn?8Jocf!(C5V&!Wq&82XY`8 z73Fm#1#)PZKHOgU8jk5ha-mqO%)V-Dvvb)|T;59ErkBl~Aw55j87uNLDCN1Y*q9%;z8cn@k5<3nz|U<9D!*3t z2chpqBq!Pkoe!FOgZ)Bb^T|u&JTPp3CX&8}P(6{iIh*&4v1eP-d$n(k40qdYymW_~ zs#`5g@UxN2YbC2zky@*mx*e5ktxb~tg&mAB z+-;V#k0Vz^vgJ$@qt3;4P{-x!q;{#=5!1uvip^!$I{C5bK@O5_Y3oz?M1j&>ZN<;g z8;uxMu>p=+FD?xat67!JDHEY{!GTVy42x6UQuM2F&B%_|L+>STle3KLTH+@DE$kP$q-5NcZO8CaAE8Z``#QNqxmlXg&jT8(I`Cl<;pD-ac*A5>uAS z!}=_Az60zN)jODhCkUMzY()Fgz^K%O!ctl%Xb4{1a^>cUS>~PfMJm(Dhe%9D(dJOI z_N(K9dBLI`%$)tmxJL3q@{U^Cb z0mm^uxscIn&q+|hzL*)1_BZKAIy7Rh*s?ag+?~r?7qz)+E3M274hNd1`q}-Y^H0X)y@BM6JFkOC^gy<3`P0Gs9q;fJ+YRk~PWCwlk_fiD~ zVG?_dty^3})YFm9YITXnG~48_$7G)(&H~RL&=(^N{Q^T$V zj6z7iE%CrfR#3)AsV)<$J6#+{Z!X0QlB6^q3@ealld|5J>nhh0BBYC_rIwhssF1A# zU&?HbNgeKb=2iFzB60VJ=cPx-zz+RRk&q(YgAp$|m3bxWzv3sFn=^zY;JW z{Qhzdi0{jbMX1UI%_gj4=YUa4>HMff3Gud4vZ0^ggf^e3fe)OLpR~Q@<1I4fD!{m> zim~$X7pb3qrvkdcgr|zf^6_Aj(~)0L2~HP_I53Ix?_Yq}i^@;GZ(cSv1#%k-*>f}d zr808W3fW*OV#e*suwnj&T+Zo&vgShQMboF>CAi%et=#dVDW3=fUk;lhOjyXPd1rEF zQL(H>Sk9|CSe(i!I*@qE@WwK6`JWe~xJ)TV9DoVVX+~pk_s#oPOHvo-x5Dy^ZMXO- zCZj^W;so#)IJKXkF}ybhO17##9W12a?If#!btLzE_#~7_`6&9caHBZ);{M_+;ON<~ zF~L8FcKSGh(oY05y)g6n&Rbu>L^b>3a!1}ol@EUKJE1Fk+hTTA?R0FcpRYL5@rb@_ ziLDFt{o>UnS_iS0&Lx&F$xTS>8t$x~cTl>5s#-j_F0!y{*dlSPPyDT)*iLsz%u`>^ zdDv@Mb}P8Uq?~ET<|I}RZADe}z@@YF3U~84*if0ytbCT(_D-%WJMee>Mpa$D-eW@7 zc|c-{!NuW8UB~!d|Nf1*nC_a?naPO6ODba#PBFx7jEQW)uXkwy$KSSd#^!=K{qy#+ zJ4LMaYBqB2O!j2PTdo592D_i=wu3O?q<7yR-7rTKZXFi_;P%tF6ce_Ze+%z$3DMlE z&kZ!Qvu=8iL}spsS6F$4CI-VV6TGAR@2<_4#gbBf9-RxRijGy?cGGIi)tBpcpC5&r zfzF=FpDk1n*B(J{Y;Q5V5`Ez*9JMq zU94XtZc?$mdDALM(g^WCxNUge%UP#Be#HPSzCh63D(s372Y@oCI3~`o$d?t@)v1pK zmvcQoW1$R0Y3IE{zx3o$$zqs51Qd7aM2kEMzY%^T5-c42@*qtuoFB2HLIufC8uj3- zT^8y8dhHGKPVo+)m|upislJt7-N}$kbZb0j-B{}??Xu~zep2<>cuhW_)g+eEIkA3x zoz-bozhuvwL8CmwU64qnQSgDGFp-Liiu_DHN)Adzr9s3X4Sf0S#72AsFla={F-X6Z zYk*&T1`?^10X9(|6P}k~6&vVAlDU;B$JbL2>)|t=*iQeURHkZ7Y6SFIGVmilaV)^T({@R_2kD1=hcLe() z`zGaBWhR>4d7?#6S$8dW*Za8pVkN3&CR#Zf&+2PMN3-;3>iCi6)9DI0I$Ab$p)CqC zg_R5Ic@C57We&4f^Sm~WGa@VqJpah!gbzomF+!Tb?X_|D4|wJlR|#TV**5i|K2|M# zMqI+#_Vr#xmGrA(`OLHbWzg(I_3NBQW1-IS2ZO0BJN=!*i z`G{tw@@lF`eBXiDJa3{F@P!D~U5;u3v=0JqRD7dtF?=-2)2lRAo-QDh2e;{UhHqBS zvEleiugTPWUi+OYzefKaKTi#C>~xauXgPD#R${mJY93@Ew+D4<`>`gz>s=jpcnMOZhK+3JuvAW z*uW&&<>vIaS1BG$Ee(QBHZhyiL_LK(frnebrs@9&WrQRx=o~l~Y1rpN*Zqo(uf86jNYkCRo(mL7eJJ}OC*{l4= zF9PrXmhfyY-UXR|4l>{Ft!3z~J>6V9`e$e!1))#wWJA)@K;OcB7nU`q}lF+fM? z5H41G*O+wn`tt-n?qgh)^DS1dn|6YMKReyO4mHC6xl#Ye|5NgT zpPl7D^~LQ)_}7Gx!%Jl+V3xzXVJASy5mlrj|1a<>Qt^2UasCAjnqB+=Dm}n12k2y~ z?qqt=E=Q#;5~+LqDd>&s_ct?JV}!#Ytvw-^$haOt_G%*9GLfd;eKkPZ8j~-J)VPb) z?2Fa>^RiRbZon_OhBa!Jn>~5DOf+Vdi4lz&RPzdvFG>()^#4bHQQkc989z%K&j4R1H^hLZHy-#dePhQ%*7^gN{q2IggpZU*7JzmUJn-l+Gw83%IBNiIG~fZrazd+2bAjW+v!y`up|t_jZl%)f&O28o~K( zNF;NWnT`klwr^$U-a*RVlgy26mVA37YdP31uRTh2XP?{^ zj_%!Fm(}Tp+T%#RMg=EHKPme+5G$SWK$HvOydn90Y2ioVm-xDmsMZfT*NW@$NlryK zoj>isu=euyZ7;U1qi@!p6+Twi+)K8J&F#vebPYF{5hxpYhAQ1Ar?KzI;GltPXPE?7 zF^RnIKJ6oIVrwFC{nefTVXsgh->#1f2T>e1SQfHqChU4N(V@)JkFWHyg9onr*D2gP zD(}^R2N`>SsX$w@Q-(la;7fnOP{n$R0q=AuJ)Tc5W$PE($<*~5CCtc|hG~7N&lxv!AX-BIwneo5!toYCt#>8~{Xdpt?TA^M2hZH^1@~+%h1Shi1B$*>!hv|>V z`N!j%xZH1#Mo=E!4Ypac+`*h2MwVv%4!`K)uF$07Y}nVyH@I=9-*iGtn~7|V+yV}eylZl z_m@Y->&_P;%xl{QoX44^Rf5qqqiQ%aoib+S?;;Z!ZyQ5(gMc{1as@RRz<2#HI%A>J ziOAM@fbT+#^JF*4lNn!Pq;Rw~M zwV-F|j_S4kgFBYfdSklmxkIF!NG~NUTRJ=PX_YB|86mBEy+iITJ`u@>LR=)VNH6(- z`D`{X@wSu*x;i8Jindazw`H=krLw|b#V@SI6RpL4ttqZ+lBW{xzf$T(g#C^BhfF;d zRXz4~E%^0m#QP}}zw7nyH+|oK^#PAAq`+ybhuA^nG#o*%j60FDJMgnRvS-EF!e|=R zMw|+0_vP>K$5=iYo!EnJs!%n!TtCv3rd4Az-;|VX;l3nNXx>bjhIJC%6wXr5^->qA zI=i1pBY9=K?obx#P=52jOx>aU0^AN|t``W)iwKLnc@Pw_ofY4|5CA@bfKL*@CuiVO zC-yB0_HDS@u_*9~1NdazAb}1I_z3Mrf_9TayNRIzJX8U1r~;78{0YpSZ2KR)`yY7w z9~Al@n9cl&&HVAq{4?yOqcAuE@XVen{zszu&qD0|hRpzKCN+92K3Xj?Y7(8=jmZ(f zV)i81|De+Upx&XAAhSb0;KO6np@ZA&!vk=7#Yg#ig8FqV*ntMv zfd_ya({Jqp zP0D?h+!P;d_ZPhiIO`zQT`m5?vz3znvQcEoN|<`@i{BzUuW%h610!&a7r15_(N+#{ zPx-gz*-EK@9sdQB9&}4~_E2^<>uo}c1mZvLAQg8Tdl?&A1Q_XT-t7)y*;2+UbsMiQC&q z+S^F|$CCDheP5fuGz?kT>6_K@u<(LCh-KPQ^4FrKzDe5?0__Q9?U&GME!p~$U%f#0 zExDN@o7o7vnIf8*qLA5$u$khUJOzS01*AL$;yeYKJOzC9LX3Z5`63hBW5kwlMtf3H z)d=xKkhw;Xl>fG5ZBgov*GgdW3lSY-jJw(n+``WR9atQHZGdJ1DIFOp`-nTV9 zDp(|TtlGi=`)hbb5F{ckA|WD2E<`R~E=(?4P6SFz^%#Nvi8JJv6IH(~!5~hWc!<~C z>qwcmI5F>BBjV^Kbmc<4Zu(rP$|EXhrX?+Kp_M=nY)Sw|qz_?WzoH})VC&WUemX#e zBPI5+bc^^7jub6B6(iNB+-4kS-1j(<0C~V~9Lm%5?0&{OQQ*tF572@h3INLB63SXo zK^cHWxM|WBtk7E^K7g_|%pVCl2b>2iiHF>v-#Gw1aF(Pj!~k0Ze`B!)R6@Kky>V#% zMy3=VQ%uVj0U;4#5zvUNh?EGqPZFOhb*Y#E$!O&vjgrwd@{5cJY>$M+=O2@dB)BT5 z#i1U5f}G@4kF={73@*R=30KXth7vcO)lCBTM63;JJ|CXvm0}A&?d<{ z)}^l&{a~}^H)@E;%sD8?x&u1)8;EPIz>z<%%erq-8JE#Vf z3Mv4BK^>rYP#Gu;)C9@~1%hfpX`n(-45$;74~ho0gHk}%x8HATZcA=MTE~3neb;@b zRxQNwb=$_aN(sBs^g64`#(88r za=U;7iUYNScL!e&_z!>w9}e6Om=6pOd=ID&G!9S?Y!3tvkPoa5cn?$#$PWAuC=UP! z&Ib$!ga-n4;f*tcOWeHqW8cn~fd+laO}qB)O)>^1EB~yRuCTAjt$bYZTKTl1xq`l8 zzaqTydc|yob46i=XvKR)W(9x6V}*6ac;(f~mlgGu_XZh<6^9*%d6gqoH3tZ*_L-w* zS%kdLV0QDuN(SN)@#atp@$)brVSb2iL#;!uIXs&jzw5}Sj@b78wweKx^I7HDhgMRcOs;^?ogURd#h~t$5XX6}C!xq=E&T@&c2!4;=tR-m5MroX>)Y zMEpeF{LdE#5p&^fkp$t-B3#1tBIm+r!qFll!b~D|!UrP6A_l@MBJILHA}GS)BC;ZM z!VcN>+2`5O*{s!l<>%?0D%Bgrr?j1fj_U@;4rf>Am=~C*nAeaq$fe4O%9YCb_{I1s zuMdHDidTw{4rsyKpd+Khpi`)$z4N{UrL%I~d_7@(X5Hf$>6nIm`}6IEX!*n;+MQWf zBHKavCC|;>&D}lnZP=a6jm-VvE$v;=P0_v8?cUwqJ^pR-o%W6P{roNO4ex!^t;gNf z&DA~TE#wAruW~znGkz=Ro8>=VeMzBP7x*58s zyDh%6zOlZC-4fgo+^5{?+%4QJ-1FTv-!$KQ-d^8f-C*6v-l^WKJXk-%9tj?eUP+4+ zu%l$Y3ZTG|L*@+h{UJK};V;3*j~{V9l6}PcNc@uJha?q0l`s|eD<(5K^Lu8j3e*aW zhPS*(O~@W^Jy5QYFp>4&485j%Q~c&I5G_zqg0=+pWf8m|LLbowgGx<#b&2iYUA@1; z!bHWyfV_iXLeNyuRo<&$jiZiZjAOB)vSL)dtHP{8`}Xb|<~Ot>^rQDjSY)VV@5!*T zQM2D?qj|g)k}{OT5H-7r-))3!)z^$h7*0V&bt{f%bPE%K|3N7$ax_x-_U z=4~5c&6^9gu zTZh8JVBrLzDPcMxI^heUd?9?{&7q!Q*CE&8SfQ~YvEizr6Co3!LVZ~P*1X7%)K?LF zR5CbFw@(D6(cCh3GRQz=*)VAtnL*&7EUk2rj1|yIc261~h%cKgtt~SToR{U5X#zIM zdPrZ%U;;5^Au=k!Wh!fG7&QU4k-D@d0gr5!dH^?$vJBUhZ-eOaheHC=kEA%HWTbec z#97!`Bw6@bgju)_5LPg2Bx`I{R8>q9kWac<#uMl%do7J6V~{_TN0(ome>jCUrN}{B z6a_b*PZh!k515te@@f;?MO;Q+#$rTa#Kc6zKw_em!OD@!v13tVF=MeTQ7kc)5tWe2 zXom;~h(q)t_%QM?mNbeqk~B6eDl0N8+Pz=@}7dmMEfLmoj6A&<$4Xdajt zoETyoY{!WTVf~`QkNX7t1XZ%Yxdr;=F-);>uycIk5awXy;N_s?5a3|p;Nqa0%G6EO zjn~cAP14QyDsQh~uZ)mGs2~(clp1IuG%B6GLX)gH3ri{PPeS^Ay>`6+WUHX`%^Dkq-9vpkv7D{s~xRWz$C zbv?fP>5w*b(=v3@8taR1AW;lJ+iChIKwo?SP;ksbVe-mNydJX!kDs*rP|}<6Y!zMe zH3ok=GA$IwyXpURKhPvdCgvgI`|C+$rC0SWWIHg?FcX&GE|T=qp7va^unW0Oy1?q+ zCpL-O(%v*qqE4v((RSND60W$@u@oX0vH`DR0O_;^Q(U(x-@~CO-mE6#MQ;`_RV;>H zIggD>!#h^r7Noopd-K45QeH>24soR^F(ldTh`4y{k#n0XjN4E4Blh0W++;RHCc>SrrVv4mnEwM>a?gI{uU8fz$~yBINUpZZNZC#( z&`o(D&}sQtgOR@RW`?st&Sn|ntI{U9Oy&E!Bwj^Ij$nKR@V9ZlL;JHR(8L+ z`E+uiQN8zd#qX`n1=G<&5APCBMe?rL_Xkfoni=nHCjx}pUpmQi8w#1X(a;f5w0>Q4 z4wogPo(%<-zFRfg&ax$qTQ|hyRBtE4W78s}#K6CBHfX?AeU+67MLWU=&4wb}S(9Yo zs|hk_v0J=b*W<#cr;%Tgbh-qWtO*jJAEp^B5LBL0mFb601SZ{6e&2eWcgeS@!}@jb zpWsP;s3@cX58nM+jPY`iD(~4fyg+-~#^lbibUn%(yRm;tTYSS@R>~Dq?r;ZtGd@0> zM2g5^_zONgca^N-4=8#z5QM#U7$`Gd~oY8w0t~a`0BJ?WfO1wM;7ZjWA@x;rMAY0 zc|S(l;e!L)B`f>=iJNBLQ#98$SKU=Qbr#h9&HXT-; zT`WlcQprQqm%8aWp<~SYScU;p1m0pdJ1CmtJk(j&Vl|vOzA&ScjRdt*;=jj9l)_PY z(n;G3)!+f>I;&!U!hDy=k9co31IxvGLFcv#F{J=inv3t!Vu#TSaWMU1#OJ)gOL}kW zh3~=@fvY(9(0g%pZ7b)hRu3hU;60N_oA;%${nNKwyn4}UWBz(=ALelC__{w+%aVyI zaa`rzB;X)Q_d-1#Ne5&K5*8x4&lnR5tD8dt2&P*v%{d<$(2r9Jzc_qlmbYFx7}Uk` zx_$|mAYuIpt;VGKx;?JTfXE+ZPR(qcSt$en30|dxEtHk zbr2IUu3 zcgfn1l)O&~weXj)1A!}lYe#D_AB>w>9_kowvGXGyU&47q>n9DM7>xQDlBp6_goU$Y zVni5CLc6;}Z!Qm#9=6l!^kg2~e*W_7>8#UqD&+>N$L!M+o5Yb7q4r}r)Mc{+CWaL4 zN@ev{T3-^fd`Ko7KtxIax@i^JB-+WXJwc^7^wBh7q1-i(_H}0n`|dXT47i1J5$wkV z^K8jpeLtzbQ8mVB4fpPm){zk$a!yn(L^mMUOJ4_Al92)LP$oB!3MMFe7zuLTeWx*J zSdk}0A0G49>Z5XXSJH;Lc?>>i>};9FFa%48&`SrRY^TPRDb4k;m#vqrd@SBqnR6P< z7tHq#X84??(>bPDA~=Uyq+h9lrqsFogO^L$Hf4G2LMwchp(v*ZO_&R)_MUMsKS+C$ zQwr&f+%?wp19+6Zmv%AL2PtLKEDVj1^5-g@CfeNSJ4&{lwENJE(2O*wWbkBU$S3v+V7^?YK|P(w{0@3 zt{y)~Mz4J@0ZOxr$!1rN@EDJ)iB*$xtZOXSN^9t<HqB_2_DFtD;2ZHZ*B-$t*Q)F2`6^qh3Fm$5o7Go)NJs3~#C!j|ECgz~M{$jE z^ywVOGuYfP58Tj_DB7NhRqXo}H!b3tu@^;Qw;`cO5fOe*$IQMy`!`o;7i7bxu}fAt|$Y%7(`YS?Z7`*)KP&^y$GiP zwE?xOz&=m>MRkSt>2ZH0xVrb^)bMxCQGY{1ox#W)@0>HytIwfq%r)Cd6Aafi&xH?J zXK(K}hIx1G5K_YnN!F1$7s++Oek~{Ns8_C`szf!hC16Hsq57Juw8sv{B88fIRFhX0 z-6d6O8$ZX@1C&Iv9--c0cQC~HK5Q<9Ut+Bk(6UYxY=!5UviEG`-}ll7R)C^}OcsZd z4kqmvgolh~g{y6L3C93qBOQ9@QF~Y&TCNJ`vg`Q*m7w5jye_Yy@J1_#5LH|A<+lNf zU!JwP)HCL_&pR7=mIa?M9Xgw^0*afeuQ2^fu6`~H-F{h){fcsWjd%57?|4D#Zr?Ix(6@EcE#YP22{bE%{6-Iq*ldN;B zyWM$@MOPUQd3`B|H`TV+wkDh1rGDx@5zmmTnx>@Zsw>OG;~Spk4ZDDe=N~7QLjHb# zMm&6@uiOt09%K%48b}{h-B^t>pIfUG7J7~sc=p3iWZk9Q^Kbav^WAZ86+@d_@od-Z zUnYVmHfuKPL+2}}M9N!QYdmANjMt3ULj~iV6>Xc{BJh6AJB<8-Rsy^nDya|C7*1hZp;9JM=Uvt**u! zDvc6e5n~sHFeS6*C_X;ghT15A_nnybOFocLhp5|7cbX`=kj}p94<-O(Y-2Uwm@htK z`;Ap6ynMBUykQ)ppE$$ixS*lHWNbYZ3p{8eP(Q++sxIjlCRKYRg4!icjtOcGRKXFb z)VI~O)V2G{Vb5vLgJ4JSBDhGn8;Br;Dnu&8%NPXcDPVN?H}Cwpzr4sX9OlERJo7}v zU_bCE0ADXzUt3q(U|x?`m)D?4&qM!8_sRfM526b(P|+LL9oG|N&e9$) zt0k)RC|_XI$DMEBv97G=)xXzA(M2%`*OS#B(j79O(<|1u*0nZ(=@IA>7^LXEMCs}- z81U&g>oyyB>Rsz&>0%kg>Z|ImR9IKSDhVo$cte$~xmGfHyIIT>mpPj{D%a;N4y=j4 z5}Of!Beo>A%P`Hb&#=m{$uPHTVrgKhWofRgt88psdpCP$dryQ5!kxs4 z#Dl~=)2TsVTyR{7Rj@4+wRqgdLomzVxWSYTeDS71qC zOkhS}XbEBX*Ko`5$Z*&2z~1?r%QyEUrz4LeS2DLI!B_!RK~09YX>AUF%>Bssz`uqBS^bhr6%bUxH z<-KM2^7itv;Ev#y;E~|2;I<%a-^smApn1^2ZDq~4`L9aL%u#0h_}bs21F}sr1lb-L zoNSxyID031Kl@MiVK&To(->jAXAC#qHa=eeyS}x4w7$E3Ai61v5ZxF3^UXEKJ;&3; z%@g#2ENcki?ER1(K?ncsb(Za|noyi${lhxKy2U!ty23ihy3RV?y2u(*yi`9~-(SC4 zKU_aQv$eFdw7>Lc>2L`q@Ym*&5|0agzAFs6)@OvblF< zXk|m_m(Z+GpU|?})4bR`+C1Gn*u366)jZI=);!X@;MwE3=sD}zx3DL4AavaR_u!1_L9l!2_~QN% z5HOu{3VXbKq74vx7JtTmc6z3N)_s2aZ1K$ftn^G0P#=&R5E;-KkQ7kaJ<$ETd#?Lu z_sUC8J-M+jwkHM`J9NA@IWa+Hf2Ac(UW2?EXi9-Ehg281EH3p!^+$lIn(0?lpsAaw zp{bdvf~mKuw&^!he^Yf+8&m0*5PBn1DN|Qd15;~LRnve?wN1HAuT9NOrA@;h)c-Dr zoc@F3E0%Y#89P7;#kIH1)V#*gN!-cFN!Q83Ny*9ANyEw3Nyf>;$=FH4$=ONI$F5lGO7 z{dh!7hD}C7hEGOFhD%1C{UMtu8<0(!P4Lo1kr?9}6B^?hldpeV$5|&^$6F^B#TF$I zB@zXEL(9R)!7@Sjl>PuP>L+oQd4S4&BK!?JgWkz~E-?FvP!3wFqXyY=O2A# zCyFl0Tl(tIK)Fn}EG9@V$Sp`EC@9D($RS80C?d!t$R{Y)M&HKWM%5H;d#NC|Sl-w-dgxu`hG~A5dWO}*!e({y}1^H_E zI&{!#p3aCmI(-X!E z#0ceS6Vfb1^>XYLt`sqqFy%2-Aqo&>6*(0Z6~%F-ad}=k0@{>MDReqC3$zCD8Sw@Q zLhd5U-1wEfh>`INu zCdRUo>xkC+D%@V2>Fv6Xz*5*4P4v6+eBE!`&M|Mw`v-dam?}YQ1I~cF!ONo(DI1#F!1p3Q1b}!ur*RN z@;5R!ayHU7iZ*gI(lm-RGBxtKQ@HcHbGuW`B@1Q<=Cq~mm#Jy~WgNvDM-7lJpwfeu z{?eJ%;nun+|ESARVCFSY5><&}-*UP~aWGt0FloHVZUzG`3V(u2z;odM_!Qh3 z9tmfF!{K`HR`@Mk8eRy;gU`X;;TZ5SxC1;3E&_jqOTnq(+wjkDF1RZk;$}^wQ(DTc zz0A~^WM-MiX_Qu8QEp#>FcA3R;>7&)XsRVO;#do2x>S3S{m#w4WB0wFtu|=fmzMR`MI8yJ|&D=aNa8U6*0`P zaj|oK;u7X!81K`d3Q zRIHb|2sl&9QW>?9x`y?4t5CHE$~3f=%9hK*%0#su%aOG(Dv8v2+H4Ky`pX!!X3DL! z#wycI8cS?#=Az2xv<}L6H65y!wHxbgRp*|{q_kwqAUauPf}h>1%JR#&Ml5;s%;&Q& ztp@C=GRF7n+?NLJHxSe#bFJFj^fGS$&s=`l zkhW?`wxLL+x7B6l{@#A*oMKsuPIZ~F!J0;AskhxFWPfe$z6?vdS)06ERL`%it@BRu zvXCU<^X`R!-FOz-o>{9VYexAP&(7V>9SnIlY)@uK1~#}$yH~VR1hd-R+uMWT?FkneL`sRa8|} zTjV(QJ-wIbr>)F9xRlU@tJKPN44l5ib8d@2%Uq?WU0-LVJa(5J!((9Ew16mEGI0H| z=QK8zj?3e~V{JFSU|0bkW;$!@5I7#aKZp8q=KO}8U)~n^c0cqy#66rmlsqgxggop# zG(3zxWcs@LfAN?12l;FHJ9N=>GrVLWq3#yyW(#27NEb^MOB2g-oG|%ivOjR~vgYb_ z-IdEVDn9Rr!*y*hsmD&!=KEorD%Dp@NNcJl?_24huwtWYF6IF8X%hyD>H^(KSF!yk z%w9|WJAQV($$I%6IF{xc41S$>sx#lWw+pZ8dl)Iko^dHu0Sju7d>Cp;DhnG1=2NoOQJ8=G>BqaiC~~ly~rS2<_UG@ZJp=VU+F|pisoxi zE*D-((!r@}N)~Zd=a0i3Auf}wh~^(dYqgz$Eh<-BJ=SXBR;wdAmX}Ug{zxL^xz^CT zH}{I0!9CJFf_mQ2*`n2%8$5^WoY!=Uok8c+kLnavF~vMrB0oqM)X;$4W~#5*@{G!$ zF#oSIzw|2!WuGzqi2d&=4in^Nu23mSrItg_U2f*crwp8o$-MWlez}^+o49{Cqo3yA zhptVL7XW(6CD!&Vd7O}GI-)LQ{%-dm8%_`=GHmJmHHwmMiGP;Kc9heRyw`I6Fk{Sz z0q5w^a^sc|!?*4SrD48r{Y@_ro-g)&PfGl23%Y_h`L=PKH-+kPb904iow&#e-s(Vp z!?WUcmTc@UdAPrjOOyO%&l8ZB5uWNt3jc5xKnNFHT6$(~M`poxmzL#=&F-0;55P|! zOqU9CV zMC77@cI!;RjNIswi6Q4ujoaNuDrdJ%K!2#(bIXl2?Ko2#e4+gpYqG6S`-Al?wetDQ zsY|%M{dB##p=+a?;XkEXzzK^P`fy0sGhMx=N2Xtg1!!^YS3Md$XPcgxtDS_U4&!d) zjZHMucXFBc?KCUW4zJtsJrEA1Y_*-vG`MPK#kql&=1kw+FeTp$TfMqM`ddoVAF0;>RmTQ zWxh3ZjOfDOBtJh1@_KclvxPUxQ(hoiuF@odTf+-&+$EMoy_^)Mj^QugKOEa19PaDl zGqGNE$L5DSRkezP`L7)1W^Soa3$lM_^c3E(G-@_fQqvQ{wpKNWIUKiC;9w=YJ#+r3 z`WeE&Lf${dI}eoOmpZ!Ry_4Il{9v?f{anz?PH#3|YXq3mUq}^-_K1W`dsB9z=!Vrd zznMyDnV?#uYQ)TPX#MBnM82fE_esqb$+j6J*hb!?zW;mDu8X+vQE#7%8^^|R zr<8zOpV$A(K?{Qhxs|6xLeiZp2i+m%cER*lW&GoBRB`L1_M`@EKiSmLzH@$YNJX3M zfz-}o)@x+vVf_;jNs3wEM}{9?sQvZ*;ZM1rPxX8w{z*N0lj*bBTqmbd*~p|BfcHyX zCFHkCF|A#TKkdGsgzGV3uhZUt@_uKf3Kbb+#|{8O~C>puBzK> z%%HH`aubQ;Zy>riMR04_ZK#r}-6hTHfJ2>6t6tcwPph;Co2op|&q+PJb!wr1-r4nN zzwZ1cbvRuOeJW?B(+>e5-N=?=mOlSPB*nSQ>tVx7rsTbkU66bfda4QLoxq$QKeW+w`aU1u>C_1pcX4zOL9#8ocHY;! zk>&EROQaJr?Y0cUu%$uoZNE) zCw%PePma*>U(oXT?EG!)gxyu{h`K#nPfKecmGT%7PUQPu9&?O&XUEHat+rEdhIaQrB5%LHt?vS z8b2;tIhk6h{!{&4rV{}6B=bkQ#KQBGzx?@m<;h@FIW;9(JAIy*)UJlz9$aLZjZWJA z(GFdqi@7Mj<)4M`Ppam+SA-AAchcM%MGya2c|Zn5YkJ&9>!Q~q(PJ(EOU``1AE@+m zxCO=i>co1~iMnTgDKglh3Hq=mRmDAGLa4@OS~XBGvSKIcqPvb9on@JvL`njhFyD1U zrK^jc*zFR=S*r<&05v%S>R|7y1AalR;h*ZFUq*cT=qzoP51KX&kIz=hVXetH-&H$f znT}6879v%L4_=wSHIx9@INnB~f1!gb^|KV!<6s|ZL~$3f4jyxNX-{Uq_XAk^;g!5a z%k8l@wwR{B>QeDF+;1MZumlyfo~_k$jjdMYg#=n+z3CX6?FaDJq zS?BitEYY2VTA6T@$yBxSy~xIA)i^bYB`&98;Y;@FmpLhFw2E{unXEwB*KX_Av61n- zj}0N*GW12epsr7{4YMiU(<54wGZc+`YZ}UX!YICP`w-WC{KW)u) zBKRS(*4dbDK4o9sO7)hMMxgXMo8b{}?$=pj;$RS(8EmuUHr<)Tc15bwFi{(rR-|$k z7+pbY6+V(3G`0ALw)M%+RJN3C7e&oK+-;C)u0~1K++f&IjW%4=u}&VYVZqQGD;MHY z|3K;z@?=-YqpjhXVq&NhpW0X=IhD0#G#9rw%KjchB zI%H5kFW1XX{;60&Jw2CoCUFmhCfCZt{teH@(bH976g#Xar<6u))md|$0e%Tk(7VJo@&~l#}?RDn1Ox zgNjOI(9Ar{#H|3WEeNM!q|cJfgU%N$Xv3R+|Hvu&bnE(dzvd0;T2uEO3Lf7UIYCc6 zWb4}IXhty%7EWBzdsWbx*o7+@tF0)P!&$!pbj($~5Ovckm^iX@wEK`_GhHljVMFa# z6n3o<<=CW@Fr7$a1<51REWrgj=!gR`F7$SiuxU0+`;)L`83??QLM#VA*OYfJsQX$6 zcL@b9RqC2w+)`)L)@-us3OnZ~=X}m3A!^<1%-_04KDlnGR*=hiavF*&a_084i|_{5 zz@)>-xon_sfFH!u#Ir?vo1L4>zG?B4ebc$ry8P@XH)nGBW$vFjzcR7%BwL9Ry!4Qj z5YfKZVdh6xUbI8(qspU|O8DiXj(uelf_o}f6s}xci4SW*jX4;jZ+5Dow;#EZ;bUNP zGOHs~EB5+SpES1kZs=(KsHDro%FglUQRFke>?OIUr)W^NK);eH=F6DgOsY=m1{YVF z7<)C;q+|Rc(#C4}_r|vFW$X9G8oeSUJK^hk2gJcBnjxOfK*ujF*SS&3s^oHWbniK zF>HT|3LO!~2f3TteU2~XC$4k8U#d@nYyof)pB6=3sApm+<>A^u9IF&iwqL1VzF+l| zm!`qKnL=omSa-4OK*k7XUSZ7r+YODliCW2GjsYlm3KQ)75@n zB1G7GkhOm|8f7)tsk2+WM96rcwP&pj99d%3gfHbI-Z#a3X-_}(gSFBuY6TT~e{IW2 z{_+{CJKp@%+9K*hxeID9ZjabMCae?!BWpU69?H25R88@l&;PL2)sIKL$|9EP=i@W2w zw26`0o*tcNp1zeEsy-a}Fo+88%rX7=)0XNW!k(fo?H4bVP$Yt~F6S2|m23nFolDd& zLMm8<8#dhHBQ?B71_MA15CX6PpmITS>F;X02L-8OfOj~A;uh@CFF+X_LMaPjs64O; zCr!eF7YYL6W9und5JHoH^VoW-7SvD{U=!|=v<2JCMU06nps@26%1dP(nMvmYeOLRQ z)(lsvpEfl@nH`W}O2yj?v=540e2e@4Z)k}8zit2LPXCvo)Tpqt*5i6`d5zf4)3IXh z|4^RUs@MFm?q!wliVp)W9S6uf`}YCQAfGRRLUG%9b~5P!f#`~{tjq#!HQ~Z8B4=Da zGzd7+lj?ENCB7|%rno4C`-Z4WL9&Sy9^cu-&(34`xTXDx?)Suj(tvnU~d-8E1(hP4BK8zkL-b+a-*7 zh4wv+o%ge2n2}xs{T3$Dboa0~QT~gvJou6&^JnPk_c-gNYcB38_IatUxK`-T01rch z`{MP`{0?dQ?Nv99{x9E!jJq56wFUSCY7=me)zG{K%{{;h-~k!FfIKQ$?KR0XtgJsc zC4CY9jq^+`X(MOi9mc}^$ zpi~3byVDx`I)3{v-)W6KiSzzjcUt2jsL397TH`8dFM=i|wN7!@wH?%s0kH!cSBCT- zQ6{x`VA$Dj%WO^x8ay+Q@7PAI4c)hm>yJDSN_Lok44R!XyL23-!4h)+CG{)z$IxKs zDEXdm^jGwbxI2*lywvA;^i^W*zkfL@Xy2o@Xq3$I&>Fz(%!Q?UDegd(m)&m``8NYG zvvZ%4^-r0KOXJP4$7 z(?02{SlEiveeGyH(>CJhHQWyjNwrj*Q=-WErmXE=mHGg?3@F$hdKf#+E4a^N$x z*CG7`@+**rZ_xbmx}ERNm>`~u1cvTe`|mf6ggkfyD08u)!^sE0EKzeRg-(|`sb ztTB5QNJr(*WqohCEN8u}2crI|FI0S%wpJRUMeisgL)tEgN_fl*EG-RInx`|!MPMxu zGc2`o+=H_7rX=gf`K3O_50lF0ZjoIr(rl}&htv8wEUTrjLVvwG4F;rEEAH0v5nRI@ zXk>F@(K3HX(idl2T4QMO;*3eXP+HFa`5g=C+$!I(kfkkXlIoE9DzqmQy_7FOPe&8= zM$XF88Ch*p%S^4b8hL&Xq$A>Q(#Yj&C6xO@mw7eFPyHflz1iJTAE3{eIZiqk^^@to zi^ZAlC+{q|c!juH_LtJpYu|B^+WBJ7r&a>Cx;TS;p!+fMuz1`zfPI0m4BQIbDJ&#= z1lNC;R5Ns+MmlrR-5Tk27VGUXIu|1?-?>rd4HoB3YKyi5X_Nsh#u2Dn8j;C&bnK?R zrKi0dX;gI$J36v2;=FIrJ_h}G$x;>Vm29U+YHy1>tiFtNKv?0H2_el1$v^OGsV-Lw2dr02cL-NKRk~j8{ys?MmjXfl9>>>FU&d0M$lXt%il#Jzo6gL&4r_1)hgl4T=FH3*9B>xrm#zY?a zj7+X6&50*y|JX$nY07NVCumcVmgDNHjhCKx+PwB(mGl|;(W(+naa>Dw@7?y~l=2jx z^2qn+r2IxtyKa`tk6tzBb?(^7{t9(V@f=G2U$%!QuKC})lP6`}KY%?sKbUglyKWYr z;ods({kC!SNY^zDMuT|nvc>(aeI<aR1H*pL^Vitmuj%;Zq*RgM^!^r_o#-c?o|y} zol%`tomc%ubwTx(szdd*s#EoMRhOz;&8S&5r{>iPwMwm4Yt&k`PA#YnYLnVr*hN$w zQj6-aI--uMW9qm%p)OM=)#d7xzzIr0EocOtU=U1#Rj>Qb*%~=%QRv=Xg{n69gg*&4=|51UtvZu zKP7+fwg$AY`txzD{`?_UfBuSXW6v=AxlD2OXP$Y9tL1KDe#_m)eVuuk`v$j)&2Zo2 zzR%Wi>$&ypEnExN#x`)L`2_nge;a>0yM@1lAHY7%-^Jg>KEvP54`X-o!}*cy9)1)* ziv1Nonjg*X=ReI)Vqf4V^OM;Z`6>Jq_7MMB{{pbL!A03YMqmvZvigxZnMVF$Bn~b%j4`D6o6y@#8zT6Du4&_d6rt&%EFSsu# zf2aHdH>a>qCW$-?Ye~P1wWMFcTGFp$73ue|esq0dS4{4Qg)d_LKId-6Bm@Xa2*^yB2a!ocKx8HiA_6jm5HJKx z00EI1#4w5&WS(aT^E}#G?0b(^q_!U&r0>0tXIpA51w=%Yx6ZmZ6fk^5p{4daUw;34 z&pl`Fwbxo_@3rp@2tbfVxuc<4v})HCF$2bAq@mrQjDas6LJOH%U$)Ry~-!bSnUI~J9ZhQ`cikC4K6T;Uyd}lP`PzlvhA5WnrI-(1Dp)ZCa6C?53EnAAhf`<|)g>tBg255p7 zXpioA9s`hu;TVO9C;}^~WBUX&?V8j!fzO7<5P;@SA`pWzD34mGgT{CgtI;VT3S- zS;r|WtRk!}Y$$9lY$Hr!)^&Oc`wCNpX~GQQXyN$Gk^M8BslqJbJYlwQsc^M$W9G== znNE&ykMNN2gz%*Bl<>?5_NsGMcusg;ctLnkcvX0VA8U)B$=L6q#IN$pgnKY5pDf7F zxXtsF<|p0b*~;+DR*;|hB0MAgFh8|;ZY!OKQkc>CW@NruEZ>Z~2aD&MWn@gb3Q@Wz zBl69%`J}~bLAmdx<#~<$?n=B)<(K&%ZOMGIM7~&=*Uw(O+NSaPITf?8086nJTd@a6 z@E%U#Bm55M@hPt01}Q2)Q4~w%D3R(@Q))+DsTU!Uu6 zZWuaSe5}+)RQ!BczX@rnt)b6LT@7h$uds&gi4EHwJ0q;~!V(?t>6YjS@W@9sFO%8ToH}+yb4&pG5<6UY_Pg4tONo}Yt=Sv6bNS&xNB~cg7 zoo<{xeJPW(XC#fHS7}$HD*O5w<{S z^^LlrzNQ^^gdJ&nc2PTM8@qsAP+e0uZP;X6cEDD)W4p9NeW|Xiuk1p0VY`TJ+nRRB ztU8n)r-sx@EE+_qG=yH_Tu!Hq+s8|9Q#S3O-L!}Ht4I~4qSZ(>N@a8X8hR=N{1kP? zJb6ddiWwVj`Tp(R)#?M@>-QeuBZ6z_EPn6Xghy;ou2sGrybs_ND(NA4D%7sUt+wNL zNe^MHx7$my=jgrBc+?IG{JO7Ohs?+H_R9{k7jmUq7~T-$Z$9r6%fNyq=gd(PVie{Jl+ zyZJQPcW3<*t;pM+c&>H*y}bWz#AL26vLA^>dE1u2Rk)v#!!edCpE-C3s~@p-dD~f* z_X?qG9*5~Xr!VIEEazXw(!6ah$Ge-{Ct(KWb4|IPD}zJ-f>z&czlCOqvx}+s)lbw( z^`SbWeyUEZ|4{#_{!5)w@6vkOKpSZjZKf@>jkc>FsUNHN)X&t<)d#ed{J6w%8{dD1 z56$nPT?^n>a~AixgUif!)fwI~KG^#4_f@TXxcvuQL45me^JP=Ss?XG?>MyjG)~Ua$ zFVsc#H+4x}R)402^bRee#k7R?2+L_Dt)kVmMqN>#tE;q(Ry<%<_&rNSc>j9v?rQKM z^!)v^aaSZ4yr@y znA)f|sm)wzPvZ*wRkcNJRohgK+RnZ0RJ+t}?kmW)rE*dZp)`Ll$GbVjHfFG6U#Dz1 zY~680`_|zxwl5mx#l{M1ky?XFe18(ZUPGyBsamF%s}+>4mgIY zqQe%Yu|?@LjIGF^>Cn=Dtn?qR)~d~1#U z19XrM(P275N9hi73O_i-NYKT^L`zrqr}{+$2E&r?61<@|5hJf184@74;-?<7$u#&uyy zl;Vmc0cCi8Er$x6mz7ZkRoU~^P!qNAI2xe|dgDc|pi+3nO~X(O<8^lgMshvnuf8+z z23J)xF-xA;eC}Mom05W|*&}3M$ys%473dUR1uFTgims>I>UO%l?x;KI&N@kV(bM!2 zy;LvPEA&de%8hmt-D++Px29Xmt?f>7-*B_sneHriwm(nn4{o)ZdRwcN@7Jo{ruXW7 zdcQuX59!1Dh(3B}Kf#z_TrfUZI#?!HHuzYuT(G>~n>&#+>NE!Gy7xS~-*rs=*0D9u zSo!pxfwf?9b=^`>1=b*FAG434sQsmV9T6PM zdWd3c`f%R^^*~hBFYA|)$Pt`|YGP9jj@vdo&NiLI6C9fl(N3)Cs6W%6;RSs|-#{*w>fiRS&6RQJXK!WY zzr(m5)%?_uefgbh5iF7KZNBsBuSQ7aPH_DSi>r)w9M2|v-_!iQzr?W#D3IeN8K$WN_HK1nHnk$SR)R$7YzRTeH zVm#LpSzI?{^X_Ri?z@Gjx{D(RsQ+7wIb9uq?~93RzKBjFn(juoAg{ z-@2M;F8U(6hz>wk(PZ8W`kG>&5FLabqN(U5I?h_>D_urUU)2crny+@8d(~I3r2BG@ea)5(KTZ>!Bfl^(S|tyZJEjF#!Rt~GY8>0W~%*j=1X{iInMr&`I@zo zciETmJS-mFMOZwx&tUP${>qF&3udhQH)b4KGUL&TSsKqU6VRGj2G26fx|f*ctyRnl z?iFT5Yb~>q`#H0+dzo3)TEk4VRx_*FKV#N%zhO4CKVUYpPcs+Z@vGdp`}{6JhdNMK>KV!+Okr=0V}Ip{_UBf89e`<~$<`KM>9TjoS3Azz z@2eN%Z5NI8c8JD#J4NHYJ))((U7`uzZqYK{UeU7NKG6!^0nv)yLD5RyVbRLo5z$2N zsAx4z@Z;w#mnUeV#BY+sZ?YdJYqK9AZ?hj8Z-XBdZ-pNfZ>1j<&-Zw|=li;}=X*B6 z^SxZgTjxi`Tkpri+vvx`+vLZ?+v3N=+v-Qc+vZ0?W?s&9)>csbL{~y>G-k{E|09Y* z9m%S?e)gcAZ;$-?R{z$kfqst3tI@a4)#4WV!{4Vj;GIVw`~tu6pLf+Ku*{z;&3?1P z>@>T~ZnMYiHTyj6d7kSzUO}&rSD0J$f5+{OGx#-rk3U$`c@CcBPUd;=R$cGTap$@> zJ$U33pX$HL^@o4?M;tPYu319IO-;rnubO;owP%csA*)oKa< z8%fpYE{loJ_GUZpuqd>%L^3~JgX~gXWhWx|KTaj5ij(M6cWOGdow`nar-9SZY3w}Z zeB%7k`NFyCeC}LvE<2Z;8_w6xH_lDXn`mw6fVQ1KIe&KkqN8SAtI9F1ZFtzmF`hA|kcrgF6gRQXSEjnDW$KzIOk?w;X=U1)jwZ=;H!qkz zrk_bRgUk>!)C@P7W|SFgUNaNT6f@n-H1C@C%=@yl?9VxwV#nBVPEn_nQ_-pHRCTI3 zHJn;b9jBi2xbuY5$Z6&@cUn4aopw%pr-Rec>Ev{FlAJD1SErlP-FeRG;XLpB!MWgk z>Ri*FE~pFZ;<|(`sbh309joJXJnvj4dL=o(YXol^%h<*>K~vB~m?#r%N|}nLnyG2( zm000040tKc3001BW3wWH>m}hiV zx3b42jkISp0^4*0w$HJ#P4B(;-g^sRO6Z~YP6C7wdJQ2Yq>>N@m@6-GC_Fh|iM$%bJ|E;5+Mk9m(k^HD^LW-m-!uMpd?fC%TLGL{HI2^b`HX05MFA6XV54VuJWsOq7je zRoPg+BLwEf0)lWj0i~kWG?zZ1Pw6w7M_-5nbeIm&5jtigZG?@oL0i){wvB8P+srn# zo9!n1tKA}-%8s&|>@J(jI`%(hzPk=Zj`^sO|l1%l-uMkxl>%0 z+r=a?nKO&LqL&`22g%KHhZ-Q)`IAveR+c4&!kn0g!bGI#Eo;hJvWzS%OUcr5wcKrQ z(nz^Xc9s=nMNv^Sm(65dSx%PMqcAs)z+5;Ahv9DAgZpq7g;1zTPbsM-y+bWT2eCw~ z5NpIbu|;eU+r(zET`cowP^THSZ8ZATm%nP&?2x&^*vG&?+!Iurjbca4c{x@G$Ts@Fo}*j0wgE^92h9O9aaV zD+SvGdk1F*R|VGxFGQQ@G|?HNgV8b3@zHsr3q;q6ZWBEwdT#XhF)AiBCUs1@m`pK& znCvk*W2(ipjd?eV$`Y0(I<{}@lQngCQ`+*D@KthQoTiuSGZ%11AF)0*?dFf+CpO*OE6_AXq$D%Gc65*elpCxFERpZ!PKn zp`~_o!{`s9r~a)am9HgZOw`|65@I?eYYE0C#NLU0`(IiX#qIrvmI1jEa`p4IWLOyV zwTL&tWG(+#rFz2uSkD93-z2?nX8q@ayq(v-bNz2i^>Vs@TiyRtd$rxAZkLt_ajEj9 z3b&qKntr*|zgt!&Zb@7t#Ff#>zj>WFH?eoJ6?Zw@@1NW!F-Kx_VpL-0#PGzk$^KHm zSNO$q7sD?+O7c$ylFAerl1guEvX0$y48~wA`eVc*_zo_&QAw?w&n@zMUP(DK<))Oo zLsExC{56V@*pP&f-67XP-h@(UuF!m;E`WfAtT2 z@*i!X_d*|pd13UI7nU~Z2}}RCmpaK$dMDfQ|NK&65n)mP<);tJ@tI6g*uiA=9K7Tg*qi-+P_*C1d2kRkXvCpj*vaZ;shl~ z>k)dSPpDizaq=Yd)A$4(hQodSjKW=i(MPaP)RajCqA*G&SBVH}k<6jiG+YG45TCPi zebUbJS^I_0!2&*M4=1xW!l$jzT2aEMZ6lwzO?=iildDB9pSPQnh-`cBd`agSO#&v=#e`VmL$;$I)~g-=`D!0i6^nL@69eNAVkai{Dy--&u(Z zt->Egf(R3Bajy;FejAMkY>Y@P+T%gd0dLz3c*o|)`?jFyg1_4m_{5eJ8ALa8*Q6Ec zMOTuxI%!*rl&!(1MJCaMQrqT~#qt13e zb+HH3Sgb@#u`(^g_OxELQRDD?3;56$G8fEc3ffL?lG$#y;UFAL2k{51Rf1|uo~?}q zX#uvQbyUa>!78){tI}$mMt5;K-N92fH=ee+DB2FD7(0l{*$GtMenegE3F>B#Q*}F; z>f1SPvicC0+A!5ljaTi}N2-IGfYs<{oIzJ8i|tIY-b;$JT`1mmrE&JY`dCd=lSC&q zSxv#}*o$`HQ);ZHs%dVfnvR{+yPN@M(p9`?^Qw+&hU#R;sLpDpTC9FjOVm=eO#Q5u zs}*XcTBTO2HM~=;RqITIT5p}&pf;*s)F!oA{c0llJ)6UeQ(M$lwM}hTJJe3KOYK&B z)Lyku?dMtQfI6rSsl)1sI;xJTa;qe&Z=|jyt<$+szh~3T~=4rRdr2W zS2xs6bxYk=chp_ps_v=#d{{kD57lq#k(=datHVQdaeFs z4I|j&lrR!T!Dvp+>D&))5uf5S{$4r`#=?g%o^SDO_y{KWam6zDSgi3LcxlXabH!XW z*ZloBSHyfTZ-k7lv?$t*ET%`z{mm)*Z zay#XWBgZZ!hPu=)y;$y5^eVYj^xsl?5cxbA-Y38|k!6(H%aUTowbsUR7;b9uhnYcR^!gs|ku^Y$G zOk6DX;30e<_TpC)vKn-Y=I7oxUA#oUw(EFU1t8)YH#$&`0aa0@^C&Wo{ zN}LvF#5r4BoEI0wMUiOV5tqdkaZOwm*ToHSQ`{DJ#9ecdKd`O%eVzl~z(Sbsmbj&` z7=D12@C7XKW2@!xIs60*U@3eBKkNLum@c4;>w>z3E~HE9!n%|$qD$+dx(s{|i)g3K z$Lru*_>M}!3heDin#(ozjPipTJ-cq#snDS0ig;`LHu5%C*# z6pzI3I8HnfPsKA{DV~cL_$Mx*4B|Bv!JgDm{3+hjU@4@MAhk5olPF2Dbo8YRm8oQE znU+q;bTYlnz`>Y+gZ7q;v6o~P87JdqR+&v^mpNoknOo+e({x7W z&S`@4+QJ3Ra8Wx*)G6SSP6?NF z2wc&je2DjfgA|YwLLd~vAQhyBG>{h3L3+pl;gAtBL1u`6NQi;}1R)w?APdC0IS>c& zkQK5)cE|xaAs6I^JdhXiL4GIz1)&fWh9XcDia~KG0VSanl(v6B87K?o>}&hRzJ>Bo z0V=YBN{nowGBZ?xs!)wna43gCb*RCqpeEFU+E54TLOl;XfBW*-b6yIl4-LGO(9qmA zcRb-qXyhpmJPnOK<9W~onnE*ozy!F59Rbau1#PDNbl;}1#Z1svwGHe@JKoN6Gwf-5 z)xM+^Zip)CWngZ9t?-i40P2|7a;=nCDS zJG=)y{Igy!=nZ|KuYXSJ4+CHz41&R&-aj)9g<&w_Wd_SK5SqXczXQ-PoV@-~ifdZkU@mkoMs$x`wmqI?kaR_zB&_xpWJ^ zrhB-^8eC>m;mk!$xWNkfSTc5JpZj{Y-r|kAU%3*s@Q9F!^+2K^dj-`rr996O( zQe`g-)wENomYqhm?R2VRXHZ=`lbYDM)YN`T&FnmCZa-69>_O^o57B$}F!iuUsHZ(j zz3fTqZBJ1jdxrYjv((?7rvdf?4YU_&h`mfh?G^gaKA>6l8O^rOX^wqi(|PeW(LQvQ z>})JbUtux&8jI66Sc1OAlJp&xqJ>zRzQ;231D2&lSdMvIjR&9%5L*W^0*DbB~w@C%%WpK~K_#!a{dH|FNt zlw0CTT#Ku5J+8uaxCS?HPwvaTxj*;fe%yx#;5kgh3wRmN<0ZU^S8Pw)$M&}UY%klF za#9}3P5CGn<>j&b5r4=Z^EjTs<9Q-|%%AXQ{3(CVb9p|`<1aXZgB-;%9Ldof;4EC6 zi*bFf$F2As9?C=P0NbCZ@l^hj7jPM_z~#6Sm*t9Fo-1QhY>CaW6*luvr!BBGCvXRD z#~ryXzsv2p6K=+BxCM9Muecqz;!ggCzvu6G5r4}+@IwBPvvN+(&bc`o=i(fkhf8ru zuF9pk3YXw&*ccmOLu`OeOchhz6f>nvW$walxHGrruJ|P`z+Z49ZZc&|X;YR*@Ngc) z19=z^#v6DYui;fw!IU%Qc_z=`$vlZi@o1jTQ)miJrb#rBN|;KfqAAHg@z=bVzv3lS zfbw%3$8x+WVTzlYrk1H~YM45vuBm70n+B$#X=DnRd?vqXV-jQyQ!pv(#23s%^C&s* zRL&Gi&Owzog=JIOOx7`N^{AwH&^%7cLzySCi22>LGwt;mHu|hSr_bvP`l3$M$Mp$) zQs35h#C$nNej?|}Pvt!MnVc^_mtV*Q@=N)Z{91k^zts=yD;DfHEzHwlI+aeX)9AFe znog(F>kK+vXOwqjXPrrB))6{VN9lkL>S!HfcA8ygx9lz3=`3o#IVOKL$K`T!%A7GL z%vp2NoHpmod2>{~=cdX%a-ZBQ_sb*ls5~eS$V2k5+$C4ax^joys$=C^9iNn|)7fc~{;uiMG7CM8#ECT5jjNwQ8>Frao2O z)jai?>Zv|gUznfGaWz1>}R=H3P&40J_UiPl7$v^dE&)sYCoBjLNH)LkSx34F3#3UP+BQ=(tUxJ8GeI*&6R0q z=r?{^&wa8@AW1vJlwo|&yE=MzzX};jkg*r|p%ATS#>`fW#&+%nblIZSFgg^yy?`>s z`0s*IFghK%Z`n2(AsL>m_YKqVBG(~Pk%$f*$|%tl^t?^Em3#eFbJFuW{`URAmbTRk z1hw0NO`D-5sLH4sh9XHxahF!18k_{J@$)riK5qvCPV{0ylkFgaM)0#qM(d2$BP$BS z&?2)OhLVhSa1e$LWtG4^xnc~5@?JZjymVWQHB){(pev%sJU&=>* zhq5IbdQbF34|gYP`69yF3Zk|ZZ-;>l@pN-1z$1%;8d!EHuV~yW_l-=NnlT)uE0JR9 z#+2DVB(nqilrK3nt^_+d<#nFrjD5j3&}I}eC8}#D3#vapWq7_@vPa3DP%kHcGQGtt z!vzl!N5b#PmQ7B({lK=Q z9hPi|rd5*3_|%Q-4$UYKg`hLuU49)vx*<*TX&a|$oE)0PHFG*80vYJQF3ot6=tY8N zkTi$pRBJa#a@~5kOw$MQi9>Iw)>hEkNtKoj{k+znRf#d{?FGr~tVd?-(rlTV6s_wf zXZU9tKV&YU64_!qNH}?j*6pFZY_?=eyf(yE`kY@u@3SUEBu)6=g!bi9ol?NWFyEg*-dywptRW8Y!=srw{`is-SG2z$foJ;1jbOq~G|qZs=}&|I)i-1{xnwRPqRWUM z4xj8V8au8!bVXIp)f`&?FDja_1Nv2z#8@hdifHoiB9(V~y{2qp+5@b0tVK-px@j&h zzPpIbaTkv>UTgtJyn|kSCx%N{%(8(RN?2$hE(mP} z_nlxwrrR!u0Y~ohXsGtRMbx3x1Dae7q(FH>zo4tO@3vN16f0AZfG?XFg!vu zWRs0?wQ4$L9Kax>#%@p%HGCV{++A^y`}z>ZA@HR7P?e-yC@04NDX8 z=lRtTho#(5QdBr=4J_tbSV=180tWEbNZmfF-h7#TBImZEYWc)VT}9W*Js9R@fw#vw zC`*MZpn9VY8)lcAOQO{)7?Sk5I+g}@_-nLc^Z)8TcAxi4O=5){ska>teDpaP!}uE< zzbyv|7{oCOxrvY$)8WL|9dkHeq05-Xk5AFx!Ok@o=IILXT}4+RTAVc>c@+(O%7%IR zL~%P(3-D9b$DRTB48UaYx$2u*(+1F*E#~+D+st9G!yE>?%we#{oZA3jFo(gH%wZ5P zhe60358xhi7~E$LgRhvw-~n?Q0ADkQ!8god5HW{A%p4bBpE(RV%wf=F4ub~j0b@SEcN1CxbKZvX)R0ssF14|trc zy$4`aRk}Dn=a!iylj$u}GreXqlbOs+dhb0XgcL{uApt@sp-XQ9Dp(Lu>;g7WRInGU zYk9WSRd?UI``mrIuDcdQjY{U`f6l!#$)th){!ccWDY@tC<$UKm=dcKtlf@!5wiN9`O5gm`uti1i)mo<`IE(tI5d6Oh%g|Jr9d~3E!q-z#uY&;LkUi*Y}jI zsB>tXzEl$_zhA^wIQ;HpZ>l-XtQHuB4KlM&t4XuSWR^6I)@PPc_v7CU^9%7s!-t8D zsrlB@x!IxmY^TL6?_OmIxGWC8$&|tu^0i@`#)lsBX|!o(narFa5agSrkSuB930vjK2a9}c8ZMXsF0~Y`W{I*AU8a_|Mdl*0Yo+*X9Bz*spxK!f@ zSSAo-M({uSR=>Z^KpDcHnN+|=eX6j+0pZvesgvYMdTej(*nBj4AUzlw2Lzb-xJ)Yd z`w)8+_^qQLKQZ)#=Ji*Wa3(^|NS9i5VyjV-B;b-_G8U8JC*|51g`r;O7(&0ab2TQr zTxTNKgpftk{vQ^LJq+<9SxE>#8aatUWCH(UN zUb^{h>@P$bX2hQLw_C$Q*lB9{yVQb@!F=iywSheG2M7aa-34{yeF!6wC1W{QEDIzr zke-T}3`$655UE8Vq6{2@RtbX$d%n6aSFJ1PEvGL0Vc)e|ufFchZ8^I9xy8U)w)>UM z;me<^|w+ZkKaX&oSVDwIl#W-_8(f> z!Q_7E<217-4%E5o$-Ew8L6Xl}!dscEi^6GSB&?@C}YZU^eSgYi2<*j`Q zU`H-Xi-^`ABwO-0En6kzuoQy~hKB4T2c`L=T_8aC&gQ)#h}!cR0-NAzF#$`ValnRA1dCzDt;;)>nR4qo;0o^qoWu(h%y z5!}i7qdXq{N6x3d3%60<0X}vT`6_H(_-gV*_y%kl)H5mcQzU!_XDQ%QkYI}`@)#6+ z0KSJmexf_vhMfe*4>JQDK8%I}{KG`zhaX=09*svN-WG=cjq(sYOpnQOKt#a92sU!t z@Vh?hB=`!x*2c;dfgC4G@Kr>XGXUQuSkUSj81J!+ zFlL|_@+j~{VYAOiY)xbmrH2691&lW2N8wvqq2X%<~xm?6paQEbqMBy$q?+b_RkB>lbB9WQ(4;~YB*u)~_N$;h;JKx`b9`Ns7_R`(k+C9`) z$m2p!UQnu7@~$ z!AgJ}&4O4k7LacBKvEglas`NbdB_(I%19(J5j>QKX9KLEYdr$&aj)}lEJvthW#F?H ztfcYneYCDd+hFT|d0;b*_44yGvU&2PWcgk|q@swh;QoRYIz7T{;9L>DZ$9Lx?ibdsePK^U z#UAu~cSYRCPj~e%e>KY2{_dxl01=JF#Qk(ER-1!&=pm>s1gzvKJ(VLsPv?<3l`HlmG}ZdIASfAH8Y)gyeHwlpL1eQ5Uw-wR~Q5kco(c~5S z9jv8hWu^K0Ll5DzFP0`#?};4t0Z9H+H~xN4fva(CjVeWq{b((o9a^@A(uWg*;9ZqG z{1$m4ciGX|mD~Fp6at5a_6eyY-x4gykK9Q78C5QJbkfAQ2py9`r?La|oJy|1?@3fk zWoacHc^S=_n#|61o7Z(_7H@lcUFq(POPuuyda*LAVR7}qX86@r@T>fFkF47INeyv_ zOp{t~a%l{ss3`@9FYRH}Vtu5EmY!{=Dqmsyc!v}d&M>8ZbYu&kki!IL^h zI_-{c!(08a?Fh!p0%HOzRp6xf$H0#z4GX#N28SiF7msVt-mQcXbLH)lG z>H!C3A4uo{192l&LtUh5h}Fa!mqNrFe@1_Y=D~NszZ1mdWdZs}hW#64Qm?}&UWdQw zr>JX=hD)$#kAlHJ{~11e0Oo0V@L6TVqrhh)vZi0^Fzlao8=KvL*L3S=`>*-z)+WGn z&)oQFdgtyYeBSWw+x~P%TiYFf+6G_W(X_iOotDo5>Nq{7FA`fgG3iV4SZ0%oM?f$M z2$@&3>G4$(qgptc&{*kACqHZ3I|plMxOE5@^2G4%gRkGxE9R;VRvDAxbfC<~-(}-; z-TwQlqR22v((!I|zAa|4;(>|wj-xRf_{nwQCohJd`~*&Q;k+uDpQsUmrZ|rg1yS;Z zQ9XQ}Ye7cF0vEnYVP)bc%roLFa6B6`o)t~8BjZX&$IS)^j9d{6p~^&@h04E3y~5+N z6FJoR@2P_SF?r&Cj1$DgNw`1*q17YsYMF>9{E?kT!^Z#HoUTlf44cUl2F>st`f7)> zN{`P~SRqPxt9DD!)q=R$<>c-(VW(8mxYy=O z=pf2Qu6We!am4UxC}q->(dr#$!fsi7J*2ZVZDyVsJC@|D_AeaZ1OEP{B`p~inVDbg z=;>dUzVx|VU0eUU+^TiW?n#8VonJF}lQr{!fmt^%%O?|MBJd8GoSI`OEzsr9FMT;} zcDZxc`a?JFSLs!XW^bWQIB#LF#;34WE-km!RTcPjxM@LuvN;(tps}&Fwt80a=EqlP zEV6hyci1p;fpC)VKz)Up8zGaXh|LMa(1Btmoj!{EV5PGsl-W^WT(PLU-I&akdn*RD(@Kr34W(z)}GG$4;N;iF03uv@$}%Px36!I7}Ip6Dmes4+e-1s z1^iw@%u1OU|FBqQ(`;tqTN_sGcDrN^u8YsL(1rt()p+Y@OxSnzV{`#G3M}U){X&{Iv~Lr8Io%7!AMp3iTvBiU4OS zEEV{@B@cG+I;%~EZ9zwcQ4T|_ktroLAMDSKU{p8_>PH)@<9(At>W;+5T~7`$n6^(M zCBi$-n`|Ac3%-fS2~Fu}!NC{NqJ&%l{n?agPh>8f9Yre3ehyijb8v3+_F3+smezt5 zz9F{39nu7w;EzWaP)XU{_Fli4yEm@F^$RD%QmEG|H!M*|$JGEvEGx`D><11*d;w zGcUPf8vUN0i&_-kL{XnESFmphUQ@mMz#^&U(FBPgLF#SDDO+4=NlD4_{yLqJ*(4&N zulI1@`~w|MAf~?dIOKYTIG)Rot9GXz-i76=RP%J2g2Dogy*!wlQrVrJvC?lyyMpTA zm~Domd}m)?R_BKN4<8AC=nZlcxm<3<2hhCP!Bob^sEH!XDY$wCXElz| z%-pvW`uHE9!xy3qbF?nO)Ji3gx1NaQMp+}mC}&S*Mtgx#8?5uzF7XZ>PUFe)?poY@ zO>Zb~@b2E04PI>6?{v=G(bm4H-c*oH-2RKt-BaFLw(FJ6t6n+S7)-^`($vTZf=$-b zb+8aq2gAKIPUSG>?WS?^Ou`A6ra&ry>ZE>|9~+@@%ZIqtdTW<@z@7s~(s@R-1rD1bh`?`wc{A@hu(jkOl;nwFj54^CiHkkU!(Kp{@_)`FJ zv6DyO+`X8YxrD~*$v}rkgD-;#R2&<}W)0@UJUtc9N4aW9A!lEtmCI{vgxI&~@S_WE{O4WG#hcF#%s#QHYIpyU%&m2b6n;vQjF4z; zNi#)x-jxk<2cM>+2+H{@7)#?=ZphQov8UO6p`$dik_UDS%qne zWatq3mJb9MKY4Xs$(APu=H9!eILU~u_0BA?Y*=xq07yW$zkZx(U{m?!a4oCib2Sqtc%3$O z?f%!d#-a~>kpmL(D)|B{nZ@#pY^fj@_#<-X@M)!B9PUePTGP=$&vk9(xg_8#bfT0} zuM%*nFkZoDYt_9qt=G&;mt4gc#p4oBZDz?M!%r}}=78~%P5y(GiB{0Sl-V6)3=AC8 zI2>Tm^oz#jheYj^$)9zmyz`DilZAerGOF3*+9;U{8KYer|tTIkC{SL8w@yvLF| z4T0zrQ=y)Xr5WfC7)qwWy#u|EkH1PQKyRBOSVr}k{UMZ5`b6BIKtxj|tzd$Z)0}SY z=qnhXj>c$Mte!vyhF_bMWyY{Cf>V44#HsE#Y0Y$4UWSQdS~3Coaq4kJg?RmP1ks#k z>Sn3r2Q2+WnqoyxG5e#khS9j@&mW|qCmP7 zGZ*(1M8=PWP1`nvMM}umSvnM-CsKqww2>W!%iv+PK|fC~Zun^mo%Ms&>J*tlk?mus zYdg-@^5=0AxC!$Ub%F=~_lpS3)ibuXdPvS539qJY4TBAFkjr0~z~?6{QX7z{8C(!5rhM!AdZc`Rrj~okf4hD$yZEKx(Cq8Q#hL7X1_ zd`ZmbPod8l8|7e7M;m{mj!tj1zg~5fQyOyRZ&2uIEPE{8LHm2175EjjO_uePG)y7J z-zX!R=SS!m>AkF9jBQe27OJLpho;(1?WUaMcuZxr_>y_kxxq_+FJ9B;k5AYo{uNQj+;W%7nvG@_fzf#;&P%y?*=+8LuFkj1^oI}F-$Yo1- zQ)QFPMC7uCxoNUXGz%F%HC^3pT$UM$5%JeUyqmAc|KCK&w9?4j`0_qa)0K%E%RZ-* z&TpeOCMFWqvYCgg@A)y%Yg)19;=d!9xMtiuP|5|r zRFH`nd((jHkp4TGNRFIS0qQPfBUO@6x?&3|b$Z8_IuBCa(l)DV<-a`!O(Emb>J}nYs+MH`+I{ z<*7A;53S0WRpaoA3_fFBTkg_Btwn=gOr=c8v(&V;)tK|#%J7pqt1N*e*or)d+GCW+ zEPlc@J0(FB$gkPh;$f3obFwxOPf!NuRF-U=pX;uk7pR!4m6c^G(!4H_^P0|@jk8kK zDpYHwZpD8fWUNG1UZk$cjx5tkM3Wj{^03?qML9(%=%=f%D|QYntXSY3LY+Rvt2%3S znOvPh;Rw}cL3eG`=a$xcyAChPMAcYteQ~CW$4kS)e#gBhP9Dk6!JZhd>bzs1P-^z5 zJ4IrZPGu`<^VJ#B^n&u8FRWYo+%*j%eTpX2&FJI?D7c?szABq~9m@|^j-NgcO|g*l z&dA8fjc6Q>9_B$^v@Se6(oOeEd{KHwjnsP5S)Vthk%m$C%!rY z?FMWa4K0&cb@b(zkJ7Ut2mu@;--`6r!qFyXreMQQK&5hJ8T6S>rP7(HH)Od~1a^rc zFyPW>pwBYkXXtkpQ@;dn!0{xkG!{!Tu3XB;Br(aDe|#tHaP069+(VI!tM(`PxJ-<= zAqJiS!T+Tq(rJs3n$#za)lKsop~(_vvL1aro%QH=NZ#3Fz_V$2|7l!;Ls%vYpVrm05H{ksWJ<^zq6s0cq!Yp^ z#%1h@a7Xn0vRMUKdD%pPd}sRb|4tMR#P$C#90H@(PXh;z4v-YEbr2%z2}3R$j>z;x z`$gC~4qMIi z9iYrB8Ff3OwhcViJ@8{4#fHOPfl!@YT$?&~Q*u&8%iOe?JKH@&Elt+KG|f*<4Z%5f z0&~~sd}i6AS^mmYdHVc=bC8Fc*P}|S@}gG@Is>U;(U{MJ@X@Z1@jw}$=Tm^W$)&Ze z=`nr}B7pBq4p?O4eIJAx@uM*Ip)s8?V@_;`4onBb)p1>8q=!0(p4W4U4j+ z(j{7PVtW_1dkj2=*5QdP2wQ@(KM+%8M^++Xb}7-J2rF3i%&v-xUC*o4%RWKNX4XBaac?L@z6jB}DT+ zOJr5m1DK%|F^jG+#d3ks(9JYCgLB#STlWbCb2Db_*l)mk@=FmG6g5|=*FSzDyW6_Xc=p8FI;^ndg|!Gdt;QqOh&b<;o?nk}%&Hcv1RMrG z$OHDxkOy3rlvRpW^2VqJ(>4)}TV#yw8cJESYSo%`t5y=6q_k+u(6Uftu2-SuSJEv* zOPpIB`X6P@Y_ieKio&JWV=a^51}4Lu2sQWCz9`Vv^`4=j z@gPqZ)Rpdhi3XV;q^ddE$htIjhR&6yS(g@#mkpg6Ip&XBmmbQ!r7yZD-M!t9lAv+x z(%1*TJPh71Y>2K)7iDCP4c( zbiGwa;tjJGB|jw=BqX^D9O0`8Ol@MuM7@I^sDH6N&+MsNo@wTeHVtF{Nsx=gj$o;$ zvdLB6J_kY#EIc|t&^xC-lJ^BGGg9&$5?6UgS4X+aH~0Fk{?l1_mXIe^O7naMw^6Nk z{YY{dGKzO(vU!|{p3pqJ@&8Cq{tsC@oqoAmr`NClBW_Qlk=x>@)yV%h0YD!$ z@-4BAe1Trqifl!P+$W~qKtZ5J*oeobQ<*#r+r9e4La!~mB-`ezYOV6+FFDYV+TK*9 z%SwP8a{3C~`L)4@u7;p9zcSyc@YRKO>=~-K`X%y(lD;+mtQmQ!PPf+JO---vubsKA z)jg(T)j6KLG*5neY37Uqe=yI9a_qZq9rog%^gp`2GE$4eUW2&9{7N#eoFN;n#=OiF zSK=_QKBdU5pzAF}DP3^bs)(1T)n{IMIZ~8h{Ht-~TkOwd4qE>t$JAw-;s|(;Zs9tf z&eUrrh+7!pyc#4;DrwMps{#7*`E=jXRU^#)y;2$nGsNL95C=$~#2=V|fovMJ&fY!_ z6EvxvsC?V8b2rA|bK?Wa?aKU&eIy6G3OHwiSFORX7py7-}y}+0Zhn z&^3nUlwB?u%S4?dKBVVwGbYbUCF2$}u0X^1IX1zGozuZN-b4DxB%3l%ENLy2YVHk? zYQ+}p_p)C*0iTjo4NxFb$E}AjvLJRrJupLA{0c&dT|<<4TFzs?zZ~eO?nBw@bqjdL6q>g&u%{D>`}UlGyCJRGmraieujx@uf- z1p=z4Ap1q6@1^;qH&WiDOUjp{X}nw*CNMU@is(J3o!0xMzgF*mGxg&wg1v7-dFJ6r z*{Pn&@Y)r6g(zOitB%xor!^7q5Tk`JNPe@W$bTi5#+whL8ypVQ=YnbN=ht$C!x@6a z{$}Z8FZ^~{L%dhOxbQWBMXHTsU8<29S}-KSzdoGC6XhRS&u#O5mb z53o(jr78>iI8VXlB^{1nkb*VpvUR##UHD82gN?hzEuH?)kycy`85bJW`i4z8blY`Yqpj;ow2(vvpwI?l%(V)CZ(hX49=1?wXylSB_6ji#i)}>lyO8c#*=A; zdZk(m`urYqVQV_Il`pqQlcfoASH8ngnqkG1K{sE_mn9$!HD89!f#VtRYr!w%8OYDH%kYyi>PenlVKCHGXtL9cn9yN_j!Vp= zX{^An#VXhbSVFX)Omf*;PGmpX_ad`YtWV-|B^t5HD$`c@?4^FKA*U(Lla+)MQsKZu zgiDafH)c3({$!q1zFMs}m(I`6>8o^_HAxa4_6u5vg}expr|Dg6G4n-vY{hM?o&(;F zG6|&6r^?LCRD0Ws?Z)Eyg$3O;x!LNBc~ve;$=uvvYk^6SMEr%XOAZTO*)+k{@j@C&(|wBGOI2t^?rfWKp3+c+zJWLTiIOcHI?)fNDv_J|6Wp$RKf-#zq#P-~UR%xa-fZI;QbS|PcI z;)Cz*mzgy}p$2|rL0?&DT^jiU`y3E(JbK+rGHLZ`;^-G8?&^@#C}9JxL@ZAvpBHLk zVQCO7m8~?OBgjrJkK`+*;2%=}X817|@=$ZwT;hHK?`*P!Z)C=1eGkXR84i8_ z5c@!wjo8P0hu1^fF-7FS)ZgjTV$!2kjF`oe&ol)-Pp(KkCv8smLwQ>BDXmdr5S&_~ ziz63nY+jqkzGyBIQHfcPei=*x9<>(}CDZfyN+fd#3nyM5`4Zw3wcQ%{*_Go>c1~}F z-Cog~lha#iw^#P&q@|{&`BGEK)0Xo2`31e@R%>~0LH_)53)NFnSy^0MSy{sPhYIWh zRte+7RK9pZJzvI@oqve>CW%_0w~K|z^_dZ8jQrB6B|x*U5`NkAWSugF2<)W9d zvwQ)B>w<7y5H6pt=STVwMqOfHQfVD*7Fi??Zz2rX8Y|R!Z8;MHpf~j9C`qo4l<*Ua z8mu%#upnIhsm2iXhI*w)8<8it6T*~_%9F#UYwGN1N&O$ne7i)$O(f*;dTz3XcWQx3 zLXyocUqakYIiXimuVW&yg7ItDf>)tz0*qfn47+^oi}7>E5~YdISS0~dAU9yrX3h+$ zLw>iw&XI})@+5tdA;}cX4VqMehG15Ymb6Ra6XNwEsYq%Jy6nYi>IAWZU(DrkVPr@Y zON3HOZkj32qjBgEPRS6bJK0&Zw!}_I@&Qa2Wzg?3!JkItPJNxTuF1|9HyhZ=?OV18 z1cC%^Ts(#-+}iq54&#~RVSD`r!H_rK#ynzJUITBk@4v{5Hc+6%OQzLbJKMKyPZ5oU6Kkes?-n{I6hv&j31fP z{vm79J`wC+6Sss+-1q@l zen`^~9R1YK|L~Z=rI-PkpD;t=5piwlnloT4_8gX0{sRpb(I z^wd{C5+`3xCPM8X2NiLM-(q47mQ22f&X|Mpq>o)R3;~UVTLal-s0FV(D@`s`t-&Ih52)IRE#G#$Px~#1GPSXb)H|X&`T4J zYS6oyoOJd*Vzoi&>nL~XEqbxWC`_AE?t(9w*q1}>#{N$4tF`@#9Rm%M+W&8oTl`uL zv-d`$^;_gu?CNLWrm|VscbtS@2{#LkuJV}WaTA$74({fMg$_I(P?z)9pI!BD)QOqZ$`73RPM#sc|vhM147ATKfb z(8M#2L(<3!A5^(B=G=x9_l!J?C2xj1r6Je6+mmAVdhID5(w$lp)aimXsqU(PRvV~t zTm62kGc66tz_zwV6g^X06jvm1$g?%8Z}Ne!x}k(`bCbzfJxDpAlD2!*^W)KFPqx{cr07WmbE6P_GY`+pT2*{W6!+>hV~eE-Z<9 zTWZog_9E?B*}LsUUX{vQWVaQjs#K|kHjBq&v8SejyFL)dz05dVjCC_{9lnzG=dxIj zZos4PFzM?;tEP7|-(d&Tu-K#>JQFXHX{4i$p8my?@R@T0cR`xns3D7&yuu^eqJO{4*o7Z(gZ8SJQG{? z$h6T`#7tD;&Sb{;nVpE)IH4)Wu)$}OwLwQxk|U^1hGVhs)CJJHfG#sXEU z8D@7)_EKl!SUHv+6DX*wu=tS^C{~c;V#QxIa5|@v^X>XszIGTY^!_TpMhKkn88dMJ zOCcYi`$bI>Klu5hrMD6X016wUXYP{l4Sld1krv)epSJt)B?o;_B3=6>yXo`3;VX-Q zN#-~}PPe6pfC1QWF7-4&nGgSmy{Z4@Q9TBO+DCY*XcopaUihm{>txOvTf>~|YKXK)+9F4r0YACs z3sVZ0dPt<_D~!~sIFIoStm2|cg%7wEWDc|rU(1|`j_kY!^6?OT?kR(a}J{yhv$qO9Xj3VY*>BM zV|^pH44t0Sd3xyR2uQ}t*4)wFe%snI3@clETYLK*YsxSp2kU#}UprgxJ+Nk`2fX+q zSn%+dyLSHTkv{BM#FG{li|vXzW0nKChYtOt>jelS_#WaYN)P(kuDVlLrnE{(0-WH@9-AXe)$?rhoKlGKdKP>NCMO6eJ~fg4Y@Ts&suvdinah z+S~71SDxOnzBK%m)B6w4Ja5}g{n<-j1o+K21N?<$+5I=QdFOimyw~CZ-o%;P@9SEA zd`U34CLYP^b};PM9smmZt%>FX(7T4gI(d!p}-?jayb z_oP(!Wma_tr01pX%0PdQeb)Z@aaX;5O;vv1_Tv6Ktdg>>wZ*M>uCM5(nvwo@LZ0T4 zPp|}04Dl$292?RCrc=-odpe9bTFzmEdcsoBnvp%X)atBRR?IDE%TVT*XZAJ(6Tqj1 zePx!0ea|eu>g<}#nMZ!VdG4-8(>$zi?a756Z}VVDX>SIpd0d%OTy4uOPha`imWueo z-d#0=&+IJke&nYkuK@Ski!xi6q_53k01jLFw90h5j zQ8{b*_L3o?-IrZ9!(&ZQdo4YOmsQAYMFBfM&aNb|mEV5zzkO5{c)acGeb+C^YnK?5 z{Jy8DpYJTc{qDP}QuI(}`6Cwz9r*~1y(MF32HO~qFm;pN_=8;(m^ai>WOkIar+He7 z?b@6UaFW#OL}jx&?M0zr>xwliT7$(~o*Z2L+rWdUwbEE^GJv9>*zLRey2C z^43zFB)esxCU5BsFHx+Q3Z+7uR+k>kt(vp$NY}!Lx0Y9Id1T>T|0q%h3+sKEU8OcQ zR}hbKV4TjHd-&EOV{{v$K1X?ck_|erCqg-EVC%E=+*^m z9>~t%Cy9jSKvkfvW8vK6$CvjgJ*6o*wIL@uRnA*r6{1b;&1;O3^z8iP%muZnWtm-a zo?Iy}N)MIXRhFj@*yYS=a!8hi)H8S$^l=&RjT{AglJ+u4$JmV4L3T&nEjl$k6@%U% z&&4^)G`qEr1@)(mQFNnGqvvVf`s%{GTvY&4rC>WX>WT9*CS>#z2S1quy+Exo1- zb~hr9 zK5WMSn`vanJ}fR^MQv{uw7rDL$=;0Zg(9c?a{y9onG}mXp&DA8y`(!gr>odb0Jfue zPF8kjiGvLi2bgB}fq`dtS61$R7Q1fq*?~}K;Oyr6);_o_J$>1OYq4#ePgDOndye|| zGhJQJ0NJ^-K>Bni%7swRO+5J+#G@Exo5;&U8lg}i^O2ipFn~fpBtvy#S{ozBR;Js= zlnWEx^90Y9QJ#{MkNsqI)?--V_SbhUylqjs!B;V(+TUJe?VgKD%=mSm9cgg4Y^;6a zf|t0dvV_R$EH-DqIyc#?&eT0fefesC-oU-R4+jGC^nPvevc`v3@66uy(JfgSm}|y{ z#+<%t=f{6!bZKDZ2P}ucP_83E<-_dJI1m^Z3g*u-1WQdtJ;g=>3#S&9RI6-izPoW* zA^mL9$oE7oq&t<4dy(i7UBIWaB}kiV>>xknzKL3))~QNqsVkK4O5oybe*EikM%{;C z|155j(POCP8G;Tc{8k2*iL$dEn5Qy`Ibu&^0q9YsNM$Ysg^4xzt>I*wBECanNa71! zRawJHeh;&+;tcULq{SYK51nDd+(^q5Vq@AQ;0xkunIqHetSj{Kg8N!?I?V~3jp>;~ ztt|~JjY9<)55f?o;3uWk_?tWQ$*vCDw*epVW%%wnD_R?{9btD#0nLXvn1`_=y&miY zz~;pCL@;iZt(~*(y1Jv0t_Z#&KBY8Z7m^O>Pq$NFQ$PH&i0MX1ndz)Lb?#iV4V7A0 z#n8@u(9R?0l|W0TTU}|d6Ui*5wE4(}NV?{1z)d2xNjxX3tHiQ>{rsc(9oZTfe(Q4@ z{qj`z3-MxM0$1a;)E!(_B=a`rRMu+JimaP5+}QhMf!vtHGv?0p&un}V&D2v%GJINj zdTzO+W_b_U!F)cC|NX&4Z08wS@th-_?%rFM#-`Li`I+etKnu8P$uS z60_uYWNGxJ5p1EaVz4zMY~|^#g^ex68&5BOTckFMdkZ@Al6S1@#csYLswwm4%urkQ z_IKVe&)^0`0z)pHjD$?IejA7< zY}PFtzFcdTyOW%umOa!b7of^+Ilf#e{cw>v;EPX7p9Wl!bK0RD=Ob} zek0m^5%N-P%sFwy$8e6xV`dm^nUGmV!E6>rQaTX366VMDpFS4ewvnIgHDGG4R4e`@ zzoLBSGXtxh*rc@FP^wBu&}L2_{?gqQpOA2Kd|E2y*1^#URbyBV9&nh!gwrRlu*~6+PbCTB!2$U zsx?h106D#UAxBD_8H0*P`4r+ML3g36Q#Vk_FLXxGjzj;dy5_vXk>}U z4-HkXYj*R+BAhE#Mm6iEx3(81P|tv3Zo`hpmSF<1MlYc1_TM5SzPcoebI;t~RkxzG zE+wjGfK>tWqJKl(E=PH)c+&h*96~5@7^yOw-2F2DM71aTGb^$dAMMQQs?C-wvTNsL zb{<)rRi1T*r<0S3@iv>zoLOpcW?4mW`ew~?8cH+GI-4~ z-m~aFh9dj`*b4E%S>M3yWCOEqJR$>I!D@PqOb+L#sUVbxS#8L5fp%-_=2`{8)wm@* ztE+w_w#uq{_galPayQC@(YsMBqZ9GbyHO(7m0?G#d-GJPy!qAt`Omd) zY{@}K`%-cEN8yYQ3|V#Vw1$w5YQ{F_Exx{~@5I^y^2B@8hG^Z3(2lD+YQr~B-{Duq z)V%1wVgGaNehQJF`77+9_n1Eeg~-S8sr%SQx`qZ*DT@dNZNPzEn@wM3LjUsT;VKX^ zhzLKmI?)j)n_B2>EZ!Q{kjf}(X# zf_O0hUzgCd143iP&4jQr$LfXjc4{=yVXB6CXpgHcdTBv6U|MD(msdf=V5S&1^RetE zCH0BA$bU3^)K{#cK2bJjJq|XQngS{LT5A7Cj#3%0s|y@k!do5r8eo%^IzOcLYxCT} zCX?R@-c2!wcVbtWQ>ZkjAM4Gn5Q}nCu~fU63Z`hV&hXuu6!50m9{wOTS0t{;g?KAQ zz9TZpbEu9udW+>)`D9}A1eCNbx-P+_8FkJ7yms|-JIm*E`kJy0mHXe^UUU7(c6i+E02qn|kyXy;M4`9*UA;C_FeHN2O-8bC?z-CvpiEs*#fMQja|RalBGzmb?l0 z=&b^?!?z|WeYeFv|BC#KF7xo+0-ZuYo)})^UzwlLZN@v%`zS1QznFehmJArfB!Q7j zzPI}2)Z2;bWSjCXbobBIjvN)pl?JW^V(VyAAw9rWUc$m10l;R`8+T9)8y9 zHfbJ4b%Hm$8r0w!Xss(W+Qs=VInfB*a1 zH@0S%?}4Vvo(BGu);t|j;Rl%91M)X+E{&IITD(U8vFmA1lG_{WNjTBF^8kNJ492e0 zV_=T0FQ9zFHD#TEkd0q&06pBw!P~mKj}2CGaemdn(K&OD4p#BOOU&xR_$3EyL(j1# znVCzD_57~$rUk*^f}1+AL1t}X!h%CYzkCyF`#$PI_!{av;`%W^H}W0S3k{=(@yr%< zX1b9NMz20$`rt`T_{rq5#yNqCqB@xHI>njcXNOHrK2Rzwe3jz|ZVGgRmrRAtUI`RP zTvCd85dYDr3V)r_;%=XbiRsHwz{mxN*LLy|7FzIUtR796IpeRb!T(~ualOf{ObE4G zsksv_uOWWFVksNu5+@g4x*>XhO=ji-7bAmQ7K@!o{wLU-g!m}mJQdK(c4 zhD5|k>cZ-epSfje4iIGR`qN$X&5*@fO+ujmo&oS@%GA6(J;8?E!{`v_)5-Traz6d( zcMvuk{=_kt2r-C5=rrDO_c8q~6KF>N;_icV|MYG2X~3UAdz60q3=#5$E93wHg9tx0 zRSrNc#EwtxHQxIJGFIk3MD{gsd?Vn{dLttK9Q7NK+(SLR-&rx8DIc&n=vHmZI)_j0(3d7Ru!cLveLm zsOiRm+QjfY>{fo&itA^#tf=BB`1dAW}>fmkR zN4vWp4c~U)tB02es9%sYgbVEj#w9p}vh(XL0ZM1@K!0)^m4RIKYx_DEP+hLcCz)b5cP?IyKVQrli#XO9K z+rcSARxQ+;jO5`@u$Fj*Ety*C^n>AUhpb}m+LAfPR^&rjL2V>ogYXTk(azw}rK!|N zG^4LX#Lq@GvZW;&)nI79NNp$FR43jLRm)Lb4R0sj|L7xX3!|gzkrDDlq~|ja&FoMj zlnU6KC;;rlz?%>5>GDzE*_Xb2%jme38VwhD5GoJ6+_XGB-V$DehNWfchPdB!g;*S* z2Z#Ug?NeIxJzx&tf%~ahQ`>dYt8cvV>hB;dRI6_#AA>&2GycRC2_NS~RtK20Gg7G! zS?JpmW^diRar5S#n|{~1YnGc(R(34T?Ynm%w{q9BtCl}=bxqdJKimeE@(8`-_`SE^ zcJHmX-18uzVCOD4Fw0ixQB~}GYQ^BwJIX5V2KY0#0sdQ8C2F=hGBJox;mAcoPy6DW zNo!R2w2M;)w7iRDq_-AY+|~1guDTqPCZ|)Lla}4Raofi3?227auUd0%WB#%0QtGk{ z-Z^__fp;9HQ`YL0HD&z`IVx#(Wx*yJ=6QJZ%Bb-A*QjX4&O`*|y8S&_?;@Y|nfwj>0)ZONs zlq8`w-@}=E?d%kht18pqoMR|ldZ3P)eSb}nCe19RzQUfQF3M~Hy~1sh-DNH62pGzX zfByFRUMRh1c?A;z48lm=fib2F33fTvLfL)a5|_3&9Da%U{_H$T&JGv>U(0R30s zW8!CO2Ku`prgwz8kN5yS6q%dB9DrjPKQr^?;bNGM;@05=o!z6xi)_iagkeH{OlvC2 z4W+=$^@&HYL)+fHd!36zWgG2qV)nHv1&fp9tb7hg&kvua@qzPPHrg{8otNP;^D><2 zOQq*!c%)iCIxmwjH_FjzKD+6`q7vy5Nxrl3n;DJ*$q{Ku(F5Nq3w)OJq;Fp~W(rSB z{LYeZ@|_{cXGrGgStjHe0B_yY1klJ6p(0vx7}09rdX`8Jwir zlJ&r*Gf_M2X*^+eq&LqzaskgJ#0Y1}Sld5mtkOzHq{y7iO1qlaDOq0DL+iS3>J5l& z1)k;wrK@hNOX=;KXD^4-8)v8{b53{9^1;Em3p?5ZRROb5l*Gqx%qVx)_5`*0IexMJ zs*dWxMyJqL=xtYMP1@%Cyt2DWGWYL{W3S<(|Ez-P!=YaSHsONAj_7d85-7%IM>s}{~FCxBd zo*{M=xX+zka?@-_de4E`RO3_-&omcl((MZBPvE2U)`9$r^|QQFAVKYn@QzF-2>Lz% zMrIQ(lODIvVSAk z#pD<0yf+`sGs84Iiw@%#5sx%CN$dsgC(bQ~yz(PnH83L&O~IZqNQf(ubHM1c(AX>< z9lv$-jp8O zQ_G+|w)O~3;dc^$UbV~MOp4bzv-s3s|4J?VFSUj9nkXqA&bUhR>)gUPZX&tIWE=hm zvjXYs^3ItLc~b!AIj9GY%@UzGGrdY+y?hD2{Lnr39Qvecpwa1U9H{#1#<#9-Xt@5Z zjbDtuxS#vzt+zhLW&2w<*4A#EW9x*BaSU@N!hn zY%;3%QIz52lKf@$5NLw`V>ZJx2;4G?Gcd1g=j1X|G#`#i+@m!r(n6G>*shPI=G zI8XMB zPj4x#+RP-zV*S@s3{gj6j!BiXUsU*@++q%tnPqqM5w+Vd+nzj}2! z3Y$%Go>(E~?cILg;C7i(CgjuW_>sFa-7)K#Y4s=DFMO*`q@l{2R2&!lsQvN8J1&oM3H;S}W?b6RQfN@!LM z53gD^JVYH6RIj4dT*T3uCW`o`Es1%t~${7d6L1IAd5RKNU-|McLQ9J z<|vz+qw{tjS%3wBHz6skEv*Bu!XbDIU#63cC`<}I7;q#D<0IuW-RTQv23TP19qLg+ zK)y=rDvZY{l3C7}apqNm3O{zgIlC$Hd~%6jjm}q5l#J7-zX#dWGk98h$ya}w|HiAo zZLe%TcmI>~EBXrz>8Yd3iL^)m=YJlh`4^5lqLz&Rg}DpXhDJ234|@gialZGZmj+|= zeEH?ebmr`<4aAbifPnhvV~mYL1+f`>C+gQmyMLrAC#_X7QC4}d&z@=!+^E$g&stSc zv1(SbMth^ckV3M>_8f1LHZUXIXiT3G&?b3v?6mLRO~fK>7g_#`F!!pBQuZdL!d}=B ziL@8mmCB85se$-}r*at`N_(bTsdQ)Bl@6mz#iQ{gN3eG|(*FZI*(-(CtYnWiP!mi@ z2-XC&p5!d65Vi68v2Ve7NIQ>-W((C#E0WOoG#?7EM=HEiD0QmbX(nSDvguDVn$p}V z@{ZAG+s=1)pKrsme)`0i=2EL&@J+;}Qn?~bzQJ$t3i2Y$i7WtR<70ym0jtvy3!Fw< zmri%vD7DmgF3M}#+n44ks4WSQsL)LmA_?OP1WLttWdyo<88ju%t(HHnl0U})EG5}%P(JnCBm~B;`uA`X}EsPVO`;q zjE_q?gg08@L>ObFDC5%y8;?%L1L6fNT`4tNW{1)mds_>*@rU&p>c{@PiIi}yEj1yz zBWzJ8@e;HIFiyh7gm5E<1wv=dvg#R&Ya*d+@6pl|HQ1bVDo$RMn3S2G@7JX`lw5_J znO|p7e+KJ-5$W+N+VKId6{bZ%;;fMJxqOo;fny5V6$(e#STuZ$Su0iHr@%tCnzpS= zMsg1AXb3SSx*YdgbS;(Da)PgLh@>{DSc9LcJ$J|9Y+t;CuW9I8mZ4AL!8&H*`@k|b z2SUwb$%yyqJyHl4dj!I@fGoPcEKo(4!*8*t;J4Q3x9~Th3;l++sd)&@0m<~>^cALO%hcIOL zTq_ncu_~58IA28JC{XN`T&R2@m(Fl50AGwj2z<#d1YwtiZ>q-Or*Pl?IMlz=r1{)Mf=o{9Mc4rA=m zpRi|MrQw{1%gpz&^Raj5@x+mLu=D5XcPlX#`Rv5Im1Ol#_s8CqQ6J##V{6bmQeh6^ z?IT}oJ9(19Z6E6t)Sn5&E7OJCzTy?fTU$@AC@x-cvbFX2iejw3_4vx7qLs&6TaK+L zDq3+2jVo{%yoQUe_WN1-K#|i`955IH#V%)2K#$FE76Sge1^fzXDc4T4(n8B-5pH06D{tz6Y zUWQ+jWAJx$Kc&NZlHhNO80$Rwlx;xTgfhA;WaKMS`9h3VGGT6M1z(m_2;v0_SGvuX z?oz=ijN`l0itN7j zuDOw_W_0?uFr{T}RZ3T9r!TvDZ*{h>qq8feYHe%EqIj8r{j)eHMGZhFu#4)1^d48# z){^-YX^>dbRFrrnGDrb1p$D=;eQFh&FHJJ@<{<^vI=hpdW zG$v=HbnojLIG>KaotT~C)ylJNp6pbQR+RxhF~~J?nc1T;`IB7Ua7lYs{brYaPVv;} z&P7?S46i*gP%^uq?pnKZuqtwE&;a!5qs+gz}EZg0;nD)r9#chwYqjtW(h{7E~mV zz0${Z<&ONOl;#^Vv9fO+K5cK;7dvO1T379{k)py^aY1!7p?A}VW`|&TDiS9Gu*l? z$ISC-eO84&CEsR9OUtxSL%F-lRJtu+&xJI#jfvRhWFO@B*^nkjY)wvEmar#GFQ>Q$ zhLw{Jq0xQ?G2sn8-U@Esu^Xh%l(CjTWo1WWR*mLf)?Wcb{GgG3sD?|cyOVO<1w?XQY zgD>58(?Dj|ePbsFAG@wLue2=3Q$0T?efh$!Qny;k>}f&$ovnrao5(7mTO;a^J+TkN znQDEG8pBRgN(UGs&?$U`DMt%KbRtg>TDhnp?e3+$w+`o&TzjT_@yT#LTOpPhlJWvs z9r+e(c4HtVH_1BE5SqRHwqN)4J$`!o>=3*^{diyBuWy6*+dFRkpY@HmY+qcHlvJ~L z`z?))N471jNyJ!^rqasNwP$RF zDRjgOELr}+!LI9Cl9F0?&F+5}xUQrE(RL-tG@jU-O1P#o!X+Q|d+?0EVNq`8!WpU5 zhxo?JZ(Me%tPFH4erpu5%Bc#hp56Il4j31w1PSo2?^b38Y zKA7HT#)}UKj?k1Gj5~OvN+#SS=941sR-r;pI+aj6)T(6)smfgt@>Hgq1WJRniYE}s zL}razEmgRS(`|)8qg|hh$nBxtfaJP6qvV?HQfri4l$Qh-VL#DvNS#-U;xSd47Kb|4 zmzS^a2#1+#=$zJ<>#*ngwD4+oz$?*Hy0$$OYF}Ggd@cIy+CqDtFCoE~XLscLbvi$7 z*Sv`JGNC0_z&az0zB0KE5cPKBIHNHYoe?Hfo+_fEl@~Tg1$Lq(n3Gw8Iq4;s{N}{& zaIh=!@HIDU^$D88YY!%MheKV7hoaBeDF^epBf4^3Z~P5O{M|GD@S+As}q1iH48Q>+IHT*aP56Xxk9H>?hY3FmfmOpPr3}$ zaty3<8mPB}A7;%- zx|7wePxThPTvk4-EqmzroJDbRJ}i%(ZJLR6_F@(na!U2MmyZ)?4)Bc8r> zm5f<;MWZ=F@ffAniLD%1n2=K7>`tpmRY9h7+*Gz_s3d3Ay-NhZu4|Jnf3>VC&MZ@= z<~5|*OLr|U%36NcB0gr*w}}Uiq-DkH8hceN{IMSCH$}j%OuJ;WoKkmZ0OIv9Myy zLTHH3S?s8%7)k>|qSY8f)Xxw?FFI7%oOP>v+Q2uZkN3r6Hi&=A;U&3+8y{a2k6ZO^ z^4bmI+&G0yXmF;OGD4*Rr(7?_8zmR^Z@XP@sjK4bS3BR1Z`k_a(89-e&m@njoPQA( zrZx$M@p3tLw2Ram)X_6=D20h`C=-!A2U^unQWPDurpS)*4zpwoFbgPi2nDII+TDqR z>BHxi)voU;Pw27cYGqKRH_z(>haubClagpFb6^!Bol8AZV9xRBp1{snQoiUsyS~C* z(iO>-5(cF`LAZU@m)&aD(*^T9TwcG_VU!)^>b==+fJ}KDrND%;rk;#T(WlYUN<}0FpV_yIn z^&5~&{pJVe0w0H8wR-s{TxMmg#UMSoARx2SOFG6zEWr4AVUNEOcm@1X%JqkO1J^su-1zsa zh9w3$kIZ;Elbh#URJGJ$;>JG_ct-|5S(44oa1K?!QoYEL%+AI;sV~5D^Bi{S3vZ-` z>KE(m3Xn=Y?N0=Uyy03Php#|^%R>!-gDH0EDMt6`9Q%$qPF#ES*may~D>&l#tOL(4 zS@PWe#>V~6Em`vXfm#0!HZF)n24)6>GY2A(1&u*0vi;qIb#({d-M-_!gSE8>-`g?& z#t>(d8SlKPRN? zx2Z|}0^mmL>jpR>{T|Mt7+6ozzG-7-{7w3K!x(x_81oZ82p0nzwdmP3X2eg!v5J9B zAED=ZI0wg*GvV{*IOe?{e}R6#oY!~%w(9C__xH_va9hnk?FAiaC>)|Kzb!4Tqri?uZv0?hS=qi1ZruOD z4W*?we6at@wi<#ozXNF!p;!dS>>?O#tbhc6XXMYo$$rd`FRcJapSl13`!P#y(H13J zI{+Lb#mu|`=WP4~*hYSIl1xX{0uw=nVtX1BNB0~ON@{$w%QvzVoJ*|<>(t&nm%rF= z;>W3VY$@mZ_|oBH-OX_L+Y8$x)Q{l-=LZ4H)*YbPT~S`?wq$uU3BD||T8&}qhU@z? zL!Fyyat3BMC%qCcWHB}jX8bLPPvN9f(Wx6^VWny!_>DC*9b0E#e96!)-5od0Pa7Ou zvm$5NnfbH#FR9ZFCuaynN$F*YfteX5Q`xe{%>HUmLTZuQUz{4l9{T~|6z*78K6t?8 zxNURQ-bDq8jq7Ko$`yKhj#q0)tM)}2LJ4PqCQuV`7kJeP$=Nh9^jHCqzZ9@92qt1K z3QtDI=0KAUM4j#wY>$wdgR9NjYcGwyE>J5(m>gUC2apPmDPtyiu%@YY-toam#g>Z;a))~xEhW-y zePBsZPFKEp^Qz=-|BZ{VTYV|iTx_j0d%^yu!Sm~iwVrg-9F16RO?8*e&04ThCQ8Ki zu5pD}(er8ohhsxF+0QG+&oU+q*p$=Zs1qAz&FsjtSo2#WnH~97b8b5(Q1TtEf$AHE zib~f1YQduO*W}mKgNU{``K^21r5&M+_B^w@u-TtByTpk-1l3HLJTUKYU*{cb%Zk@s z7@YIcLU79JV$OKs`206)7dbk=L&+y%b{=#XEd1Yb{Lz21)kcftA|{ZzRHHZOlZe6P z8o%oDCqk`UfPZ1l)LN}K(0Xhw9NVA5v5oSC7se=z@maF|`53E{JxcaVneRr)cT(Y{eGkejY_O>I7aysue zXVm%@4h=2z)n=G+$`~lNyDBrS*33$my*OZ`bnY`N+V;;&OPja9ZN(XP;-SInt#i`S z=4`DVILyfDGAN5agtA9MM@Ngre2FgCV3SPVaEcCPMnMQIT@Y!^Fj}%^rUqwZ7=aHG zo4mZFc>DbPqBVEV>p!zRSLMlfQ=iIn65qn!TfEeoJ;NWKnQpLT&!Cc2UZu^IGUvuQ zttVC$=PkRnJ9ovWCx8;&QJ+0=?A0|XDQjLm z7QHg#1}?3zwd9?QeI7H9AUiuWldSz7!|oJ192P-2IEA*I2_hk)-z$g*B4IO_$D+@0 zOW>UCfcRtJhM(y3Xh@Hne!h{JPvHB0@(g_5FGJ61V_)Mx!8slSH~kSkr^5Fd`uV`y z=o!xZ1c(0p!M~zDONH=e{Zji}F=x!G-}}ta&~NtC)$RGs(9kn`>&KF-d&8lgDzCSy zClv0jPX6zjhtA_o@L}6XCe0hs#tBFW{>UGI9ls>C8rAF?@W}5TdE^niGBtFski!=7 z2Eoe9bPQ<}chCdzpO`!7Q9oHAPnkQ=CJX*HoI6Yk6?iDplwmYPs{NkI3|E{a9M~k9 zweigC-aA$l_-Y3-s7HMriGTIlZ)(s)l;GjCzTSE1!P;S6|FkevGj@U z6*^zGWxmDaFnMYh=B?Q3@L*5O4;9ekt^?9k6peAs$Yn4|E)zxaxY7TSd@{Rg zv`S?m?-=xF$}b2ZEGKZAN2yOorHPheS$-<&# zY4EoVblKVQG6no@0sY&%#(!G?zbmK9?j9S9mgT{+F1qX-)H9f}8u;5by6m3u-xk8} zTIf3N9mlU2epgGEogbs3WesC%u?n!6g%eMYe>azvk40Ed!?I^4%EtbPMSu~OJv(0J zqYeT)wg{HJK3=aImKo`?H^xR$87<#_fNk~Vf2R*)1K#TXtgLxeNl8`nvaAIRnrWE{Kl>Cx*MTL<|2SrBK>B$<{AqH=;g zO`?hDSnCNonmvu zq_A3GvuN9OtRJ>DiFQ5cePEms zUTDW7D!jl-oOlU5AQffZM18DEAcUayZlJwWoo1juYmS$nI;9X-fj6lTqx=7WRX})2 z(`1)py6B4Oxp1gUWj0wxOO`RQY9OzCxjQJ+h!c!%qs*q01bymM)j&Sjm>jtc{0~l; zGwS_WJ!P&;cRAE@#R82>my#;r>cO@OtDi;3ll%eeg!S{0mBUou!K>)E%#I(J;mHc5 zq@;yw6=97w&u*>AaymFF~$S2WDi1I!hB> zW!;&Xiz4qyRLF)EBG3fuj_I=a6kQf;;*k`=mnJB70+v7{qFxqiu)lOkbb`?@;^dMz z@Gq59q86=*`J4OzWx$tozNCz4l*GS<@=NE`7OavOTI06UDz4$cmmEa_)4hM34Pvn6b$+^O-p*}47k?Hn30;^ zqEXdHk}4xcW27=EQqSnDrSQLch-Vy~y;eRRj9hkA+0JaYe%<8_hTZ;@LWxzZ@M-Lo z*$#X0oUH8Gg;t@)q24O+>rY_Z?o_`w5TG8D+vGg1E>s)v%qmQ@{f z8p(1TS!L38k?@=D=r=o~-z3oA+>N6enYr;!!b2ROeKw-Ik;qb;@KD#jNUZ~#UIbgP zBB~eM@(?&e^)bKMi51~v*yWgg-A;VP$aUCd#y@8v>jgqb^doq79&qwNga=e`cpj$i zq3+rYW>JrB0wthm3-uV7`4X5x-MtYsfs#$sqo8OL^%!*y@k=}Fb|Q&5Lg$T2V(I|X zPMIXrp4;))Mp8iSbhGE_&k#%S;#m9)9O!Rm73C9|N!UlO(L;{?E0()yFSWnqkTv+irD4j{o1>Y~au;?}HUuPfw z{PTy;KJ?K?55c-_0dw%b<9}iq>G;HG7h1&_57C;SlM%VHpDD+c#w@>;tCs~b^G%`o zeY2BHS*cczO%}{4vW5ocb|w9X_xJ{(Ld83#v8(w;hf$=^@DA!+T7l7Sq;C1SHw+)# z%z6XAKn&6Ls>s%rMA0Teh?WbINlFt0h5bz?6v|J<+vInGbv@vkJLR@`MwUDc zVSYFT=5*?wMljJol?lv7kf{?UC4%{V548yaIwcnhWycY0*iKu38@~+497)?QA@8`$ zZ;ZC#D}fs%ARg)%`<$&N?`H{UZ=0wt1Jwl(-BqVKXTp$0DOH(?S3*5|TATLuXW+b% z?{k))8QAs5SzCQ;Zh3m;z0}`-JCNGG<@D1F?+5V@bdZ=sYWYC9@lnG&*3s$v;LanO`B5hT<2?@DXZIOai zZJ|)xq!Msm>da0`%yvpONttF#CQ9&-X)(hqEKf{=7XOy{~L~jXL-3maN6cyO+Os)6C+0xl`J@z11sM%f)IW4_MS)_~-0yT0@T= zJLA!a7C4jckBR#Mo{BG?x1-KB!y1oqr3Ot#ZBWPF7+=)Cy*^rIWXg!Q=G{EUCzAHZ z%LJqw*)6T-S zW97}-km^mnSH|Uk6vvY#>)uj@wM~pJkxH;>NgPhxR3Z;N8~M4NZZWdf7_UWOkkz>ftO|d(QOj4osSBv`_my27$vn-Q!tM+s8UglYln)hl@nk+n zwJ-yK7bmtU5pOnAr=z^7aLVu-r!fBL#n`YY*jqNTK;}{+hHZp+JxI*PW{@8u-+g)? zK}n~_wT5UP``CQ*pg1{_W9siI2`X0vZ8|d)?Q$Mp$RSS)6hdxIR;X4r>mbLbQ0TaE zTmdq5X8nr%C)UmhF>qu4u2%s5m1%kYyoD%bnPf%K<21>P8U>FZ&tX$)V^vl{qFKca zF6JaiWNI#-E8s)<86ox&Y3v**KbcI5Q4D<)M!gc{cZ2fn3Oe@B{34B8_tv>b~QdWv^br6?y!o)G#%v z-%h3qCP5WOeTwq?K^pjo1{vynH0K*pO7AJP4eKisfBagmQ%HCnSmQK;$Q~On@neoq zE?7GgOp;{s33F0|Z`sk#_Aai6mg0=F* zNxX@h0r_1&CClfuTJR?7oZP0{{V1KA?tz|d^_Ju9-QDfSt@T^E8Pq2d9uNz~Tx|4r zi4}7*vT|~=GUiq!GPq;ku^+fP?)XH8)2X~e|r?ABRj-%mq5DVF^d#f*EKO=4ff zaG%J4%9~!zdvr$Br?=>B66!AS*fiuZo;aTRnlA*#X~?r!G5k3Mlm^N4uIa=m@PWw# zWIRH2v|i9KF6`kj@S2A5gVm{;l8|BrI0Xsp87G%*;MkOMJuRd2)kcLq)ex#v&7#vh z#z<%S3DR2lvv|bjh%4}@ojf-rPnt8pF-U&Tcw=ye+4Nk2Mr6LmP??pGWKwfNO4Jmw zW{I{38mG*e(X@t^{cKjzY5l84!}H+PhwjuK2S1@PapkyWeJOkhpuzy81;w^K z!cLnS$8LO`9!)YvC!v`dMv{p7xgmQ`+=UY4O-h)Dzslj5^1BPd>C=+y-3j97gd_3d z_=4hhN;adMc@w$w$ZlnpDQjVKp|tt671ILW4$T#$*7{eq47~eQEY~-V37r#-f*@}qB@%5(=1|*)~xm-rerM{`2PQQTnZxEJ&f461b4t7<_t3nV z8=Jk~H#MOsCWS>b9>fV)eZlhP2sx_qHssZ&_wSvB5=C^*OHalAdXAgx8b^VSn~V_~ z$XDT=7|pIKw0jrL5Kq?)kavm2H_d4(#Dr97Cb*Y>z|JLhM~1g9?Jw*1for$k>=()N zj?8V@*O!*N?DX7OEB#-7`Tg9(_?Fs;GEXYcSZls<>!XOAy;R`8B#0 zuSRcI7Zyn$La)Hc~Ue>v?@~(3mH%Ae9Mg&! zuTaL@h<(*2qT@i(Ewsr~Ra)vSThpBSoBPx*n?+{eszvcey*bq)DQ~D)5cujIxfR2A zB?Wcd^x5l6s9Vq7M{ot)1zHhXXiZN73#w<9eWy{||MKw+epwm#W6b z5$rj49}a6?h-$W^Ct>XqHD`LF=%IFK82dN=3B)D8DkT&*d7-+OpoC?Pq|zCa%D^1J%mfghnnJ%sJHYNIyI)EV#=LB|lE zNPJ8ONEuIl97t7xx9H@@5AGpNZ~Ya)@APYQqm;S?p`jSv61uXm?Aq0;s?F=5g>x@-Md?r2dZm^&qlA z$3=J##E(z=WlqlUO{?PUsi*2}&R57Y19@m*%a58vs)nSbnC}Lsz{X z^psTH&YkR+(Q!1$;AVqu5`=YzCcH8K3ujC)D%Qm7%!%4r{<4{6ep_*Go~67vTbagI z#*0l(zuE2em(3{iTMFjnl&o=)?DSf^$&Dke_lhk{6QSTj6o7fxpia4$;Zav$iVqY_=#r~?2 zQ6~%)PG^My%n{RP3ToK)Uqe{qyGAkJFB#4ZDHJ#;6X4j_zm_REJ1`Pk$5u)%eD=p* zOC{{<2rfCq*FN|c{D4gGFE*e2y+8)mgLyo`S8=kqXVugx)P`eU!#bXYb;uc8RX_u# z5suoKJp60wpLb~V+}V5?mn-GZ<``9X5_eOd0VTMkl0B*QDOJhZCq)SmUl)Y66v9G@ zMv(bk^h^VoLuPC#k4rrQsz!gqk#uAo65aH>?!fZh;vsirLx&+3CtrP3MH!z=tI$QoZW z2O!q=EA8W^?{Hww={4LuWtqsi4Zedlpm%f)RMFJk0>J8q{qqF*Ak*pwwBVey@&x-D zmz5gs;pZ>LTht}#1gU^Qmu0GVMD52k(hd(eQrNb!*AZuu62>79+jfC^92EK}@6lsNSyR6O$fG@=Fk{=OU!Ok@im1a!!J9|X zH^fS88@pn{E`WjZ9kCLGQB0~`5XPP;4BGw>xqOU{p1nXFJ$4L)sh6hVVr9-Jv2C|r zI0e3YnR*F8%ARit)2FR@2L2fjxq0g zsC8K9*cT|?FB!O+Lii*S2P<0z*3J@rIiW=gha4H7RV`e6!jLE9$w>5ktn1X>GkKkq~7wb zKp*7)3zP<1GKTUu8?Uz3nwYyT*s|+A-i92zJ*UCzsn51;PxiR{ewQbi`Xsq3Y(S|v zy%iz7K2+g#rlvX*Q&MPIMft#|5LXm?EGnzyw5Wn~xT%xaKgJ%X`w6x`>}@mlk2BQH zJF(}ell%4oJ^jr~^f#vQe0;GuBy{AZK$yO$QnLZ}4@0=ZqBX)l+Q^J_r7|DORVwp9zLJK0L#%!hDXfrJuz!qZ+zD0|Qf~pzi4(AWV!VVi zoT3P*%n~#B>X~Owj*epZvu6*0H)&eDP>z2-_82-#Cy^TB;8;+C8;8|_>^*1`1I%7M zAUcO9C1DqEw+BBb8mxlYrWMyVdc#*c=a!vSE4${O-ZOu|k5dAO`Evx8G z#EQP{z3HZ2a_+aNN8y%yt2MtRZ1wxC#Er&`hCrY` z-MH45l9G((FFR3+{lxbD%>2d7FpgM+B`iVd218DOx018u@SC@7yS<+Fux|!aqdTaF0SmN08G(C_nAx9p(srTD&d#QK!_I&#d zL(d5OreW;4Ni;Wn+k43OH$at#tcf!+Z8ZxYS$U z^gvFh=Ir0!^UXJ~4+@C`SeRW$w-qCrLNS2_3Q-%y+KZI={3*V5#*F$vpdo`^yDp%H z!5_x{flh45Ux@8STdGeE?iS7kDsWP$6(%I)d2)p+UR)DF@|427#9W>fWrbKDuMj!Pp=3Em zZNimfAJBVGk#V|c2Cz=Lw@)(0p1KW}1F#mYPNz-K>HZwO0w;2fRC^2DDJ2R;af-Vj zS))mYPsIvF3H5_srP1j$Dt+wwNrErOX3Oy<*o{W}I)A|J!cLY#Jtw#sOq zY3$&JwOSE3cVs=fZV+Y~U^;KVjh*T=7Af zi0pj(h*!CdY7Wz!>YZkC*0M!q^}KWMbs&`NO~ej2a`0R7rX6TM>P?y7Q7$G~V&tOemlD zljIZp%T+RR>BkN14KaCiaR`o`Mxq&Gu}k6iXh=ra)8R-g60l@EWEqphdeWgRm=E>J zIHg+ckW=0T*`Csrgi@uF%d_Psm(^%;1{;iewNb5>idAeg1k(Pc}{DoR=Ei!$bKpZ(M(pY6uvsxrlo24?VM#MH!`QXW0q-Kp! zsDVYyb)1%5NDHkKO^>%Mn|y9i9%)6c;;oTL8wym|7V#z~dXtlq*d>;{w)FJ&Jc}i- zJw3fG&qD3YDJaN6{}|qx1N%_R&OtgHnCP%6yZxAUj!?|uCgdhNvl5j@^*Xs-!p@;A z!gz(os7ony0w49d-Ygb^S_US>8~gzAcCjYKo*& z(+OlUOf_03j5p|P=G?aQaC?D6CjJ7^JV?yOtgvncYusN2*|LrAZ~?YD!{y9&E05|> z`yD;X*2p!e@u=5c}w}(8a753aER)$3g+qSACFYZ-HZ25v@FcXFL0Dr*!j|GJv*U(=~9CzKAs~Yh%E|LUBRbfQLbb_vvuM7 zCIOGf;Ftm1HUxQ8Ld$(TwjDy-dj+u2L)SmFQKG^lJRvENWngL{Vova}NbrcO(q2~g z2wx0gVh z$JT;<*KSurX&gfXuKAUtl+uwpp`WEXl!WqHu;*Ip?PztnC_bQfqJYMS-oNUn2-Z2M zM-;JGoS2C=bDkJg)d{pxLc*6>$H#U8LqRlRoyqtiV^Xp>UIk@=)t4MewkBHXuk!=y0UjEbZ{l3F0(#|tD$&V(kmM8xL`L>z$&Dhmoeo6Qj$4RWoNAIIm(cx;@* zvFg=YA&11-9KK8^H`tW%90AED01zuQ44-uqtFR}?-_m0^cDffkl@9@tB*84PWO=mr zq_l6FnFeJkxyj^Ga+FEAuA)`#AzjYgXwIFtpst-5)wL(k81c>YzS>a#f4zU80H16i(z5IFYpwPu~67&cc%I&utui^9PXoTcE3%pQF|1&#R>V zil49Ccvt7#d)JraLubGqiZ^Nv)OC4%ZKa;kf1)-wjD1b~nY>8nTuGhc*ge_uWNMbp zd*hXHbneWyQ!9$|mYtdt&6>$=ZT$D~6M+4A|D1~yb@Bmfta(5J8u>hwI^|C)y(|RVcBhKq($1s5mC&bGc-zRlvzkFQ?y#HL~<-R9J+oNA=gAb$It=C{eY zH_fo$#@q7h93~n#yCOGt#n}PsZ$NVz2%j1lc#8V=^yqt6uvXNnV{^#}o47RiB=zqT zC#ZivHSja+1aZn^v51QCe6W-9Z_=Svn5f<;4`BA^O!~;VmEZ@8i_+y}ZFuqe&qveV z0Ot&mx)g6shM9Qlr`Eiccl6D;VK4`5yF~XN>^J;f#&5t4LQDoD|0_h`4Ea*VV}^qVp(q(j+_)|RtYC* z^K^bx5nCf0u0LGc`N;k@dtq04Zc|uYzWc?EwcD4?ac4;t4vAossX2Z&fI9p@&D40XVH%rN>%V#|(B zXLiW1vA{v1VFn4lkGMq5e0TJNrW*${Nxq18olMTdNusljT>nlimd@AgZP9Uxf<8<* z8_{|%o0Xz_<+gbOIhYHcx|{`G z7=09wI;{}g0S@vLWB_|fsQ5M``9@(pI5B!NwgUG{azKv}s&(OI=V23C( zC(M+N08v_Dk0rg_Rl1aJJ7yT`JTGJhsvH1T7{{P>*gQ&oF!CV_$PVg>9C~ ztbKeS<{O7!X%Z%haRuko-NjXNM)V9cy;EQU#&<7B1h5e^z6B1P9RE1 zZ_Dqz*+<^-Q)lkp(98^@CATFlzb!MNeAn+b;Ri+rXRdEdN@`p`6W!OWYxZru9)E|$ z@cnYK7vhu@U5`0|QgKz@ACGP)A$zYgCCNwQ+4lO4?bfuwlwokaL?c7->>#5=1J)I! zjqGZ=aUgRF3z4_c0qoMOMS6Vk|6BR%F;+EoCuf+Bjgxs5d&6j6E!y62YSbKN?Sxih zX6&b~Lj!4P1BbezSNsL3HEc_6bY$gr-Zy&kBz0eB=Y7=49UnKAoLSJcwKbXg=8Ck? zc(*MlS!*}7|9LZ=7JBh-V@TGOmo$Xu?rZsJC5xFe$$!xE6PgdM8sGY=b0+>o#iBBs zt!z=nOE2B<)^!CXyWhC}CF;8?CQR%#dvQ;8MrVO_^hfO7qBVEToqv8^2>?$(u)l?0 zea1xjvs1`8x-T6ud>jx5*j5umO))7%jtZMqHB@f9;lMe({kswabxGoOEk(oY-2OMW z=Oxy!tkQU-nA1_%9$B=4GL6QC!E0J2b%eb5`|L%B+sii%)TxDT9X-afpk5|~b!Sh` zg*UMopq#WDz@F^-*kASDhT#jVa??9kty|TZzGhzKU|qUaW{j&%TyV{{;#H4sEX<%^ zWoSb+!JM|DRJmLyAPr@8MMF2$&e_(Hne2|#WOjAH2~j58m{gLQkhkIbBn9bIHTB)GoCd#~N8o^`kli9vWGp#7 zfOiltUXBniN^B8_+RGQH6%uli!UAFFpL&{C(fu*9-AH0QI6pPzOn7jpxF{rps0$mKTq0K{>;0sT~>5Jdv~L@Woda zv>#oP1LAe5rAe8qhkGlMc=}+H*dY>VVEdALWs0vp-bqoP{Caz3=ITe*<1dYbOXlVq zLv!~&@Ybs2nYj*v#CdWwZ;gEe+vzdLgN|`~Bs6zBVo6saF0`;WKt~;=z8n4KOKYMKaFteJyiG;CoY#`3LAu3ese%V^JkIAIy?yjmEEQj7 z(Ng-PO1q;nkDb(WIxJ3(g*R6SC zbMev@%f&>TTHkS5h}=h4`DJr$Dtr@=VjJO0xsvmC;({7ppZwt~&n16-$dZ zKe49n`oSVDXxFAFd)}cQhlngSXEvlndaJx@t4l18qs_D+PM)!EhysXHHnZn$#$$mK ziHQU7DJw=4Q-*DcCIK=N+JahYZ(D9;+jE=qlB)VvZp>@izjn~q5wD0-s?_OaZJG5$ zW#*)s1^L-)!-r1^^`car??11e>pC%BT6BM{hhB81i!>YkL+o}#8Aw>s6!*%MV)-Sl5x6Vo}rzk2$0q;uZ9 zf3-cPpjNMZbQ`IlI$CQ(s^?{@f4~p$`)fe+tErl%qOjJQu9RkT#heDY_|SktbeQ-{ z29>9p#fN)qPxw7!HSJ{k9qJDr1MD)Aod8X6bBEmnTf>Thldnwl+_JG|u8;T}Y6bU0 zso2>P7;m%|hq=;ROD6smJEv^&VC|#CrANA*D<9tZ#vHswbJt;OF6Hjq?%(vx&h7z* z1HEy?#IN=aDGOOM(hc9vb7aq))`Z?;qQrZ=Q~*y73Xt}l*N5&|e=^$b$|2ftuk`1?~6FRfYBI`|4EM zw&^1SV|Q){g*Mzd)_ZVSlSbVzw58cIriF@aFR_9b_}HKOy-jo0GkFq3y_I zfG=FB_(7#6SluBR^m}!9xMDPe-j&=y9a$xzKS;D6yqMq z9|96zChh8i*hNW0d&I;f+%qqxEQo2Ny4se$;*q;IRRyN5?krwD+H1tBT$H9T@bQ5? z@7>1TlA^(n3~(G;wZhG#E3VNzSd{J(y!^HY`LADL+*uV@x53?sk@9e z9orY`c%ZfyJ;U$VqxY61se$xeDVv34&>8x@(5BVL`*^2V(LAzlhD;o#Y;5|yPUBrp zWH?Xpi=16Zvkw`I^1wAxpY>0K)aKB7#bEF!gd^VyTA|G>l8cbdJa?B+48GDx=kE83 zb8R}pO5Ncz3vpZ`Pu?Nhnp%lU6Fe(w&D zd2adGGX!zxQ^Z{FO74H)zlC}N{$mOY48)v&Jp9L()?@qTevc`UA^jeB_&uzd@@vq# z$=){^vFDD~9ed5Nt>kNUR|Yo!7pQ|+=x=9mNpC|8r8u0%`I+d+@IV^JugxL?O*a)V>Q%}XBVFT48KV3n`L2~dtq@LnVCu?^Ux~S?5RSQu>7u- zOOC;<+j#e~?(MF*yYVjU65O*cv}diliXib*`*>Y%?V;CqZ-Cq8b$~Tg{{qeY7x+9K z?!(r(k5ktC{S0-y_`@# zydDJVg4Am2$gxMULTy3VB?UPIVH>!5%+m$WP|4%yw2?@kQg^dw{OZ2CGP+C2<~y7H zHBVf6zUSH%L3C_+xdX%aIGdrAFKg;OHdf3hd2Tzj;Y;8dqS}!}5o#i|&x^UPsMJ>; zqr|oB)|IPnUFPcUMa7k~r6)$0?C-HJX>aeOVRIY1uUYO#m6bp|G!-bClhNOvd!wY* zKXpwv@#pFB@o5sM5Z!wyudOs;29xX;AICB^CAxQ0fqyYrKXUixs#OD#O>S1j{cBsV z94jeZe&m*Wn`ckCI48^#+fQ_@Sy5SfS6y%6@Uem6)7NYpZ&47R(A(|Q`k-92LwW9q z`+F1bPvUjb@fKVqu-+k6a^|@v_3wyR^UXpn2Xy~NX=M{%vsJ2+S#s~YUGcrgcCZ8> zC=?L~>=KSyOtAS{DeI1~9kX-clzp)$8Ml#32#=hB({XS4E^zW|3NFS=jkG9~#=Z8J;jvs#u! z%7x;Wi_QW?wn$@BJ~SrN=4IwN+bh5(nM3Sw%>5%zfuF3cytdMTI@b52bRV9rF;H23 zZPlfZr3OhZst<2(#Eymd#MWIn&slvXrc~OC|DOjxpHAmKjV}-%NP%wntnU{37}d?XTNG1*y- z-ecTThbThc+p>n6HwGteYS|ehhsoS(C;N@lAa6Yd&rg?;z@CdvP62uI<8@nJANCt| zVf|RBxW&px@2FOzu=5BzQ>T0W6=LLK@iA9(*9bq0cHckLynnnR7c>hzTFSP@%ODM2R88SCP>w$i=^{kX(845>1&@LLl1Lpk@R0^& z5c$|ex%mCI4fXjye8XL7U{?gqW@NCaC3bs}vUx|h^ZxJ6O!p3)!89h>AI?o`OL*VU zaYe>TZ+cS9$P-Cf8Y8q=*5+_>=$g=QXzK}HZd*+#Ozw|s{-1aaq|KkP0NXj$Z)r?- z#ZfrVn}s&f@bMu>c*FHAlNZ|Sa)sGUVHVdB2pgR>cHznaW4Gp-&6%uBiOe9*!TzVb z@h{kZ47azhtLi({Yil2A=49t&vDGpj@)JZ_Sh*%J0oWoLYfWci8TC$vppNwy$d6g1 zXDil(Hv#v(FraS&O1ZbAWO_&5+<;}-+8OW47p`il+56ng=sjDi=qwQr+sQn+t+cnY zNTlL`W3H|W!}fLH*QBm@^sOsayl|wge9NP26$WAU_ij++D;{G04Quvq zV`B8C4Tr0Z0p{-q2E_KT-BDu~4`A3nN!R8Z`er->nYF#UgM2hV5HMDl^A78$6DJeJVMNk;Su0@uhuD`f|HeT2O9i>bt~u zc9!e(<(-bZs&#^DpS@ROJvP*|qsJkaEfve?JWr?zauR9a+r`!oaWkMWlnaMsNfN~zrVa{s7 zp`kWTKCKS)CSZrpO~N-~ZZ{=UmJlbgzma@Xkjgc9Dx0KmiHGL~bBHaJUK!svMY4fU zL9xMs!OUDno>?0aIixbhzkW)dy1-=ycD6iv(CrnLR;G|CXNuj%dTsF9K6)^!%bldJ zhw_byIvl0b5_Li@Mod!jaU4H@b|B8S%Yi;(g#JfD);5XlQkk5xT%h^D zQ-_;-i;?;AP728afuS@;vxq6r5fww41K0I}Zz!XNhS}TI9)l2>HE<19;w0{d`V|*5 zyB77PNYkKAX@-1y$Ck`REPFS8(K;4L787Yw1Nn+bxp2=!ac9^s$09Cgy5T>I+(rpa z+n6jduq6q-TV(O;n5R-*0#HyOd3c8L7>)OTSQlw1q^^l{=|aW)+ZXni_!91!Kud_P z^X_FsyNhxdN=dDQ4d|C&S1nq_Yvj5-PGSVSRoNUq_!_yY`qHpMfa-(`i8J^vct^V8 zbqpp4J?*(+EDHF*AZ25;F$elrd{<#-QK-A7%&035c)ebwpQ#dyE#8Kbf{=x8s~Z>| zsIwJ~UOPPfSfC_F#LKgI!_J0ITV4NPf1S8f+0Sf!5{7LZUW@?8v?5$dM|CXx4 zzMYM;ExUSMs?xq-Sznb~q~_qujO7Iq-?FQFnhve*l>QD3G99%e<*pW=no^)J$eVZ2 zzN85uZAEPa1k~kBNzsl> zH~2@JfR)8(M!@555nGx0`sZK!#|I~u{{q@Qt)Qnd%OHMZ@+$1WYd){SC;vY8(loSt z?!%0CeX7WNNq@Q7Og2BZJjLe3I*Q%!a>d^I#TtsW94dP`1N9XD1P{Y^hU$Kv zgk|DQ76j3Pm&C&YE*3TRHWmd}o*eLPTs5ezXRAd;<*gn^*dbQB$|}lS$|->|@u=V` zN2$|UGtu0Bc-$wllp6a*3avs?5Y$@&1$tvad1s(7^Ip){C*ar!h=rHt2;{rdqg6WILigVr=y0lsX4Tox3MhgCjmii|32m_4sKpw; zD`Es!&nByPQ7;AHGbQ)Uf!r!4-4*D`18t5X6t!YyV;>XCKYU;5SE}h)mQawz$>MRj z+UjN1RU;vlqPU?T#8? zN+WaVVzvOjar989!BW*>_Er6k9eC2b~``$j$+;r@D1rUvA5Sr&%Bb)YUh@I&(ANAN$pxe*@ps$`p_1R*?j5x#g<2VNov#b z`C6M)>c|%e@*UE&@4@PKdHnCo{e^$Tt+wU!dNmS9FW{eCQ1!=jfN z-J94Yer+-O9sP%TVs|@VFz9Wx^GQa7>!sZphvK?C`Q&xy^2Y$rn7HofYCW5F&of8K zGl_iXI?}Jrw_N^jJ&fogwk69065Q(FIg9u*7D|W=N=9Vf2W5mOBb3pZG4+4qvxL}4 z2N+8iF#k6H{T)e!$qmlMrRCKfwdY46{i3gY>SDaWbP~7XG z%f)-JclnFsH{uP+5vOQKDymASJlYh!nFEmCKIBzWFHUlt;_qC=!o_5&5^}JOC~=v^ z8Zj?hz>1J-Ax18{I`FUu84K9?yu>13N|KAwC5oaeTx7-3XdsZLuN&RTwb0IagY*d& zNAo%;BOqyk(XeGQdMMdycX-vcy~d_c(^^k&XK7ooP$knd3!eD8|M-}DtY|rZL~E=j&>hhXd=E25Heg zS~z9H+ZM%jNOg;$>`AX1n@jQ^wXAYd2`_i9T5@cn1exrv)@r{D8tvGe+mhrK`tNUu zWCs^dQ=stM>09UX=*Sf2}??9K;>b_G^py9Qjczwg}*ALb9)Q#C`m_44ag<|i) ze=}F=KZ(C5GN=CSD10=FYC)O>ygx>GUROarD#*x4i_K789VbZLu=UBgQ~Ii*K(L`m zFIJPeQ){T)sXZ@ln|U<+el%5TcWcL<hH+c@H8p~8z`7UKHpFnb|2VpH%o){OA0H8%ajE@2YNJ$ z++4cFG{WXqt!}cS6t9`b!uJL3YBSGV?Zyt01i$d$)FETX$_kmGvbQKW*<`~jTUC5I zXWNisV8_k-AVG`LSNcKc3T9dJ)OctB2^w+uZct!CZ(m)h<%mJY~Q??>WfZ` z+d308W~Q}|P4nLPu)p(mtSss9%J1WeSoEqb_l(Xwx3{L{suxyzXVxyW)NxdzqRQUV z(((EN2DWA0c0)y%>twdjpji9pmh!g4FRZxot)q2ZQ>Ck44278?GSmA1qZl%l5rpUV z0C^vfcb*=NuG3>2m6_W5*AOEnc1^`Tu}B#upFG9Si2@+^w0bLsLmKQ^WtYFY*DVav za7gHe4fn70O0?Lx=D=WSPgS7^-Qr2Okmh5Xm#TgzVr2{SWl9ATu^;`O{2HIm-o3rW z$&nRQG^%ic%%ebSXxe&Rtyac-r@srWfxP2}hE;XV4yDR3v1syGd;}zsQ9J(yz80=4 zn30Mz6a+$DK4Y=;&EyM?E7=krSMO=`^bIT@otarXE_H_Offk>YOxqltoU(V`yfHk~ zZ1L-Po)x!FZGI?-7mHXTsi>;hS94cwxyEA_Q9`J~$VGP9lFeGaCm2%urI$V3Yc_5io$BxNHWnMWJPEr*Ro}CseEigM&n-Atp)QeF)qJ?8 z_0eOf=Qu+xj>e5`7Ot@Z@-$qd$n4RS*WOv*{mI+Pp}ou9&}wzfWT!DFxNs^VXj-HC@S{rt5-%W_SV%;a@i*({40p&KymBw^XoUf zdbCAoa4T0!bNP7^4#T-*OMTm}?t%<#{zQi>Xy1)E8R;z6KjPzRIaGTrM^XLwW2^##ya8*{wdsh zA&C_bJNpE18~!QjrjK`IprTinjIx;d-|kNlH&JK%O>w5Nnz^rPx&e8 zdQm!LEN26IiJ}zo3TkFH2X(PrG9xkO<%Szep){weU~aH7lcyA!j9w?WaO-TKVme~c z23j2E3hC^vc&3*n73AuqYVBil_hWsU(%uqxyH6$JgI~`1qx*n84CfNW-!V^$UiWY` z&^Fsh#@19>#QA6?(8FK*sUTW3)^dt=D;&rDo%vBH5<)roQ8Wbi4P4P{tBNH_1#*;P zF_|PaUPC5HT_a)woN&#~l6g|UV~0j|MTQ>Q*PO_cGS)3C_jH$On*}Bwn7s57{cWO{ z%9hHY`U)|4G}7mjz}Ya8FdN3$O3RZOm%+QKkj0e;t6S`2yHt|;o{_?bpPTLOG*lHT zW|y>imzq)R!rr7R(hH}0-Stl4k6uCyJvJ^aYILEmmJb%&v46n1*AowrbDN@fByHve z6VJ+gp?WJd>uBM_&(1zbPTJW{PWts}@FRswCrF<3!h$*BIWXk#Ei8-YvZi#wSis8c zG^{{qI*z0)zUyGWGwG3GTa`tQ?oMN6q2gbiZQemM%BjH*Cw8NF;>2J&Ymbe~3L9PM zI!+CF>~maXR%U?to#+liTCGX-t8rQul8a~?jc4yrcVFMM2~y_bQzb1$c0|mR5N#O-nb(Nuy(AQ*~z-J;iW_MNsYX~4~|@O z&5`{FuDa>~_(9`UuWw6k+y&)R<@`nZTk!qola==Am?$U`jQ)7i@GiANtfXwDN~fzD zDJvgEpGPq#s3Kkl_s(5adfVWtGrPj!U1wGe-d2ijecsW%Jrdd0<#cv!i$u0}JFw#) zJ@?mhQ{K|H z?#}-KuLdXTEyl?DNY9l6F4w>n-I4XpMoaxf@Xa@|4%d=(dyiHRKX#~9W=C-Gc3In@ z$A+tq>|59ABIQ!%{3qBt$OEa^r%5HqJ|4F2TBC~2aUJZhv+-zrE+?q4RJct%#0PTS zrlr&B7x?TPiM_&tZB2{`W$^!DO#0hj7p0C#tD(k(cXSP;(-^-eWeZ15dNA-cE_h2e zHRFsh|{Cy(Fw4jb4RI`+{ffp3gZbt*M3)AOuM3=!Y?DoTj z8fchYw=rqfxqfmXgQc{5OzC;gh6YOr5!JHod9~yE0zE#U%BW`G3JNEYuhv zie!+eE8*!tQ6!?#aq^T|^4Noo-80}kwXk$fl zKn#B13fly|OGmKYpO?xWW~vmWpMsXPw~afd$HitYrj^+I+Nwt4y}94mfl7ZXPJ&=yluR4U5Ar~5r=tvV5Dlle2`x~P!6`F+T~PM99*O@ z{g}(ZWs>T!FLFdYzQt4PXpH5;d6wTi(O7NqQNo^I*j~`S9twz@)O5O`fjV2^*oook z$NhL9JqfOH*MK|ERnw5*ki(bFphM?gLEH@Wv!_T*-ZaixV~njs~GFWRmE4M*g@Li{#-uAiP!af z^C8KX(0t0;2aZa!}}=h##`)Jsq^urUX@jE zK9jy)xvbC@(VBS-7Gv;WcqAYLK;i2wu}1XZ9kWXyG0T(&+Skd-`K6}b>jKqH#iATJ zQ^agFSGJkV&1D85pCxA_{>qyF9D9vkPUaL*m3w4`_QF~(B&LMeYgCFA@hQl2nUe~W zB2~+44a)^e(5fK*ED(X}C$IuCV3L!&)$TAguBe)OO@?}^*`VC|F};+^6JJp3pPu#g zV!Cib;TuSScn?bQawH2Td?Kkpi;@jR^Z%gT2JdPXX?JL&J_MSb;t$nOrx2k%rzDNTsm57Y&rbWnl&$7)ncq2D>b*9b{FWtPD?|H))raj_b+R-X-gW-V3*E@ zS7gz}EtA`;M;_eW(6IZ#k?QS}En<4sHjRb2$Z)q$2W!SFHJZxtn&5Q1n*o>>&9*2u z@BHWZB^r;+!AlKyK>83vl66DKxg<h7cCUM|3Lm@nxx zv`hw9<}BBv=D2wpyIiSf@-%e(OD-$C{@TdRpFhxFvhMyhk!Pm7n=8yR_qb#9bf|W$ zT11n?dJfzr;45L$lkvt=4Y)-1`ElRDc=nJ+`iX zij;!6CzL^@GN{5@qjeGhu1`wuK-g6a*GD37(4?`dyDUEQtt_MH4a~{Z>7Rc^k%tN8 zUb(_2pZi20qbp@{g6hpdhi}p^qxpH!9%m_@A#B+v#PN63`rK>tR7|FVcOu)UdKVld zc7lW0Zk3q$l`f=Khjc*4&yUq|&}yk#j`%f6OZgKf%!u0PvoZI2QW~=qd|~w}t?VQl zLY|Tf_&4&&pzdk$d=+gQoG+z^FH~W43HQDYBi1L*m#I)V zDNN60pl}lWMC2ut_Oi>aF>{R}*XZ7e%23f=Sh~E~rU{!=0y@XJ#FSoaf@-DiBx|K? zX}$n&qB{TEE2V@MvQTR0@x{xePVcDaYoYnCgVz6{UFkJaScU?=D@)+~ZZhgml^w$4 zg|A0UjKv<0g_IPms|4qa;vq;l1 z`soKpo|rv#<3FDm9ev`TH=de(Vq`YB`u4H0+tvhwYi=7GyM1+#_(EzeQ7gR`iNxYn zs!Oa=?A;W+(hKX>y+M3_$F>VcBax#Qwr#&~BoaAtVY|wMe#4_u`_N|}ydU-RpV3O< z@shMaNdl7@PlU-6(JSzwv&zC3yE_7%8|$^&hArJC%}!xg$L%{0zk4DQx&HmD-~M2@ z$rjXeos)NgH$|pmmBwolIs5i?cI@dX;A;z{-txP!NX)Hp%Z*F-<#P-D7j+nqDcOvNJ_>a)}N+-){@TV*sG7|HpQ?ip}L7bIUCEC|1BujScO^+@z8Ie_6g`HRUY~KvG>>l;ti1q z?6%4{CJFeQFC}(}+2H4t4-DGl7Fcl4uuI>kVrFOPt~lPqcgOqF z*a4eQMe0e4_H%TaNMtsifO7Z5z%J{zh5El<3Eqk2C0yNJ=B9cfgy%oYWYXV;^oyu$ zbO7Iw%(T3TXw%b0YUg-b{34!32Y)5#Y1L&k7O4(=b!l`#Lc%OAx+gQ2fgNs0p>`Gd z^1hs297hyWHAts2E6BW#B@6b^u$ZGh`Au9TjUwi^Pfw@7UV|2|W1$~^*Rl8;&Rdvb z0av6Dq;CE*DW%YZJU)Enk0&1aOD`>4C-v^r;F(lqnaLVgR1Mgdq8rh@3(tps8GY%p ziw2C>T&Xgfky15xe39h~Qxq&&Zf@G)ZdhFBT4WEB zYJF8Crf_M7IHNi4pJl)U)seWj3)~_!65$}tn54iE@Rdyig`8-Kpy*Xqu-lJ~#7hL1 z*y{R+`s-{gL&el}<3GRYrRBOrrRq^#yL0-nz_Wa{k*~3;WZHt7k#L!tVCw<}66`?S zFQS!etfAg=b8CIMUFKf8yAgbz$c|*P!hUK^`B2CHivAR|cM$GVG-RSRe5XsKY;ju| zJQ=V%2X&}zajIyzG2IpC-Vv#qsx>4QCIap}E-6T`ZSue~(&~n+y4LIFpm5uT)mt+e8F9zygV_$YnKBSR5AO6r+)TKBGP( ztylYE0oO(Inek{obCDQ7qY1b479;;d`U#RQido{5*(9tiz!s}`WX|%Fg)IDlCKjW) zF&Q}vyMl`1B;_SjC|Wz&ylkAr+9L5|HbCKna_6ehn+dO25PVmCE_vl>9v)bs3ikMa z7NIU#lH<^~!1u_~S5Cr9w(Q20HAW8ot#6K?dz5myLhHNSVSoSPH%nYl*3?%-+k)tw zf%KyIGKD)sJyEf^ZxE1p&~vCL4L(92bsy|=%$E8k@TCH{jD($mZ;diM(?z@Yn<2jk zyYd`)KSv>h|A53IOsfQQ{7)99XH(Q0G{WatWgG|D;@k z%eWqsa|`Tl1?lb*6jDKlM5@6{R0;r|N&37ds502OTy&t=pU62+(LSN#|LN(Cm!CK( z&O!Sm8V&q5N~m;4wl;3lU-@lR#UmhSKeOQ(2}xfZLhX)uJ*bijZ6@W1!EPC3N|^A! zrPzt*)yAA4u{D@wR=og@eE|*wwxY4X9#Ifq5?fT_M;{ev;b_?Wmk8JeenlfsABWl< zKz$;`@Q*1vu2zU$gJ6%82t~;^xU{6M9&rSupai&)iqruMqxg;+A==9rg-(s zWvbrkE#-|{m)KDvIJmoLpw4<|+ewqN)~jWCZSC#7&5@q!-A}Jm z7(`h&9FeJIq9w@k8(Z#eDiRwTR@VkLkA!HHE(nDHegW<&H$#rb;e&()?VGuGD_|o_ltfD+-|lxr9n* zKEH8ID|Q$04NF~Yst!J3svYq+Z_`QF^j5Cxbb*XD*bOoJ34esfBK`pP%onEeVd*nyiiEC6&DvK43AjCfhra4K(x0 z(U#`2wM@21F1B@SZEo4xVUroSRLqAahx?HW-#MyYO-lxqGO5@P+76n$>FDcQi4EZD zt*;+#`rOpGs^*S6YF0IxFtGOQ;bt1va`^0;2t2B}t@b5bDNJ6PiQHpt@(%Oh4##_2 z#CB9rvoc~bMON0_@%iU>pz*1>Hf=fw$BLj)=Q9owb9fj{f~Etn90KPOxkzl%x0Vr) zWTRd`E67OoeRHd@8}J&$_K4+?FJ=AriNC#OKR?{D-U%l z^OYjFXT3xxxB;$(>8 ziqpuUkv-aCzFjf^iQ<9Dwc0e!&&)>lpL0!`z^9)YJ)(~VF5TP2Pc;U)jV~5~5dn{A zp<%>$K4_GSi17k`j-HGo2jN+w{2Lx+V`h4aLy%#3KB0gEgg9^R)N1LHPiN&Hy#6{E z@SavM3&0{)*F9GTTbRVm=@Murh9Z~%bSk9wsq@;qs`4nFKpfV+OeiD zOpPmR!jPvScZX|MlDz%O@%Hv;0t5WKCbFf|ZtvUzd9tIRpkphf*#z(Ib#P8ALPiiL z*IJ}Q31U%tr7+hO@#&xu5 zI6gw$E%qgV6{vnEBtlqn4Lb?nf-mJ7)utu;2L|>pF>4H2*^KNB;rhlSuWjE3=dTaX zWHEqDkY`@%2~9Pa%?(o_&r)-iASaubIaT-U#?5CBgu@5UZr=E8-BczI-h{gOS=v`L z9jT`v%m->kAwb>AOb~yNQ1T337Q-V#)QI7&2Fs04-?z7Ywfw2mtDA7~FTxjgq4jIj z6?`ct^Vi{*Hlb~i%K`!gFB3Zz=sR%CIOU7%JEoY!?x<-*`_Xi;#F;CUszuxGEvrNu zRlD75W9dv5K6*>4=09VcB=hA3sLIligpOfI&f<^5Z!T6ii!GBSY;OL6R!_>)7jts1<-u={il=gr9(P-K~|2Ozu;A2DB zqtTQ!S`8I0x!O|$t`u=p?y$+$9L)Dk-#R{i>k6N)w9Rg*^Qw8WM`c1LJzL?bFsMC7 zQ5Kykv^>tymlhcOE)ze`>&k~4d}5KO zs>7`-vznxAgIH5!(Ls4^E7s)c*)lUF3p+7DYlP>-i{)b^PzdnIj=lSL&LiB@nU@aM zW8m~-kKebAx-Hu>$o_br(IOZie>b)PZYm#`7O6k@61qAK^E>zN-GKqL$LO}*_vj<1 zWBC+&Nxe`U&2=}Xc6ZY8z#j%Xy83tSTy@)ot8ntx>7AcqtnQYYF5)$Cv3OudUCZ93 zZsHL#?uVhCwD@Q|AA}dHU5NYs7&gGCu&dDWu$ke(UV$y_0xh4GDpbseWu-rVpKB3M ztgw&Yz82F03zeY(e)|mpwr~Z+`*tuY)90FQnLw!;>GQ?Q|d0?RuQ1HfYh-ltPu3iR4?Zo?h9@ql+nv3EnN!Sty zQ?s1-@KfSL+<}KKy^4okBhPa+3=KZi6Qz7{<+Q6`7;l80r|4$yFW2WfCF zr&1ILk&!9KpF3H|;%RE4M(o9&-ii%Hlzv&A5v2c>9MhgrNk!%t8P~9&Nq1V(-!Exc zeBv%N@lrIgg7{~w!LO3)r>ji+eo@MpkunYZ-i)<)N-IMtMZ5izs zWNaoHi9`R7(d|fH0SViWe}HmHSM<0W9HJk+h{zlrlNQxe*`rH~9dmhb8Tdtcu%_8Q zwo6SV=stU~dx@c{NO5sVyLZU^C8U?sSD=0&pkm|MK$jNgb<+gI#Cyc#d6g;W4Yq=r zBV}L6GAWVzL&H?!xj*ZBT&^BHCKizS?oc?>KZawO$+4p0@aUMLc;q;B2KvXu>%Vw~ z4rLMZ_4kO^-&9*NkFj$Z-0af~tEyIIWZs+2$zcU$C$;7;qRipO>tz_ML|%b8QUQ^E-qw>f8DgIR@<=URP)%2%}aBI znYkh%Q)Tw)oi#S0z*gtJoy|W_TuH$SHjlUp`)e!|jB>G6B2+R-8~{;3uD@kl^Qy|4UcZ*ToWYiu)UIF* zN!i-8JXG1~QRgntsdNf$)Kc{(U+>FAc-Z3#B0+|q*2&zWkIXBIN z37q!PpNvoZWCRs!7}Rx5t;XV>a-DDbds9=lPy2M`J;lb>raJWl1E|=d-0v?(MHvHh zjzZ#Ey=6~T{kGnsqTX%wReQFqc1aW*dWyY5kI6TjO$_`U8YxYeo+d>+{22zk2mH(D zi16Q1o3h_z%b7V6_8VDd8l7-j#Pwf4bt1mEODbR<5sE#`KmR(Zi7ajC%Ru<50A>`A=oEb;f3H&u#6!W)_H6=#9s zE%-LE@RK-$u_NkpF_F8(0jWM0@W+xYes&f=s|5VwI*BUFKzwGPYs5DI#jCWZ9~1`i z^Mk?%h~G-`)~(~p$O0E^{t_JbUN|nDw488qP%$)Ik>kari#c7uuMA8PvlA5M{pRgF zKqCh7K5=I2WmkhqtcvzD2;>K(7eL_+CvLp)mUVnF_R)>x+c1Ei#L(Eea0jdzNgW@B zJmF>i4&X|SNyx|&n^bFBrB)Tso`|EcUBYiJM%mAUD0?8W2V9`GFC_zw@XADs;NrmpKB zI%fB=EMk#CZxGq*+;Ww-u|VY#R`B?AHF3_S4@@3u?>M^5Uux|Z2Pfgb#dbeG$u)q~DR5F98m$VH;S3Dp!?%Frw49@zE??egVJSO zpJx#fH=E61QfT23yRnb5M8rKJhty*Q1EQ>?a}X}51rbrDAlTo=MM^gD3><%4BIbY= z3`Zk#c;I@GHIKLh`-sUWmP?!hFo4!q56AmOd^|)y3FU~CSO$r1i2VZ6Ogzh0iN;Rj z7-->$DN0B4tYTsnj{^_fP1 zbjMzu92%OM8XB5}x9rGNFgSIjwe{#E`FV0?W^!s~299rnci}LkmycqV;QweRf|#Ay zE3xGZ1bUZTVpj14`8J?tGf_3G%3~3mTQ)Q_Y-lk{tUfi;aC7pG2)S7}El*>UTA(_V z#naHV*%Gr_V$#T2xeBdOqBcviv3^OhFyC9C=j0Xm8yxPg^8EbrF1NkLYvyr{u7E*Y zpi&F6MI514Az_MqHl`?Bs3vVIbhbBy!c$>KO~?S`FvQB=0%= z17+FjAD;Um)=K|y?inm{E5d$+=k{Kd&la(lzzr33XYHM&x3%DGEv>Mn9z0Dng=dhF zJrjmsH#eXZ{R}C7lGY2yLEVIKT}(3}L9bGBGL!XeH?8;gkL;mk(cpjkANu1R5-q)- zo=vCcX0D`bB|fP#YnsKRXVLp<`C^i{AIMekc#2%27yC%eCms|yWiohQdbl!49`T^Q zSX#gbJv=E@OO7AKWc0_NTy&Ej-6#%?FfDMA0z^Z?+Gqa7=2bJLGMPn~ua;}&asf}8 zr7qlBQ`q8Dwo0T~IRd@OCXaN>!<+kQ?_o?XpDE(gTchL;y_+MosIgq0kXi7*7E>;V z#n1IyEk=z-Z>S#fn`MPoCX2}_RT%`CR;R<-QL89*>*D*Xhi9IJA}0J;a!fi_M$%$T zZ=ecsb3qpIyewE6l$VS*+6*;gWuCqY9aju=SpkR4pptQfOxjYmO2V~TFRBduOnu#S zt!KF2stpYU%rdW&#mVJH^#Sl6oZp*Tvl4@n5G{fv5pS#j?#kgZnRybmSef4x3>IjW z8mU$);)t?~WPZO}U}`QiI&@Zzs-)dr(XXK!x!Kvd**t-Dtw<~_4h>Qv@R8x6#f4^Bs{gqH?P;j{l1Ets0 zV}HP$aGj<^pYX-<5E3P_AFFEIwraaXQrr>HI2C+4KQ||rrBRlNP5eh!shRW{dA{1) zXd`|F`4?XACP6MuZvrLNJPvU+##53q_Bi+gp1C9Pj% zla8W72knm7?=@6cBd~*vQv3m|i+(lv3dRk96sHd+iEh{#(5lJL;}9p{F3~4F#S^n(s0>&C|o6jd-FeUxPjw6$-GKnoEvfgL&YdSrRd?gsGpnh_R~? z1egb~)GGIw-9F}4saZfMuhf|AYG1S6-t1G`O`1x%5dR5FoR_1J$rL$xVpb@Z=UCyh zRJ-JISGC2r!oka>eCYMqmsmSve})`ID)@<5P|8&knoROV$qsw^L_EbsP8tj@}s{IVWTxZqKmi_hX~Z4#Y3%XC@UZl^+s)@+7+7GmtpV3C;_ z(HwCSE`uKvjlv`x?3gg5rU%8gVy;{-%r7qZCoT}=nw^CLjU(J1cAzU#K3;2Rh!_f| zmx+A-5)qACUZQduR4iUysJI?{BILk#n8%juUE!e$&(dm>zH*=>vQ8&1E2`{cC+OWi_ z@RY6$<4)$4xzbrxTI!9y%F4cD=^kA3pqM#JiMA5k${8q zL$3M;j69b=!Z+-35_t--VHD{G-3<-}=59h-qNkKmZ8<*4(Mi3$et! z99P9&o;vq9n@1c+u~TU5L_jIjS)h+|(j=uEW}P);>i1$p0}pU*H8yYX@m$iVT|`T1{- zk>`YPA9j-XSIA>dO^h6!$!}>~QHg^vAn_qg3art;C--*vR_^4{83py@rKP=WwUs1R))opM>tyRp#1IFPn(SLTkpMtx zt(@2d{+ios?fx}g?Ie+JT>OGYPExHzhS(goz>twxK2jW~03numuzc^b z(b1yrp2~HF`1OYm&XV8$%WHc2_`#c8>;zmvu>m{9u@u-iH=xX;-kY8k5kCh3HvAhd zVFrI=chukfoB;GEunSJJ+v_QLD4hQX?GU7|FI87j(Zm#wIg6J{;AT$$YFhY~M z9EZCdgTvaJNO#kCYg^k5T4k|4PjLj}7DP&M@A8``Jj(`KRnbb@#*%`NnXmQLw{;qf zYWRclqae@TUV*1q-73v$sZ_zwwrV&E*I-*IM<77;w^8hnXwj|Os*y^RLZ(H-RTPf2 zm$D@CSotl~Fa*RY{6m@`gOi~nJ76WFONnr_?nE3Lk1uFp1JbA^8`qu4qAX0C)b8r6 zzPxjA%xQJYgF`jpiAvQnvb&YaFL(Nfw(j0K^@|H#Hm>d1Q1kX4heEbgBx6MNBWMra2H#uCSLD$_yVWgpd$8Ni zy?^f9`{)(@@sBayGtZE@$8f*SkU1A*Zy(Z5jhXXk2gomJi`es2pMOXKby_Vs$Cs11^brw1%q3j-LdBGl^*|!Q$remf%Nv{u3_^>C3f8Rg1RJP zZ(C)|b62(%>dKsQS{GlM$D|oMA|bxm;cu9@qPOja4K?0@O`(bnBTW)szR|9TJUz}} zxNZHUuVelq?F<=P)lyM5lBLr-w8x5H1H{S|qodPc%aK@I@W_!*!O2gKfVZsETehsU zSYqKp%j4h*Vmtbv-gOteLvNEgMvjdCkF)mxY~slN$343%$?CoLZp)S|TbAVBd#||R z0tVB2@4YwELP-M>2nhs23Z#U8lC0f% zGdr)&d!ILiSrLqnbWj@_20FtI)Q}NM0Ux+u=POIFSLS+R$u``+lh?N4cuU`1)6>?j zy$bG&)p0SNOv8I1R>bGx+rh%5@)WJMU`E4=N9U&nC-%3uP$bkGtWy}Jv8m&FdXnLD z<&g96PR1jYCZp8WjkWPev4+jxQJL1zhO1iEPSwH-%tN*CHi^(Q9nq9NN6QM8E5njoRO8Un z9S4zp2K~meh+i%pq2r>O+K#|w{ih_(B+^JZ0+mT3vx&v(OmA{ymRavBjtf*7`CQ|) zX+|!QE0gn$K8GvaEZ_+zLkU&Umz6uA#O^d%^vHccb_njlFv@2Q#tip`2u6uyL3>qc|fPf!SIi}QMkYR#khcDItMrvmNhP0j%rzN+=pHQUZ##?8YxTqJM zQpuMECnR=SIcxzT;#+c3be7Dx>}>Eie}DJw_geG2v)qlj4wcdpRA#4%^lY5TjI(62 z&Fa)Np+1)Ob$5anp`9NX_5q{p>5)~7w68mSKIx1zwHKt+r5VgFYmy_o#wqiqWoUeC z=!L6HDy!a=$t z@{UXvu@KCqVz&oC74twiUu;yRn-r=Ef0(|O>N* zK!oiay>Qgrs5N6&{MR*OR)nsNUb9l{ZP3i@r%otuXaJmzj(fzQSsI_8q;~803^`;w zu2it-G@;mOE=)CZc_mN;s5Lt5_t3_O%>eepXE1cm0``-S948E0FfqB9j=A8qkl%b^ zev3o~ZxMKj0E0yWFq&*nQkGZ;-T59>YGZ~mNiSo_cx;})sLu&|_f#Ne0rKv>&Z#}* z=iY`a3zt_VBy~=NTvAVS1PVx8s>{Xh$@^`raNyIQmA}SX}ncL z0SrEjeT8{P#hR?)*wRfQ&%Q&kCd7&;xTNxGtdWpbB!Kg} z(}wfH*n5x@+MX@4bskriq#KQUW z+onzXo4s^GZr;RF2Xv$JawnA9sr$!aSMVI>a;nd5d_4os-P!^H2N{VjHlEXrK!-rPPOXOn}d3tNXFN2 zd1@9Z?xF^Wj(=F;^&IaG55bLl!5HG?^Ku_EoEdLIIacm<}O<#-jw9 z)TjVTSEdaBvA9IKK)ZYCKcUd3Y#RsMlXKwSrm=FuqvRr$G7>8XDHlq??AU42LvH#i z2zi!`0-KPh-R{#n9}E&RRYt2=nDH^qMCA#p`7gm=^xjCscVm;GzCv-GaJ(xFj02|^ z1taT(775ks+u@{*7HAVpD2>bVD_l~KLH&x>lbMv1>CwKbGPq?fg+Dv4v=`rP&1&#w zb!%{U&iXQml}lbfrcs9FDi-6y1K47!*3LU@`?LN4{AGv+@S?%a;j4EE zEb(5g-ES2kTVIAVFkGuE#27e9aw7B)YD^}L<>z>_Z34N?t23u3s0Btb};;B!e^`I-`iPGLl}R#LQe|L4O0i2?Hvy!1yLWbW z?dtJ*dvGo(1mLW=8@w5^mIi^w4`oDG}MPjnEFTQ?k+&l?M?Vf&iq-xG3?7 zAOOWyliI2Kgsm656P1CM+>6I~d;ue!9e03G800GZ?0?C0vC3MnCEKIL#P`Q?7b6_3 z$MI*dBxw60yB=kxP|1x_@K=>hj4#@6aJTmG|lx#xTQIA6FV<*BK=e z-J)2N`YdQzgPT@cQN8L%JVvF_YR*>(O zVH=bZ@;~NGeOf+<6|3NVjuQvL7-lo&llsKg45_<>oCIEA%_ocSrbV`>}I)4vKF`?aEtpsn`Nk z3O-wA(dhNjO(zaxA54jA%MorNfn}gIO~k&&#zHyA4`)?G;qBkh8emA{51okxK{kgi z;=(_%%$WiSmmzUxxm;OJXf#R%>KAv4b<7F|n;qQKIL1yJil<>DnD#+72 z3|f&nBT<8jD@7WkQz+^YzC4ToRJyxHvAt@XJs75IT{-^d;pDy&0qlz z6|-5KilOca>VmSGeQT#!%v09xt0^m}_D$@9ZU%V;y0Be+Db2pm z^+|Khs*8g$C&`sy?MV=GaaE0(UJC-*zY1zCh72taKzYU}IruE_R`+GAah^(1jpdY+ zpOC-d{lq(DlQw-!24ANX1{|SB7$-hNJ)$7pC6I1ubjEfhsf#tLcmS@~%gvj+Q&PG& zH;>tb{@;``|Ecw*ohN_l@BiuK*s}Fc&nK^7d~e6vhK98WiJJcZ6ItJF7pEE_}KkASg8>xyFK$PWzC^)|Y7p*8;&D9N9K3h7&*vfe!2mjQ6C>FI@P^#Q0Q2OXdDMPj;OJ zyz^c9yuR}L)Mh?MY^p0svef&@<#VtVa$9H(-ua`+C01)v12SM(>nTlAjem;#_4JrW zo_M-PX-kkfmfrdFWXzal`1(9pkmo12P&8JM_YlXJ97^(ppQ@6seR9%Gi=F5hO9D2^ zWQ{y&T-tMVeqQD32f8OL$(MQD&$1;VPOPOgcg^?brc8bYuyL1YIgS693$kZ zuEAf49L5E>3;#^Vyas>87ZDP45@nC>GD9P&g_SW2N^SahgF3BUWUZ+#)h&H#TV>(a z_xG67gXtzABhe@{IenI;TczL!QYzlF)SKnh3Y`w7Q6T0LrJGTkv>kN>Tfpv%QxQyJ z?fjE#w=h@?gOj!gARUuwI;0~r@1oMopf@v=gXeHon$ptJ&AUI?T8QB8bfwj`76H>9 zC)7H#l9ufekuvbTbjvbJiqj-AxEc7*aA=}#$MbVmzP!1V;EDz9P6Hf&%i5Fk*Ft(! zag@xl3|?li8IQpA`Gle?Yw%}c1|g$*-Gq-U;I2cR;+;8IxI79`2R}g&U`hc7DJ5nE zi?XLw#S>{+hD;U7y)(Pq$T0fNne@ku^ekhh3jF(yoHF=vzCt z)#@WZ9G{dSM;``z4*q42yGD)aRv(2QrpqaNK|Xky`8!TRxmX@E0`uN!9xjeTnD>A> zX^%R@7|tNHQjeL45j!$m=Hhf4SEA$&yv|ifxVH3Svn#_PzKUIQI`(QT8Pg7SWpr0( zDwJ7OU1{A1r)5~QpYT)`1$ZuVLRp-?X46zhLtTZ@SXtZPn7XM(A6GUZ^NlyKocX52 zs>78FU+J&cxN~i`T(_pa|CNQ6w^vRU7&YkpY&toM@DkD(35E1Gvex~EB$0?+5G8pn z^a&E^b^A)xSlsH!*E5*`s z-D3h%&nznfDVaWJ!-_F2OKYswqKWxaPAx7d-SF(rg$2L1e0tjAr`DHk$rCW# z22)RZO?RsJZ>8PoDx9m7m0+1gA6~_<^{=ci5KAGq3X)n@)w-1_RRNw>A@JEkx6^iO zAzX(Hs#e`HvQk|+T8CM&yw%H=tzNrg1*2_eZvd4>qn;Ci2|HV_o;`g66-Xa{@L@^o zhBH%8j|l`0Ipys7Rtfninp-S+mS98sm`~gB!}@M=G*9HEC z6J8fdWAiSBG`<(cqNRHY1;hR>I$jPZ%?}%YxQ}@6GaQNqa!~5FSQ2IAAQ8*NKmV6l zEfaIk@#GwiQt%K*B2!as7_eG(dRCT}yjN?2{`FXGR#v)tU_7H9XNv{ji46jQLH0Gm zilSqs1CW+Zf{%2U^hVtkUaM%;B?Oe}`Us@@Cb;9e0?ild<5LvnxvSQ1tM30~Z-qXi zExTW1;{3_Nwvq~=&EXVF ztwuFhnvhX5ZF@)W1ItQmDU`lyNKu$`$D(~^Cl3)W#s@KinA|9SbKI=`=y0k=4hYAe zQF0Wt|4|3hV0uTMW%iWPsotCeNYrVTE$9X1J+aS+QH}9kcc2O?sa+TDM43+xstVF$HBvw|sxRFN2PS?i;)YzQPvY z>j%%cpp zEJ+dih^;o*q?dpIy;Wjy@U2yLi6u$Y_-azM+SD4KCef2+6$q?Zp5LDdeGFRht-jg0 zY2CJgV?u*c$T%^u&^ISHt;dFUq4(G0Df*!w!O%dNO7-1}!WbHfFXX3Df$-SMi8&fg z&V76tJo%nEqsE3 z3`Zcg(Ka{*-7luGi_CJkTjBNOZ$JKsFDE`C=e`zNg{^rF>wG)x3z7$kSK)Q8(ed-B zhAfdB6v{C%gR_|{%cs7ux23lKwIzWm=|W7e69-*o3z|I1ZA;6`x}DHdSsvPhTXg!& zEuS6R|MT%yzTl`_EAaFlnm+GPhr_A}9bue!n~s%}Cu1Ll@Er;rN-5Nke^EDOJPMXt8~us7dUD$b z@x^iwr_GCB6AXvFm+un?A=KXtZ8?n{-%Rpw;IBZztM9>#^mwL^9ds!zN~z zNyOP6%oArL1Bp6>)u2lRmuzvN_dMBRNm({Im0HV_jPr0V&QWurH>LSTf*I$%_G6_E zpMv}oPiu6lkCImae{+1624u?uj&I0C>VmkeMn{CKI4Aflr5?0S@rKDK7N1 zBSj!C&m(6H`Sy&*APrW^7efo_MAia5KB|=lBS>I8_RmT?`7fEzad8G3e8xphycqgk z>5k9IgUW1sR+FU`d}BA@*9YiPfr0#nq0@(lP8NvD3#f6?UjG!18yBt#kIZ^_gO8p) zEBFWlH=&Np*He2Ai(Yeg78Dc7Kb*&h1`S9gi?ZfUaWV+ zd@DCcUCw$pw3qxXayev|>+!>v4)Ja*$}jNVz`G-0w8EAoD{^Z_O6H1T2A-Ubvj|)l z&BC^fgE5JL-BC2F zwOEt$#B6tGWzvd)s}hOPYO&6I35br~1B5TmU_cLVqRgQeLwBxt-7`y;UR+y@V|8B~ zoO*IzcIna+UAum0XW;w<^c)T3Nn$Tt1%#hL6~`uoLt%34Z*N1f^fg&UEFfMVVA8vQ zc>S}_X!!^ECJ|nzqcTLz^p5pMJkoCw4!tpc7!37CAB z<(JT}SoW*rRlMS z+>4H8FBJzZzQYoyoLYhIJZ&i#q>vvn#a!&3A(>3PMaTR>z($9*QaylHsNn1w zVEE*fSw4<4)X6wO`$rteU#l2T#c&WR1_-nDa1nxH zs4syt;*}2_eP>1&fH9UPcWr8E-QJhWW5yOQxM$LsRpZLdauc^cYuBN>s(1b8nFSmI zS$tCYE`ySn6ClJh9{PFr=C4n5vLr?&-rKNkVw%5q`iRo6a`^IXh0BZCe~f#wHXhQ3k1H>j_J#b$_lDAe!nj%-mGTg2i`{Z zEwmIblk>=boEc};s88~o6)Vm|Sylfrt+U93j0tcIbTBwN$t;KB8u~Y5Le`>l3+WkZ z#c8hemQ4MyLc8{tIghR^r01i_>Mh4&hP4~5TeIO9!l8K#E7ojex<3@9SrNsf^lAQr znVEQ+IZr##&NzX^N`wQSnTl-oViRr_N@6j}y@0$_I(V5ejp8NmaNI699Jt1q#El?+ zQ0P}CcWp+TlgAriW$!$6clB*>PtNFhWH9C^%^e06eo_4Mn=Pw)D2~F)8@ElMSOwcu z+#XQ$zDWN4nZ4w|^Rpp0+~M>Yc>nl@;vcv^=E2{HhA>Y=7{Yc77^tBxIoQ61_fPkY zJNnM-UF2Z*6oE2UpjL^zMI9McbE_Pd%Ec`&h!mhYbQJ%yK!b0LEtg+r;zd`_BnEAr7HSI}Lo+E!delPjk^HZlj54Yda z-aDqJr%%75_qDEllLCQB`?|3CzRnHzJ~wqlFO^qj(R+u`Q~uxx8$k}vzKu*p5qG8FxbAUQNyhe65B9${D;^;8s{6 zDU(1w`Fzyqt6s%=;P5~3)qL=&J#^$%>I@j_@f7O$X@{`}DR4t`n9Wch6Z>lwGs|qY zvY8d&12SRv`&$c2w!gRIwbwA2vur|kMo*E0`21RX(bD@TPC2u(n1a+o_a6Kw(@NzQ zWDcM5(BhOatXPI|88WFjNB9gHMSQSMG_0kdJ3GBK%ZPo!9X#9eSyyA%Fd!?5A;nrvjUQL z{n^gOzOlg$t%J%75J8!98S+z6Omq(>nx&o5CFfBnYjoWMl#6tn4N=Q@p8@IfLHgSF zO-VNvOf2~mcxuJ=4J*p0RQu&J9j~DAyB!Oj-cUNWbKx|BG0E&mH44O#>Uj||{V5X; zPORw5(f*~ktFhN)H_2qH%j(i5Zfl%)+?V{yZOKJ$HB*yP<_VJyX%|BNdmYm5jj|vA z8{yFICSHeL`nSfsiN$Z;oW`E+)aEQx*vbUUt0(8(NYteJe2V<$=>_j19Xc};`nW~O{!pwi8HA@}0qpf-C_`of+w?DHy6Rp#np>;~`+&BhbbqjU=aA$So;X?TY z=_(7K$Bv+D=yx-#M0-Rx_)p@6 zu)LLzm~iIEHSrU>$?EW2w??l7S;aW<*}!c>lN_-O_|(s6Io1UAxsP`_QLM;+?IfpBA+R6v0_1W@b%qFH_5NtC|z4cTUe&CS=*C z7=(JO-ry^=caDE9F1OCa(O@ceeE)v;u+}FjSU!ir{ zq73RhR?Js7F?HGP@;Cwu-48!WHeo4s6aC9>S2zbAqifut(efWc4eb?kbbsSfA!8qP z3WzOeYLv$1xi6fbzHe-NYVWSGWap_<-+%DIxuybLYMhe%6nv1{Ixn|uNsAZzCpzhy zN$ou}#@6up7rGIZl7;LCaOu*etEWz37x2m}XUP_D|5@YUDc>q5Tukp})F)G}I z-y~RU730Zdo_k7u`iX_Rxayon4Y87$jI#oG!p6`=og%UFGt3U@u+w)ooGqNizBd4 zL-As11pmzdjDUH@X*}#GD3TqN=DO;CX^7909+VXoJaAc^mts#*A96qD=Q?YAsI^Tf>-^(e(IkoDfYl_BTn6^@U&5Xl%{q7vqeF?fGTu z1F~FK=hdrqE}sN{UT;Gq2!wD1nzY1tnlu7KB!qLTVu*$GxI?&|RB)IY2W~2~K6r#4 zC9&{qBiuXhPLsj=b|JwJz!38=y?aFdGVcaJ6?U@fm)YOdPbUK zdGWH!kJf;zFv{ua!F}D`efAJqWO@nEB8PLiV&S-^QM~{n@!;qI8L_9r%Q^NxL23)gc zU<1YW^s`|+9_C4N)b(b@<7D1d`f9|N1CI?~8|F)9b{Kp2e_~1+X7xYrsd*8;bk!ta zI6?EJ1@dKzPUkD5_!16_uf!B)>mPF_qKd|b#Zdka@fvl8UmwXbrt$P{?9W1_6yVk< z{ILvhv*>RSMSlz3p5&y&L@#JHGikttE{Usk2ymWME#&G2`Q!6V zaaFTQ85~Adfv0I->5)HbZ^@PfiKeKkuP6OzX)D(*R3is4LPKzMd4@+AI!7%O>Htate{afaLfOzy?s z!z)A6>4%M1UbsN#$&u%%9y~J2d$>uT;4N3l`EP1%v9E|!v23;YjaaMt#WHdVID|j0 zm6B|Cb7Eq%8(fuX=sg1+8$wO@yRZ*sh4^o{Ex>lX{r1(j-@ftQV`6j=uds z33Y!0?(2HG4{@}tjX?df>5&3d+h!mo>f;QD8?|Qc#|(b#b6k_^Gtfhx`58J|A8}<5 zDy;uUp8YPo{dE#BQEcFoA3;w`41N`g$pkc+`=a8+__3?1B<1n?bzQ!z z{`BJt57hz%>}7C>mmdX|s--RH&ZTvHARvE3JsV#P^FRIx-CG3mF&#^yW5fuYbj}7u zqze&w6`N^BNq(X-=AE_?&2(3vW&{V9}4yga5x1o_o9nKH<8}eYwp4ney@qKKVP` z22G-xr6(r;7y2prOJTyNM9@h*Sd`+9(lVpPGB!3MY5$Mb;k3pP+Z2cH%$>P^q*Q*) zR=;X&!>j^bM4!_-NFOH7eSa}_UshWzE?yga#7d{~w zemmn#M5!W@N2pZDt58NC3-=ZpivRjYN&x)WpW*g+dPo3Jt%`oL#9_j}nqqTCNPq}E zjBf}6`N#H%H!&*sJ5utB8Q;KV-p`69-&1%sUIqCUi~YAhX?)_}L^>W%E4nO6(fo;` z9?P<}Izk^NBw%hwyDjt*K`6{*ouSZTDbj<7Eb;-AL7F@GE7UuPSKN_!Z@7EQ$m+Bx zU`e3Y1{%_)E|Y{h;wM5bp7zA%nxfSg=8d~&Q2~W3wVb4__ZdN)6 z3c1S{&R@m>{AIJ}E$0uQyuGpwPt8R=O3F7p4PM*2YuDDb>o#v*2VRRbbw+K0P#zzA z2205Ma4*#h4B1J;$`|*NdC$P7`93m|pythhEZi2xnU5n6QvQx5?C-$8H$x;C_JN*> zil7RhpX&N7;uQV%?g+m$;vs<;26>RErR}g=#ZGUjIBQ3_#jZA;nG@Ec>c4_+^6XDK zHPWJI6xJ`17JYYA&~#XviokCpwJD+vN-DwwX){M`;UTboltmg%3tSw+^V5jYB8`Hvf=lJ-}atO!KzFTYU=x z#m>B>rb!XYD9@N|k=#g8ZkA7CTHY}q>7Kz~nRd9>0;6JxH>#kK51Yx31cV#5PDs0% zVoEO>e!`1}9w`-D{PqTI6&gG0$x`xr@CxG}kT%x{+Oom0S{X?b<4wlUL+nipE1T$z zHj<3V5e0PP;2#BCVwjys%ca0%i z_#zks*U^$+iR81R9&Z0iTcR-0X22#&yai43#zi1OeUQ7LNsrAS7iBrzHot* zbXHFs8=3InU`)y26?_)lk66ry)ckQMAAcsOGnAXk$D7$GKbuNs*Sn+6l>T~CgJq;N zyp`#K>S&;iR?K(^^;rStp=ON#rJH3Cy5PlRN2Fb&Hp95!396^%oOust)}x-5X4KQN zx5SxH(VLbTkL|N^W$W zUt`*1)e51>ky6l-jxxfMTb7irb?BM=gy|*FHvN-C$WbQb#F6iClU$I*c{Aom62M-X zF}Vp&K&&>X#VGx&@8rrx3AS5jozd2Z;A#;PC{Y#8>k$w2_Kcjx#(9s!>@3~G$h_K{C-r9# zm_QHA_)2mzIOsHzXOa^t%CQQe&Z!#6H|KbD&ph*t)37*g?&r4RhNdA*Rl4NPa)izb!TVxO+%RIGV&S#4Pte2d}U?;CLJ;X}e;EyDJPu@e#wq zZ5<9un#CiLPj7{F8WB-gZPlC#+n)U!HthTJrrd=3MOB(a2}r$CZ2DasA6G?QVRo}+ zBC*w#YDw{@kC`|oJ+WnVldHM9P!-_l6mm;^z-36#@-kZbS~BA5m)5uKb7TK@6pjtf zTu7R*hq7lL8e6`0YMoLTuM2%20B>s)p*I*O2L4aT6N-g)lhLX-`I`!JCRMr+Tv&%l zEQPv8t`V5+I#b%%Dg;TNl@!B5`z6*u?H3-^&qoi}V+_4#SXL$NC&6ta1d%sRU(jl& zTQ)FQW@;1RX8O0^?4)-P9nv=sHF2O{;XXMt;~T?i?R-8*FNl?K$OrX@4WBOLapi2j zp0oa}{#(o(tK)KYvAEp~gigbcJIK$Mlb2VLpYI^w0wVJ-afZ#a-m|7KYJju3&B>Eo&H~KBh$A)ZTMtN3==1I!kwr^J#@_oqKtwfgS$X%4kLppd}i^J zSmz6m{JpH2Tt`d^-9xW5qd}%26 zJCa2o7D!@WBndiPeyL=<^t0C^Cf7+*lA6gYufGoX%|Sibr4G8jBMVI?&`<8tCo8lX zOr=$X)?zDP!+JtTm=18=qz?TpUhx{wWuo;e9G7?&j*En%+%9LxDGe_~Lo@t#KZEM{ zMp+p+4+Xt|fGw2qJ|wS@A(ZfKR$U^ii220pgPV_UTCr&=SEG_Lr-uf>_O-{?u3S4+ zk;>}>3#oirJSK}g$KFNds1(MuBHl6p35$smc+BV+Zz$kG9g+rUMNV6J;X)tCRJ2DT z413Nj8oC*`;)(tM)1D>& zefQnuzn`1B7)u(vts9U9xuG?a?()^{dUesFcW!Uj+w=(0aQF2Exxu9Fo!z~g8f^B8 z*;S(Gg1rAEpDyG zEMZFY4!O*(6ECd{cv_2H!Hxwv`E#3+m2p9%t2W2(s_4z=HUwRos&rRFk&kZNXZfN|jPQuyiw+^>t}T( zw3@3L+dYjZS}N8|u8@E>@=7xHU<^U^<6ci;x(H$vsQWc4xXJ=fvs^ktTq|TqLqb1w zSZ@1=WjC$>0FdjtX0Ftchrv`{VnJJa7xw)s`046>^2QbSPwgVN!CzqPoHHwGCA;wX z0=v{2Gz9_SENvAIFyl#{noi}a+<4VPAT^E%xgO&HVI{f zDc8KcyL$Y2fF0!lo4!M`{k@tRafU@3%q{m!;L5pmE3y`8^u(Lo`gP}~b{|>MrUsWo z7wRhk*sFAYXIT5h_nYnnvCq$AFIPD(3dWbAJO`0cD`Q;01}u8Oq_P~SK5tM~Y!Az3 z8eU_3V^@Ep*Y0w^m@5WW%ru!@h8A!3*k4ar#ZE8(w zPDfFS45jN-{blvshZg5LEqg8B=yOe=+DxiZL~_aG%4v1!8i|Qh>zcl7WAWlA*A$j# zp0WV5rN~6iB($4M4FPjTg4zfzCHbndy4)$-t19Ov+E=7Yjl#y2OQnf{B3ENYd`i4j zuqL4-MVm48wy|C7lM_~yi;coQv~OzRzEM#7CS!Qt4BPiN+cRN%9!H>8O6t5P1kn+mqrR$8oy}4SBo0rSJ>WK_78Dnxnj95Vi)%KzukX5L-$ceLq3YTyksQkv z@C714u12raCe`HlI|`iwjZHq5BakR1R*Om}6-o`>a(_ZYt~1dFif__wk$u|87v{`8zoz)8XUy{I z>SZmSBiOd?2Ub;9u6m$5v;f;yzPQ=rXZODLd+HjaC5`i|$mHto-56&-}JERUnxOIrd=qXVi5=eNCBykoO2a8)FaP z#O-wM{9EYy@OQ$UosWdP_-y!b=q_{*G&a2d5H<}{FwlPlyYDXI_5qxxjT(Ol-v-Ya z=*Qk+-g|xGU3iGLmG+TyS;&W~AIhB%S7${BglN2la7zh1l7u&u5E_07RSD}KS$ltf zCVq8)f3R|_PXbD0N-nNzJh05Ye%ngt%sYDBrpk^Pg_|GoSbJtI$y)Nrf^;Bo6nAH2 zPb_l+fi|Nfzw1B}yR28eX72po4FPu8NGqY3(`Yb+ht2GPUK~ z-dKz8ADGs(syQK{c~uj7U9++^X~Pcu!x*ZEFmZ_S5anZ0buN-5jK<~*uCNUx4BeZjc2H?hTd7|*dZ#WLoeFsf}8Y3PpreACE4?S=@cwq#(!X<3k#}br~j(B&j9~Y^k3e;KYTCb5LLE%Y>bdYe=JW7zE6l zDXAQ0q}z^+R%-9Ydy}W!GiU12>A^tjoP~2*14t>=W~ik`?yyn{w#{2KuPxZo8lRh> zWOLb4IX=ZZudHx&Z&qO3#@g=9y(MX>*>&mNox`dqZ{E@IO^e&|0;zdTS;h4Vd$Lxd zSIXEjEe~N&d<qmewDMjqEOHI09zAU^#LK5`ic`IC)FCcuPKku&uj9@HR_X+ zgkqnRvSV8Ye_`}7u0i{+e7HtBjMoODj*ciE8Bv^%$_SBA3MWKjUq?`l&OV#cy$S1+ zDY&@0XmOXdrL9iaxS~CcpML4C{_l^sk3IQQ{~cHEYZZGMH$1b()HJrkky;cd0`Dg@ zEUl|uF~)uSzUB>MlNkpM$udGlFjp-fTR*0D=SvF~zp=jw8fe5l6P`V_Yf1+E zSuErkY7apFhp1&7r)o~9Ku|PaX95&uC2GlOIV>+6QTJ7%1yGEX7ZH5voM;qwrZ{2oho^J} zg@yW(7Ow=9q6IQG^v}^`WoN3#F0V3aGYhKS8a6q~HO(O2P7yzvz3NAt2erNWC|Ozuo| zW0%qTl#wU#UkDN1%h@^UqR!;$ z=pxHXyMuJJWz^XeVgm4cZg-rux4@oi77ERNEKi(jOHA@j+&@0KJUzkTP)IBWIq@PV zsiH4Gy|%bCDIwb_73Li5Y+Tu#kl3=mt>b6`i^UP^wb*%=+vOH%3__t%Edo`+`RSz( zPUt4TT?8H5DI z4sRuIZV)%p3(vEwQ|F zTxWS=u|H72k&Cf4riz5Pwn}ee_2lfl&f;XJ#o@L1@-+sHbq4Bu?rvOIo;fDhEQR28!lAvhwPzFN~8-oBK5!PgWPo4>zDUot8X=;0kx5tq?q1?mvpIXsz zY-w5f#wX{jeP(G!!px_4yL$r`w}uDKCbujqE}m8EO01fgM&8SC@gxeir^KsfxhLPh zynbB8x<{u>eQJ9{`+Yy`c?cwZzLLe@$wlGXgmd^aL$bp*&{KUq|z79=seYWjsbzuu=~JphC6L z)!}rx*f3z2SSF!_f?14$I1;~Ts8t5>Xy!c&cD%YWqrCt9ZL8lM)BNu0Z6EZPXRLf} z$NYOU(*!E9$l}gP*mT>S_tmZo0AXNl?R|IMwka{&Z4rr80){WWeD2HS)!WXH|9D|? zYkhs|0xjbDR8J zY;I^5*WWz1lwL13kE$ih{$J@uB^2S+Ll-a{qsac);$d%&BHNx+9Eg`}rO1}n_(MNZ z6*`wm;r~i}K`KT3*U42Hs?c~JHZ3v%N@mHS{jG$1f9z0}2aUTPm2`aT`~zlG8}6{Z z7lp@W#gnnD5|tw%;Jp0hsoQhQ)o^%mIl&|>MyXE9 z;g~Y&ynMBsA4B2!Rgvd76XBdKFOD<9Q|^eracgB z)$I8Cp4PTwU+>Vg1_SMyZC@U3`J1S5^#hY9Kd`DnWOg{s!iLqSCr>%OszGRWI>7t= z*PmM{b)_V`BrBe~zGwHqb1NjS6rW4B{JCq8{xMJ<%UH`}q%jFGb7QEU0CY=5^e6}) zNJWJ)LAq%P^<>f0aVq~%WmE|n-YJua{DnM%W>Y|mv zjENIxL@NLgQ%#;^0J?sSfu{TiXV-`)peCnIwZ^Mc#79W-vGEiTCpx8Os}(|{Bc-4< z9l>@ME;!nqUYKA~R5^`@nHZS<0^r~5Od3IwaQK{1$U@iu$4rEDyaN3N8rdw20Otq? zc99%G1@LrZ9F#yi;&mkLGlzZ55WRL^XUd zrrMh8)$@gXjhevP?y8&j(y9GL0&&Le9qqSgiUk>44jgL)k0ffzv&&yBv$Rf_l>rXI zcaP6|tJc~vZ^xMI);zaFW~K9T{>7*v_*6Y4as?8#LVfMH9ms2JId}eIly#))7 zjU(#`jO^^WYff%;HkF^DTsZTg%(fgOQ=pbWYjyA%v|D#l{riyKjE-WC(3?K&ksO|e z&((0Vu_vB0IN9qf{$8>^HqP)I_{&!qXNRHDo7`yF9{RUI2|VPTpqG44W{%`+FNJz* z5;cb955|y&QfTI}`gUIA2@E7k#Wgd z4j}8mLx8JIc9M|DlGK(0HxHaAD|zmM7Jp=oSTc&%tUsXD8bvHpmDGaKG~>UIqWO7! zeC$}7W;Uc5Sp6=OpgT4W63tI@klTOx1rv}5A>lhx>+}DZaE>-Pjw0NeDkE#*0*?U? z3=t1vWaMN#iJ_omYxopyC>K1s8~cqgq*1}E8@i!WdNk-9*;xd#32N}p!s0SJvP~#) zud6e4LVt&=Qe}4Jq{-8=GS%fh2$K_GmS&cE$9YPZwx^o&$K@FcwFw1o<%F5@=Z~Az z-WI4xwIkt~ma?hi-5pw+pgL9%D-agSavhpDnM7me6EQ-6QLT&0{Ijm9ESlHsjnx<& z7N}!seJSIoI62nh2?f5ETpLU2NYNFSM@P* zJb&erOXfXToX?fZq_&h|AF2kk7IbA=JVptt3u;n67Af|sC~g;slzJsq>$SSY&EauK z8>K`+j2P_13|KaGjvzPtF+=DImVNdtoqs@V#J*x4qq@W(JdshUoQzTLQC=6QQ#gJ4 z|Btut0BoyB8rJT6Pm(QLvaD*^lGSC)-LfS2-n*UNoVdkFNbijhLV6$xp(G&$2!s^U z$N@uFJ3AAbVN>JH zSG~)j2DhtiE`3}khGfR+T{gAvMmW;<5EBuXVO6QD83<-qtL-RF|7WmdH=@CdX!uI_ z9iqX8Ps#^c*n7G71M0r;1DXLTp2b9j5HA)MymuayobhExIN|m9@E_e{JMLIT_50M zv2w}iX`7?#7Ve$C{E6C(Fq2M|T0E|NY`ca%3EJZeE1J?LZl9KoP4_dJ%W`y*$c*hv z*sacvoH?uYIW6w0p7h3|o|=RrPkVH%&Y<(A?cAxeX(V}b_fPM5Xhn6D-Wijg(pv*h zCt0>^sp%?=^|-L?C}L-bR|*dcEQ}ql5@HF_(A>oPe#E|e5_`;BIJM}1nqxymNA>TV_JOBQvq3chb zxMKcf>iH|aPo*Be;`=1($Q9owTqS=R_3{*1y51c21`4^ejf6qh!G){*5f1oRg&k1~OWYB(cz}9X+Fb)`=>1@w#-LycL7Ddxuh$;Y^!R+Hp*mC8<% ztLf_2)e|x^C#-HAzP`=nYFj@%w=rF%N^i`~u1i%aQ|rJi&IknzM+sf7p%T{Pg!QN| zEnts>y-4TbqLJcTg)V%U4f=WhPldapW&34v_JSrM+ZdmnsMRKB#~ZT~H0*Jx8h5Ot zy%gU_He4^goKZchx`onFVMDdW@lNty$ciceFI z(%i}%BWbQDX$}h1Jf1|}2Ub0MKh;Fz9*~E3Qvy(egV91qX>&zdY%cV)9|1>sYepytya4|wb&uI+a+?QWP&z4or#cWI=AL_ z;HZurxjF4s33$e>Suw%wp0J{Z|E6y-Ycz(LC!>u?G4_HeCQ5RXswa%u2ySN0&YI5b zoUWRrq?)dr?9Lh|>~K$5URk+(yvH*he@}38V`Bjv4wq480R*+wMD%d`G8Jv(fW-W+EELn^B9LM&pCQ zR&g%5!lf8AmmN3mH?hAA9FH&`OlNQRJ;xXZ4?ALe`vcWV#+_ThN3RWujNYe};`yR4 zaE%xIhH;0K1#$wjMNVwR!tthqu|>06(__=i94U2$SsHphoY|1s+L5^S#v9tKnSIdzj;g zEaOZEYbR{$%xXV&@y(E3rq$ zw%;bo#O+q&rK}8CNYi>10c&Kl9W}ASLN32?7XKy%iQqydvKL)I3_eqcGTfb6o9#w% z#NQg`$PKD6CXf9!FRa)xqkf*vYsl8s|FV86i|#%!cgjB%{iH8LrAWG47hVtNSh|;QX;}a6J)O!Yj{ge-|NeNdNY7{oBi3Z&HwiaMhu-!{Ak!INd!ebs6r*FXzve z8_0*r4CM09!f+~K;6`P|Iqx*PZV7Mzj7VKq> z-yYBeZ>PFKE!bhx=vtM{Wtiy9HcKnK>l0e)O44I>zULXd9f}?9s!Z-eeCe`0F)=@_>+YHB9?7hZ)JI3_G&*ah zWnw2-onT;}Nlb7KO9r3!4lAhI3}ek1ox^u6s=jeycDPItXNptIozp#Do6u4+)hUrY zduK#z{We5PHtMHh)K5d_3C^(;_Koo&*vF0qTK3C}M~+Yy>H+rGlMk#ueR?(JdNpznkbdw>{5%GYmzU6Zf%Lu~@$*DfA2n)U zNbip&XEoT~71a-dSt(@wh@Ru|GkriqAB;-|~Lqcl>5N_2O6Qk*4Ds?>yS_oVC1diJnPIS^{qbLaO<1Z~vQ zG>$?q0Qjg|WbsjLXPB)r^( z+G`!1k9a8+2)y{@LKw`v3x4ZUf|ZGBnRYPUr-a|0JPFUp!y}>|_yA1p1U-L4`5#94 zca!`wK0nHe1Jl_ZHuuBuJ6x_$0j4Wcv>6HP?Fhp=o$U4x9uP}~lBfs&M(TeS(S8Kc zj{W=axsimixv3*Krv@LwYS`Q1tS)xR2T!3Yh~$zdK15}sAxC{h*M*kd*M(ZB9lcYi z9f59i@+8HaVxI?jr$8n91kZQy3H3DG9*8MTdJx=xio9DSc$Yej-r+ky+`W*~Z~8V- zmG6SEQ~3RO!7}Ot>Kn{&TNrSJ0dE-4gaK+a`yBi1O`wo{>qd|Ul2@~Dfr9HnKKsln zPzX|2p~vKv>|5+}cz$X@tJ*JVJ^H1==SrA{fomrDfaex!d+$`>)i^xHcn@CKc;by7 zhi2e2ss%V~;9eMv9=sCr_*Ml0?gX_ufjeh+pg;5B7x;vUo3Cu4^OcB9QQUOp9Xwr$ zTwan6EUc5)f+#6twrS*PI+ZYNlBq=#FI3g4g-NjuCYw$z3>zh%L=tG2L|v1q&eRYa zPiw%w$)DH6>L#1)o@br<sG-;SPQ!c#R;!HdGlkB z-Fy;Qo_p@bbLV(l7+^uGzrBGr?FMhLsbKGoq^{k9XQ3B@{__Tx0)NU@g2I&;M~%M+ z(1OSC9Vm^RbI}|yTqaAWi4oDL7B**w6Nj#on=?%-!lYp;ol(iSY?gF6nsQ_F3v;!^ z{@wpO5FuQMb}xVQD@2T}_Ba!~-UO#-RHECRnBXRM18A;=6)*;utKc`6xqITA7f)BF z=6hppc2aqY_HevGlb|>>&KL>K8=di+=A~O3dSIwwW4wp0(&KV zTulcm-yw2%QO&##FFAzPcr_wKm`DTa^$7|3*o1^<>YW)W35_G_)r!VZ4QTMDCNz#} zR4bc6RH8o4>5S7SK8oJekL1(Ug-eu;qv{jWQ92@f-Tu2^8&!q$E*bH6&7Ix{RY{6d zCGklv(Iz>o@W2&jFIFCcTAAGeI-RMBMyuYU5IIeqmNK`=Qr=n2#3+j-o(@x%OcSm~ z%#XHIcudxcF78EURZLR2Oe(X+trjL)?8@>3Skk zV=Qs`JL1%Q}ih06j(6i{g?+QmIU@(ko(B$_PaS*cMh& zr#l$8T-OzrTs|(_JFz;MDwXNxg;{m^l5m-b{ho@943pt|0f@ls;CI*_P2n0M^s*lN z_(IK#sS7w6!FpOwrKx06QA$;|Q&uifgiF;iMr~r!Yp=z{dgHzdSH{ZOc$1+L+}@Ku zx->y)bH%3!#d3w*o!m34FegbQu8GvCBClg?WhN$inoIB+mvgxm7_I0-1q@dL zC)D7P>u18H=i_s=#yJfgJOqsz~~H7FL$mltso# zA)@JKR2K$~R6TcN#iDY%@S>U_DyoWin~cr}m&PD=xZc)VA>#h6U?$=h` z6jlf(CA!8RO1C~RWyZh2Q%&#B>p}H(`hSN@P<@L6>*x@J3K8e8MX1D;#=k-?tbxE1 znk=B5)e-Lcj=Y+=@r7ZLQZ)6MbY1!%V^pt#S9Ge|wVeiwHd-o{2?!2uMmexqoj-N(l~LXSZkBUu82}Z(W1({yoBoRf<`TZa&4OAUkprCGuD9= zXlSX0GC(F>?D`WCeJ;r^lSvzDOG|4Tq%xU333Ro;I4sT}PMiDl+BN@~lNufuH{yBh zUkBka^LWsNWA_vhlSrY+k&0#3Ey;FSl&qn;w6wYb{jev4u8!wN#KncD&iT)pwLi~I z6C2`&y@>Qw2elf`$LAt65-j|=NGtUZSj&8cV9x|$-SmFwWfBnV*$`M2f~`TY=Yp_W z_zhs_90WsD@~|pu1rQS03w}Qj%cPdWY2=J%Uofv4(K3Ua(L5wzcvvY)S3_Wjf_aM( zY$Aaj4wlh?@{T32Bf;~XGL()x8#)>+qXMOCBCunAmWQ=aAHjO&T}0nY!SkXl$^a(_ zUqP@x2g@Bz>0zCaL9myD1()OVXVWrn6Hk-~y8F4Sz2WONG6_DtsHk-VD~)iC{(odn;Hshu?to9*S#UzkzEb zb`4+g1sn+=3y=VMX(;s=6J=!ve;8_0@7OuuXxyK z_9UzW_j0`AVc7`ZG$`SC#ly4+wwloQYOvf21e-`;ulaxDVYvu4o#cHzm>1()OVS}; z@i4nz3m1@dh*vz!37>(BnEiwY6nuv7<0jO{9b6yhVcpah&`VF|`gjnw2Em@?`Zy1( zfr)^o77_jhU{&xbASAFC$oU|KO+w{X(jO510UnkKpMcYtV_d)IVRa~7KBkX9TO{ZA z2sVzSJ0M_qSQg6LNMHy3EDuBP;CPbvA^*=jtQ4iIA+SS1d_@S>Mqr17$(N8ApTZs!_UD0y`G0M>7=*>lh{J2LYHHj)!f+Fx(GLU7PFmS$>{{Ff;L(jJWpP3jmvUk$Ny)sLbMnKVzyEN= zh(%+|%@N-Dn-0&u3$0{hFO2kMu@9lyo_bfQP93{?BuGwuKjP=!OKrK2eem&@)+ ziXAQNJ15ASrCl58?2c8nHLE6NXHQyHQ@g4o8$OFrH8&&V6)R_tFSRzWKS_-`F|Xo* zrjEs3>)FpYh2P80Thy|Nomsh~nSGagv!ru9&~FUC2i%O_fZHn2o1)sAI_X z?3iS3jgUg!LV1NZAs)mJWf>5({q|7a?8#e3kJ>spJA3lhQKPp^&OSG}t*xi0t!*+R zZra$Bm)EngscF+>@;!OpyvaTD=K1}XexP^Ka^`n59+NLUz?}zP`hht^%SG`V43Kjl z|9{vWu$cE*Z|N604qpz(YBKr{7OyckUO(27A0I~PY_`n!$Xjo{xCU%yo5~iBafOAi zK}#Z&CjlHk2A*g0Nd3^t2Np4}@bw#T7OMz^ltKT2d}EF?CdQd#H037gbV<3Nt+|M? z)7xU4*$9T;<(iDy&Y0d_b}rZ)C<4bALS?LB_Hk?dK0jt~&1v?>)2D&#G~DW&4Y%G6 zm->i*(+reeLqk4&kOHV#_QNvtKX{rg0Z(rPkF)&!wNdN>n1bdo?d5!uy5um0Hvv@! zeUM%}`4eZo*{N4VR97@HumAoP*X9-MeM}m2LJ&o45<>kRd%W_{?Qhch^1&9G1MI#b z%R4~Udm7Ulrl%*3+uY$Ekr6A_M@y~7y1IepoQlFd*A2h9+spez4)udvoCkj!wQXvi zLUkRYdhEnYcZOPiR*kJ1-RBpXv$tpOqdy%GOF$GPG?Y%x1HY-yWq;80R71&lxBS#z zp2V!FuIo;%Z!Evzo#hT1vwW?Ru!~Y9YA-`>K5)y8J#d}=lqJchQu7J+&y(y&%%ee zOT|`qt$WP4Ded#-&FYLvt4PUh^g1<$z6u1|1g(;sP4nx9FElCKc}4L#Jq@XqITOj1 zveGPX`JT!`yaT7V=mRwg8ua3`&tFKq9&8O2uCp!(?h6?PQ z`Q(O1du4mRqs6fz$qJSy)?}NKYP)lCy6cim-r5AP%$l^q(UO2;05-0FN>a1p;H0vp z-HlqIXt61g{h7&XnVMJLRbn)jbd~2#ZOLLlM51Z2NT_Y>URpNk;EEdVZVq)8(HKrv z`aw^ZecmlCaYEw3xcF9V0eCFbh6O;tB^(G zfc!xaMW~~5)W__70~;JRIAbFVTv-L4y!5Qh%#4i8+Y-DcX~yW~^$pjL$&i{oiF4A1 z%`GjR-I{hnVNB9`^YgtK6>yn1HMyuTCDqHmBTvgMvsKJ)N=j;)U12NBO_LYio;SJH z>8zcccN_5ufclUe(TROS<4$bi7(sEwB3`G31UZo5t4{E=BgI#)i222sov6)7*Jp=I zveH*cO4}EgV0T)M{94Pl#3s|1sn$DNwH^(SS_|{?j7c7Aa(s-~*f6)wmfAeM&^>-w zgX4awjLaQ~S0AA^!oKkE7Kq3b+A{q-n<1h^4uuJxDrr2TvOB70)j6`-RyDfDG!)0y zN5;!FW^1Z7v(!`OP21iAzNQwtvu_q9H_j|=SUt(3c4X?O$z^Jtx+KqC9+M1JoGfZU z<$sHKkc;c*GZ-AX$X z19p84)<142v$5yaDdOIGORrf8$NTp2HZkyHgfANJ9V!EXWbx%e;-T?lML7GfsJzTa zfK_hSu)EYI>a*)Ia#X&trVMzqB`3zLdWh&LpRr2?24QW$R?(23FRcAFozr0o(YqH! zlkwc4K&t>WeIWfGsr_EfuzAg+^M|#}pWiZXezWlY`OTw#tq`3Y);xcH^SpV@n7&<5 zK<$Rd0_PXIDA>!wW1O$Va%v0c5(>#VA=wo}v#SB(oid0PS;;Xnxm6*vt5BuH;f-}; z;>_vHtKuYm?)=Haw8E%pxiGC@=l(-YWG#nq!G{qpGehay(ZisPIZtlRa(CW@!7Fe4 zxB|)QIJ=#aL|QWpktO+7k6jU8&{jmRmPHH2CJQBxvnyRCF-iH>wB{Tm!8roqd<$C@ z0%7R&Ig1lGaQ%S_N{iYG;_IsOOCk*!R$&Cg*sO7CdL*zF4Nt3XEOjaEadKcZi-plL zLT3p*0X8zv354i@vmpZ|IXf-dhdJugCQ*_nf0 zXspTXPA*+5y%)a8>>>I#8Xm3?4+oaO9j8kM^PTaYx)f`nCrzn0?TpW^OSTqyQkf=G zQueqK3wEmGL_e(P2X2Q=h?nOHFHOWkWN2<;+AWIvhvX@^fNC^%bIxUW3+AATeh=DF zS&L9vPh71mn}x7ovnJMIry?S(8S#;&s4SbpP}o)klef%4jM;ISvZ8?8%CC`Tqq4pi zev8WTT%nf?!9hInT&DMcXNTgf(qO&}IdB`{czhqnO-@YPdeqncO!}Jf^1Y4cIk*vb zy4vde(#Uw!=_Cwov&CvaB<@9s=RA~$=;8P!2y~2luYT21c$djJu#>QJuSWj= zi5w7g(`Vq5%=qBBKDjzO{vI;_cF+K7K$X86;2CBgwznj^60X1+33Ci=9XYSca73cd zbRacMa>P(IpWcwtI3?GRZikj(75RT8H~%l%)#(48*~y$FIt|5$Y?MP`^D^Y4 zLC@4u z*++lF*YX8oq~FJgw+TxHa)AZSvQ>gHg6jm=3%1}D2O`(PEsO9-QVe(o1D;L)%kSyw zW!+__BaZBB#}RW`S6RO&pA$jM!AIc&^wxYNAv@cC#8lSx`$IzqgmRUFogX zUe=bK<#J_Zx0Tt2PJ20eLjSVc%I&@1guV;?%@*M&S5}rQ@Fwt^T6MWRi1#jby0~4q zLtsFw&@qAqf^C9_1+NRfL#?dFTQX7#t#gQXnpErn1&4y6G{B=FjvF-nm&gu<9d|ZY zA>}1MNbkjYQD4CeB%nfB&=0keM@M-9c3gyG1N3u~2t^9+ESQwuZ}|&wbQNsJ;UGUq zXc}A&B?3YRaV_B(6u@a3C1aG~(xgncR;d7LRdh;vno6r+;?(h@rY>SdDw!E>t=mUO+v zWtPXf>e8VjLMCQ}0O3NScZxGQ8Yop-j4nRY7$E}HQe}Wdl{HfzpfRZ((MbQMj^wFO zre~(Ba9(AMJ3xx>RXGUf%EYv!p)yUFmUN#Nmq{{4CH6Q6WMf_dsOpMf)oopgJjIGS-Ff-k$TD z=pTr0dMR29$6y5Zi#^|xq>s<`jnZ=kI!)%iYAqT#IjYVmtqg~>~-J{{QVZN<~Jv&)@A7dI~p8dN7FRh2JUCu zC0!GHCW+q==60?h?wZh2swwl2yK8nS+@o=P!tC3mwFlPQ5Q^Fny#jz%)5Olx;f3&A z!)W%cd@yBXgYdp{b)zr-Dy|q=F91Fkug|&kIEW}(hI=(4lOdmdYjnf8a}6WG6n3dt zJi6}Ox%!d#e&G^!2RI-cDd29RqBXMSDwdd6dtNf|qT3&RelwoC%^T0Zgv|pk$PEUx z49J4|b^$v>yh3<5;14vq5L#WCv;h(~ZV(6FLVCqOzn}$m8_#|Nq}#Ru={M&#*41r1 z_YHet+cx&XH)l82%_?7Z_^k^!t-A2m;pJuJOOL#DVbx9O_p)+$GfMw8m;P&#{wJKC z;EKErr8%;!ynNXaJ}>@_@Q}MvK^l>sJCHUvp_!gABrP1B!ox$AxQ(ZV)29RX{&D*T zqYn4&8V{V^smsv8e0kN~<;_>16z&V`I0ts1`5otWeg~R*@QPJ|!FovXeq0#d|M3)I zb40mIemR=yeD-{CxY=%%Rzdjlfh&+l-^u>aER_LCM5*2z>wARy6soV0o@8?Vg;pls zzUzk~joQPVt&zEdk^-{NYqwmsmH%yOO5A3t&3EA72qlZ#OC_t)vn1i!`t%HKVz%*@ z7zKPP#lik`g*t%UGU@$}hGFB~h0~i;ZFO@SjN+L1WUD91n3q>*WiMzv+SWU*sf_F@ zou;pDxg>&>I^bFgX%G$-uS{e0BozdLSL6AzFNTTea@C|B(#A!Fi)8tR^t6@<-D9M> zgqRqIUL}$iB+XLiwp>@;vTS%#U1NE*t#)Qj$=tE|65zQ)m8r2bB~e5qS~HUJa=`J_ zB5h)Pv^>@*i;I${m35b!(}&L~8QHDV&1lbeGJ-ilMK zqi0>Yf%@9VNjwXikP;ZMuO^G+zE&Xyk6yBabh&YTBdc!Np5`s{lxA8}t!9lpKC(Wx zxM7T|aaCKEqi$BU!>&5gSi*jErQx&P_f2w4xjU~!ty9b7)6kMr?U}T?p>$?rvgqb) zH@xB6=P3z4PxZOr6jBP}E*sk(hnkGwaLbn&PQyLHqoAr?CLC>ui((C~(1Wr}YS68*%h?Yf$;^uaG2sgKt}F8XA(c5M$KsoxVS@Wq zIT_bM)s?BEgS2sHWuy9WTZ%*gZ>x_$3QymaYEAz`*vrnk9eJLDELTBftkaN=&(Jcn zewv-uI=i%V?y$5ui5{~wW6bpp^~*ZC3l|siVe>ch@c(lj&_+R#88r z(iAO{is%hj>1=dA8SfFaUR}!fm!Fp#MxxlO%KY9fp(6I5{}T-WZ25ySm2wRnIBq#-d97PHvJ)u;SW+T2%$eYFbc0ti@3JdWBzkZIz?~(wYK23Dj4v$ zKg@~{UgQdDuwUQ*LhHCTw$O+FunxkmxmFha7YYfm{84VvL0(}U#YSTD4XveIBS$_S zq_bRl;hKl_5DE+&^FJ61PBfB7T&q@NyQT^XCtsV6(_3?`wZ59dGxfi3Q%P_RzZMPX z8mEHESJ8)j&DT5$TwOZ?3;rkLKU!cSQ33{QOw6_Q=9oeHQ?Kya+jXEa1^#$lm|$Hv z{i;?l`M=Y!uCZ~){{elgcgi(4^nas$fp7mHyF&YYVB}wuMs|(7QC)+6=F7R}>HX^3 z8l3lsJ4_!Bu>Lk&F#GEI+qG&6m(}d%UtP2N@|x6#RsR!}kG=DMY0CoJN+L#%p@Vmv z7ee1$Z)T`)H&`cu0!- zurCmt>>i-y@JtpgqHF1~+?~7ryP%UB*FDzLb7FmCtZQss$33C9 zsH|C_3%*Ug$k}%e#NZupKVnw;uvx{$v$41P*~P`PhNbV)BzO$*+#UCL?6V8rQN+D2 zLa)=(hRrGoyyd?U&6mEXccLlkckB~iZl=*la(Jw!JN$yLKbc$dCKQ5Prd*R$oOu7J zDO?=|yzMBc4b^m_`2Q89e{;V0y=76o6<0_tbx19G>OllgcD9t(Nu zXOwHhjZ5>3u3xngAz?l^^0++KsyL@ih(|aOA6x0Ylu~$65KE%1UCt7T_|w9}#Y7Zo^u54!ITS}d$& zpHf=m9(gNVsnIJZsZFZz?Xm8LOjli@D^_DvhVP8SPxbj(;u-8`@-Pr3jS@rF6CG=c z${bhaG}?^OaptIu2~|nxCwH%(K7;E0CTg2Ve2N^bpGjq+l)StXn zyXhXXKY{HEf_a0UsEIEIdqRS2^UZoo^hF1kmG>r1vSOckLNm2OoGP#gjv#&gD})XE zj)49zgl6~@f=jR^fr5BRBDdHv(l3<;jY9JNBYKmPJ$C~hPhuqDqNMDPA~`U!t2Uz% zS4Z!KKMUWxjO|B|lLKeNLB=VUYv1()O;f-fYP%~gVEPf~va5$`cQ#<@5yx42#0_}n z?N-jf&k^naC%)2!4Obz7{plV=Ln`9`1<_B}N&|yw$i*e;(yVH=HBE<02B%brngD)8 zoys>CH$_d2y&C+{E8OK*i=3BN^kwGY0N!%&t1*X~_l zGro31uHoe2t2ucf_lqw%SMYd`hVuo_{E6J%$w`WdNy;(dyF3xtFI>22785BV&fg`t z>?C0%{6$s zZxx*bX=c1s8S%1ADwE!DL*L&&OVrrxUoZ#AU>m->id#?wKs2b|!#+wa^0AX4MDO2b z_rp$s5!1i~LtsOTHzcTo*8}8?M5a}wq=e~GZHl7Fm3FenXcIn33+Zf!(r$=0 z8nVjmi4~c8y?PwyTQXHh!QaKjXl^-yNbw+UbACEY>CIG+?|y ze~eBu5AVGrIxB8Cy*bYO``$PcO8X030>@F_U~GhOzPl*znKL|{0yNg%MRa1fICezm zi2$6MF20V;jR_&}e0nXV5dMnbhXskC6u}=O@Fau>_a%$qcqktK^B6zDbIAW{2%aus z1e#-MzTDvm&fiO>??ChUeF%OM!OIc+9GR1sp}x9XWJL8<^v(0AqXcGr8#tJd8MSdi zoLO=H?Sw4l$<=X*O4cVb#>ITBkbke&ejFYBJ!?mMFQc-|y%eFy!mrazTk|xWIO8+tzX60!j0>?{nz% zzev)M19))f?I=kX`|g&`3qN*}G`%QItN#U(hFHnN)(c&C+|k9p^JB-BEggjJ<7_yb z?cc-QI~=SZ_T5Q1ZY^j|PH8Q)*$P`zlA8;xYtxbw($f=?)7ZbH)_V*FPkm}ity`~m z*QPi!Gab$h>=aON8@&jw71s8}35RRhr;dT2m?P}V;4fT#Z=)9m(-419aP7nFY48)h z5O{av_lVH7C~+`mJi-xqZ1-;P7xrbGe=B;wo_o*535V-hF{nnbQ+A`_P0FZdSJHR+ zpTMod;7gBatkHK}I=YzZsAOLNxx06Vq`_^2%TbXO|JaRQ6CCfbkyJ6_74fI0vZZ2k z7DNzL%zn+Dk4FDM22it0XWSJY8>b7qa}MV3b#yblT{xB8-5n$?z1R!>0bO#gsqao_ zvhLe^n9;#!?)wMdzhDe$ulwmFDnhtnXnYKC0PwLcDHLCl4y3ZHXM^R;H+@Kn@abk( z&jQO4&YS4jaJTSI9_IjAqrpB@w-~uB7$5r1{m%DKsAI;*Bl} z_WX=F5o`}P{LD8B{KlMM&)&V4w08pixo{nsA8jg&8{gt!=+D{8^S_;^Tj*CNAO0|h z-3%xCaa#Wj`g6Dnr?shUsO>dwmz@6m(lM0QdD;)v?4q21vS0J_QxE*B@Q}d5Wc%j` zK1AQSf(-)f&FrM$ApibJ{{2|;K2PxSfcJkD9!2n+E9B?iw+@lNgU&?xKSlE6alt{3 z3J@)zFcuKazdzIO{b=$&PjEi?{#oJY!S^}-34Hzq z>7PsPNCgGJ6}Xy7_BOCb$U#?>P4Z{Q=q)?(CCb=jl}VGA371)9nR+YwQ)%*qc#_lKZr1@27S0X z9z1VX2;O?9|vjFvj=JS!v|{9R}GxQ%||~WS(?V2 zC$es!U3nT(9ZjLCB$F{<=#u;C{(bBYIGXr9?(t)NIuIP676+~FcAk)D&@P&xYour`@m~EKnbb|Iv>CC=P zby^&!TVunp{fHJ3o=rJ_adPZq&^?lFVcXcB*fzT5(lNU9quyOqH!S(+BeEAFpc7FZ zE1rLm>g!TjNZ4@=z8%Yjz~)2hkl!Xckv*K59r5uenvJvL-6}Bcr*b3vhCDIhsTbyM zh-1y*bM2;uFH_IZUm1sGoSCpSL7HmxeeD6~b?Or%E6>ynd{HeWlPoicY`!o9Q;G>2+(f=Tl`uEloiIF$W z-tt&tL_POdm4M zVM-d3renx7N2#!oG$V$L6>^A@gru1{WSXPFm?Om~&3eA9?Ig`Zf;2u&S_q!o`83y& zG=~IXJk6evG#iFYbCgQw(~LuD6g+=_A!&{X^7M)&QS-JZ3r7fDcmeS0&1kr-$ zfcUO^f$W7@t_f@Qo}G5+%l%h{npf&!fY8kKcp-fygJ(zmGo#C(evI1NFXtps)A1v4!KTDiMx24hOgP z!NK0iz~UA~4mqvtJs$nI!BdwEBGn38;$ybbah}+ik3WW|q7z*sOPnH@>f01%PR?m7 zvkKWs9M4PHeRK{Tjb?2e7d&Kr5W?^N!4QaB$^f@Zmakg5Y}v|H%fb7`&g_n9#d%X7 zT2fN8=Bat}o?Kn+oqX$9g*8rYHz~9-31%{Q@W|nP`;H##bz$bZ+7d<08=jiK^HKTpyIcRk?^7o#n4cWjX+B<2P8X@THDwhW9UttiL?a?69q zkF#aC5AX5)$~;KqGaiW)qy_K(whQ|j^ZiQwf_*(gW1kbZ_c=4^X#cr z)6xsKw~yJ3!Q}0un>?K?=vyDkpwm`qAm?U*{{t7Dc0< z+MBz%!JQK%E;>+0{S~8)=GA1{GzQtuidw0zB`rW&pkkK`K#EM+5%%s}~?wF63w&{;yjWoL*fup)GS*o+)SMy*)1PVBW^p-Fnm9lqN~MLRUC?$%u8gC)7?Y zeib}%{Vi)&)J$z~tCVpOjG?+YyL;2H$q%};B~9bAM(tcOOr~p2?Z<1qOB$D1>AX>@ zNX$%}zc{1OqkpfnZ5S%dsN`bJHn0yOnSBCVt6!m?^oipkBf67HYZyht`?sZJ46csh z&L0nqn{pZmNsxDOj9O;2XO@o2Y2P!yxMJabhlW66CpI}4p zE&>|^W`Z1wK|K)7KfZ7R8wF+nFGVBR8Uza?ZIH^Yr?w*cN<#deaE&lT1XI_5wIA2B z9I1(udS-gaki6lEC5|f7KqpL~-x#%)w&kKRYSqNcsA=gXj;N}2ct~z;4iguKx?p-} z3_n0uG_~Hq4Nz`=u^`4cknW9^wWfgla=8cW8c_VM0a9qN6b$Gwc846q8cdJdOUJnb z8wFJb42hmhwhAPyj}bGxI1@`n;5}$fK*GTGG}#`gC))$drSdQeZxEC}%>Ek$1Q}qL zkhVl?6w$kgrx5~;pq5Bs4L=N3w!m+ph*1(x;;Fz9{7Vj}y>jdfi*pgowTK>g-1L%R z4^0|5%wCca=X^Ri?>##$UF19|mZp-#`SyXIZSwm|3_3_&3 zk?k2HR*y}qfJr(V{a{C@E~7R*nKo;qd)nNoBUT@=vQL5(%A{d;fRnL_3@ZSCcTQP% z)C?x1)EhFbs;Q$~HL2>XuB{WUPnsy8{EOJ*w3AjL86873=zw++uzdGmU&#&?6(Xuo zGayw$WpVRz8b_){YTX=XXKwb`A|#_5GLVc$+Jjh^s){VSZ~E{}-QI%PdpeoKk`bAx zA&_JyLOL8(4Qm$8kyu1GT1)bJzc(jGnv`3q<5)yLyJGG$TZX~R)|`0IeToy))K@7) zzx@a`N*$s*lbo*v_LNA2h*Y5}5B6CXN~l@`UP)g)wkj!#QAEk|;u4Ep4tbz&&|>-` z;8lo-TkQshY92o|{_$v8xHhFY@lL)^u&;r&ywdP$tcBCJA3|c~6BgTb)#GRI{faX20c$oSN>DL`b-JF#w;nQ!mgE&!#pUZU=j$ zvWFNis5N-shU_@0U3~@)b_ci({MP$rRMZzLS%h9IKWi0yImsQ)$7o1qQK+pthe6yWWPcYY#P_md1S{s4FGkMua~$7=9NJN#;hL;Zb&&+ri* zb{G80e;m!P0`5fA?htZbyc7t_gHpY;LlQ0t?}{+U4t?<@yDMBeC0r^EpAr!PutP3E z2fGuV@t?S6-y7`Cp?z<(vPa>Y{zLcPkT|f^`wtUB17=75--t3^o66GYM?6-vI7L zy^?}nf#CNuq&*j~cQak6f7;0T8a`qfplkEHG7hhWyk@%C3%)V+^0s`e zNKHnQsk$!R1Eg?2v+wt@aItTFfx0fs?6E5)k_L?|CR!gOxrN#1+XiQH>zk?UKjA-+ z+%*dp;QBM4(Hwj!yOa8r>}O2GJQJz~`v{#8=ph!t`Pd6Ce%UV%I@v*se0-W4ZAk#9 z?d9XW(u=g&4$eBt$9rfb1gUXmB3^tWq2HREJF(0LV7%`ZQl`rP1N=xh7L~c2-#`1C z;2G3@>GWnlgT^@}c&PX9+45WaUrMg%)HM7oEAFi9}o@gOXd-s?Zk?7=$-A^0f&`yw%dJsO0?(QEzq zTng1J2$Kp0{@V~k zei?HfuY5xI9N`yKl~ z!kqL?{u3mYYepZ8>GhuwMI)Fi0AuH~2mD!RYNkMy?>wLGFuU7-qyGi8*7`>f6q0SDe@c$W)ZDCAb z|6q3^*l`3?^|cAR(|-?|-_eNa>mTe<|8X=|Q$kH&8?*oP@4|bU%x6K^FZ3|f&k=4)p1bYj?a)Na>(G&cs%yak@IhgJsJ%K$zV0nZ4C6gb7U5CmzM#?A%!bTz3T?AGb zgf%1BdEvJRRuqIyL9`qsv=oP=8{xl`z)JhUxV$C7@%lX7DNqpl%7%cI_a7r9Z$+@a zXV|&^5B+%UT*FS`+K%k$y^Z<@j)8_PE|8*$MT?ty`$hII>^U$+n<#w@&wfUFskWZtK<9tuE?|>-1!uAozN-SH^9WJ<$IL&)b@x2Du5<1(^WIUamrE=wYHEuZlMfUO4&+?Uu zUw`OXE*-%y95PscpcCvPQ?V zt=vHt!0Y_}JXOdsPaixQXz=#2Tyt}2L-|St_!>sK*pbN8IMh+t9Y=wj<16(J`-W1d zQ^Lh#Srd4vatIuKZR5rCJ|VTMc^t`K5fs@ENTUb_-;b|>If8z44B0k(_Qn?p{foG~ zC*YF7`LItOlutwQJuVDmaK5hNgv+ymfr${}tXp?cxgmLnt*HwSlJD z_o#O{ddr9A@x4#%=Lg3FC2S2I8hlJwTuxL!9$NxTen9N87&9e+-T4HN@LWz|hv^+g z9rZ|wuM8fk7hD++AVeRG$S?%(=r0gf?PTB67&tW1-~d?FA5WmYgaI_9y-pg^0$4nM zBbD*(F%lfTZ=QiiLh?uUwUwo>u>zS}Pm|2~T-No}qy5Sb%oAKzzP+NwBxn0koHGl= z%ak~4+YWjm$y?Ho=k5T{?>@Vin^->0^gRt%3j%4c(68@fvK=LRJ?1-4c1;80}3jbPo?ao{H7aX7vpI40m0BRDSo z1h&C5gK@YAj4wR*@i+?3V;twu%*SDP@C5Z`Nd9o5bN7ub*3IV|ehTN~@(iPY5b!Yv zL;APK0r0&1%xX}{&8`ov2k~w$UFi6;py7vu5@RNR$o^?H=#iR~{EYlP`@wpUFNpwx zkbFE}Y+SyeXzOL)=koT6w=Y!XygtWo3J~(EWpiJV0bp(j-lSxEke+_=E912H>z7UW}{q+SRlmhw!5lVkV zUx15veSyfN0r|p06bANjoGGX>V3~yTVWnX=kx5sO`~7r=iV&3{Ad{{v_fbPm8q2=P z>lc@k`--4QLLGp;`zQ-EeFDj#fwRZ5rSPNrtLP4axsAgS&>c8"bt0}@AlIHaMn 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 literal 0 HcmV?d00001 diff --git a/docs/limboai-stable/_static/css/fonts/lato-bold.woff.import b/docs/limboai-stable/_static/css/fonts/lato-bold.woff.import new file mode 100644 index 0000000..912b4df --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-bold.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cmtg5brs26n1m" +path="res://.godot/imported/lato-bold.woff-267e85e346cff1910d1b284a83be9762.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-bold.woff" +dest_files=["res://.godot/imported/lato-bold.woff-267e85e346cff1910d1b284a83be9762.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=3 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/docs/limboai-stable/_static/css/fonts/lato-bold.woff2 b/docs/limboai-stable/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bb195043cfc07fa52741c6144d7378b5ba8be4c5 GIT binary patch literal 184912 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

x{o9f|7gEmo2*wv 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 z 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≶M9Zv|5`G?V+t`dH%WEMXqpk;_3Hk#c)5bow}^>GHdOg=@5pYx=49b13Ly zrJynzDRebu8rnRSaDCBo@|9g53n?-Toj%;)7@=UY|Noy}Ma{<^CTZW`I9PGat{6t2 zaDw4J3oUfqrNwG{*q4kXjQO#)d%E?I`6unq0@g?R`EPa45Y|xpiRX?D^@^QqfPjrp z`1!tA9;wNGs_VH%HtUBo8*1_;v~g)avtfdTTKYQ+w|_T@R1|@!z4MWbhw@XQ#{r8n zFBZwGL~*S&Epds65DN=S9LDmC%OD``N?Ja3mq@-KYHmwkg<5GJXlu`C1U~hF;}GUt zEV_svDDRB0pxY;h0iVB6!+t9MoPjoUN2{tnNvmp71!_;3|F6OefCDX3EgVYSHa&Y~ zU}M_~aPglu-?Am;VW9ar%IVbGkq@`{Tq5wAt!;iU^4x0?c1udN{X&%ux4V&|KJ4W8 z^-G%6%-Mk6r|NGgPt?6Gz6|&!zRxhaV4(F`GZ8rK4j__!PX?Q7^;*CQ1mh5%DvR6C z?e!IxGMT8~xw^^9NiPO6=pQ@SRODn~Fsq8jD|VmScW#=CFmzog>dWa9ISWyD>bX6* zxnZ#2TwN0;af`pj^X|5h-UR+^#wtJ!B@tKiK!pf5VjK5!fZLt zzX!?qwZ#;g@k9fI%Zc#zkaZg@VAO57d!5O3Ue&0UhOx8iALeb!OI zRvYFgz{G^aMMxIXA9Q8%Ks(ns{Ng8LwsDMRXV9_!HbeTZg#-D*^A&&kWc>8s7s|rI z=ynSoO>Z_is~m>%blt}gX#It_>e2=$ntV|mjceXzzfgYM^uWLH4|qn@T1Vx$y+(mB zr_oTl_0pJ8ZR}4L)pN;gX0*r7gHMr7oprWF%6?*dA?da-61JtJNHWwP^#36TIN#Kl zHX65H`VqI9GB?_ee-?H!Yb?FpyYadu!+UaImNKBnpF_sZf6ay)B7}^R1hodXNP?eK z4UhCNG=>^Ra(w)t-DekO(;#W^pCZ0-I00f84I3?O?7O zB%x)J$UIIl{lRxlFHDbkes}4Xh27aeZ@lufb-e26$_f|NxU&YtVUJG#2x>BxrM_VU z1LCx!(BL?8gDF{Vq$J)xNc>yL)$=)7I*g|%)(&0-;j8CsUSvGa_^S6DVMpH zb8v0T>G{!ohHICj*>1fftNM+zZtws0KCZLv(IK>C_QT1EH@fD(8$2iPv~!>Y4cV!P zSZxtr!>L43HPE+4<>ftO;-5eywKK$aj&E__@NZF$Ub2O545&GURXRcHZf+@4Q*sxY zWp376swn?@b?YH5czxG41HZOjt)n5ymnfWVn}~l0v!W9f09Qb$zl@4>j!2BD$PIWy zG%tHq1co&qIS~ddbB3;u@9Dn~xdsYnr5s8^`W*i3m@VDEnOB&F?o#)Rs5v1eUah$w>#9 z(>0sd(bH1S1!0KMO_Fm9-(30B*tAvEi!I8bj@kN6Z10~`=5`eh*Oh@TSgc~GARo=W z<9@k$y19A1xpq3jbDRG4LD38!4XW&4?>FThiiaoIiVSTRo?|YzPPb-muv!>myEIOW zt#-bt4&U((ZdDWewL`sy(~|m2`BN@QF+Q{|G9ZCrd6ta$KC*E*TQ_G)_3NXw*H*CY zbEL^@$wN>XGaLNe4bu&0*GJMUg5zS=CN)LQyqHShcMq=mcw_4h9+%ozHC=V~`$%?N z`DWW#&TppMgR}4%!g!nK9J8-_y1Mk=F&oUrC@E68`W@5@I(HpHbiw(p1ld9~Keub^ z`qq-^lE(GMES@?`16xSt_yAA?b$A0;omip zd;&xiYAZP+=TTDO@|)ZHN*1!_{_wQ@i@zy5-UG{`HCbB7dqN5AgmRL@R~5 z-KAmZe7J3gow^U;9@e_R+QBj&j{H=={FCM3!&hwmwI9#NDh>OjBmRdo%0A!wRKaXY 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