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 0000000..6cb6000 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff.import b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff.import new file mode 100644 index 0000000..da960a9 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bulje7f2u1wfb" +path="res://.godot/imported/Roboto-Slab-Bold.woff-b8e1d2c55b66bf6a6d8f131060cf133a.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff" +dest_files=["res://.godot/imported/Roboto-Slab-Bold.woff-b8e1d2c55b66bf6a6d8f131060cf133a.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-Bold.woff2 b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Bold.woff2 differ 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 0000000..f815f63 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff.import b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff.import new file mode 100644 index 0000000..27b0dfc --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://btmabakqnon4f" +path="res://.godot/imported/Roboto-Slab-Regular.woff-836f9a21acd937aa5c0df4bad60160bb.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff" +dest_files=["res://.godot/imported/Roboto-Slab-Regular.woff-836f9a21acd937aa5c0df4bad60160bb.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.woff2 b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2.import b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2.import new file mode 100644 index 0000000..0c88a9a --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://ceus58dutmulu" +path="res://.godot/imported/Roboto-Slab-Regular.woff2-215c9b1bba0083a677447772e06e68e1.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/Roboto-Slab-Regular.woff2" +dest_files=["res://.godot/imported/Roboto-Slab-Regular.woff2-215c9b1bba0083a677447772e06e68e1.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/fontawesome-webfont.eot b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg.import b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg.import new file mode 100644 index 0000000..e543ce4 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xo7gm2rvgfvr" +path="res://.godot/imported/fontawesome-webfont.svg-09972e4c2a01ed6f4dfffd11968805f5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/fontawesome-webfont.svg" +dest_files=["res://.godot/imported/fontawesome-webfont.svg-09972e4c2a01ed6f4dfffd11968805f5.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/css/fonts/fontawesome-webfont.ttf b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf.import b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf.import new file mode 100644 index 0000000..9102401 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://v1b2gal6b6up" +path="res://.godot/imported/fontawesome-webfont.ttf-f26ebc364e6c9d812c08e49349670ce1.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/fontawesome-webfont.ttf" +dest_files=["res://.godot/imported/fontawesome-webfont.ttf-f26ebc364e6c9d812c08e49349670ce1.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/fontawesome-webfont.woff b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff.import b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff.import new file mode 100644 index 0000000..5c5cdf3 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://d1ykucegjq6q3" +path="res://.godot/imported/fontawesome-webfont.woff-882d3856ae7e071cbccd33f34649c726.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff" +dest_files=["res://.godot/imported/fontawesome-webfont.woff-882d3856ae7e071cbccd33f34649c726.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/fontawesome-webfont.woff2 b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2.import b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2.import new file mode 100644 index 0000000..5c20979 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dplnlaerfuq3i" +path="res://.godot/imported/fontawesome-webfont.woff2-44d319e01181a5b5282c867961e8de6c.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/fontawesome-webfont.woff2" +dest_files=["res://.godot/imported/fontawesome-webfont.woff2-44d319e01181a5b5282c867961e8de6c.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.woff b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff differ 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 0000000..c4e3d80 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2.import b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2.import new file mode 100644 index 0000000..68498ca --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dxhsst7yctpra" +path="res://.godot/imported/lato-bold-italic.woff2-ec381418ec65b4b82f8d8c23c4cdcec9.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-bold-italic.woff2" +dest_files=["res://.godot/imported/lato-bold-italic.woff2-ec381418ec65b4b82f8d8c23c4cdcec9.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.woff b/docs/limboai-stable/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-bold.woff differ 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 0000000..bb19504 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-bold.woff2 differ diff --git a/docs/limboai-stable/_static/css/fonts/lato-bold.woff2.import b/docs/limboai-stable/_static/css/fonts/lato-bold.woff2.import new file mode 100644 index 0000000..4d3fa42 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-bold.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://df7clmkf82nec" +path="res://.godot/imported/lato-bold.woff2-325a855d31ed39d048c4508dda2478a1.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-bold.woff2" +dest_files=["res://.godot/imported/lato-bold.woff2-325a855d31ed39d048c4508dda2478a1.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-normal-italic.woff b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff differ diff --git a/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff.import b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff.import new file mode 100644 index 0000000..1932591 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cgife57oq73cy" +path="res://.godot/imported/lato-normal-italic.woff-e109a6767353de6eec1622e47b1807d3.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff" +dest_files=["res://.godot/imported/lato-normal-italic.woff-e109a6767353de6eec1622e47b1807d3.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-normal-italic.woff2 b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2.import b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2.import new file mode 100644 index 0000000..973f4c1 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://pfklprmap3e8" +path="res://.godot/imported/lato-normal-italic.woff2-aef6b8aa963ebb737e9c6d0fa62d627a.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-normal-italic.woff2" +dest_files=["res://.godot/imported/lato-normal-italic.woff2-aef6b8aa963ebb737e9c6d0fa62d627a.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-normal.woff b/docs/limboai-stable/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-normal.woff differ diff --git a/docs/limboai-stable/_static/css/fonts/lato-normal.woff.import b/docs/limboai-stable/_static/css/fonts/lato-normal.woff.import new file mode 100644 index 0000000..f95bf17 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-normal.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cv0o444w5klmh" +path="res://.godot/imported/lato-normal.woff-2776fde617d3d1c990faf17ae05a280b.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-normal.woff" +dest_files=["res://.godot/imported/lato-normal.woff-2776fde617d3d1c990faf17ae05a280b.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-normal.woff2 b/docs/limboai-stable/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/docs/limboai-stable/_static/css/fonts/lato-normal.woff2 differ diff --git a/docs/limboai-stable/_static/css/fonts/lato-normal.woff2.import b/docs/limboai-stable/_static/css/fonts/lato-normal.woff2.import new file mode 100644 index 0000000..3b1d7d9 --- /dev/null +++ b/docs/limboai-stable/_static/css/fonts/lato-normal.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cvnm3h6qa7lgh" +path="res://.godot/imported/lato-normal.woff2-bb3a13a900f287d20a242ddd2eaff4ad.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/css/fonts/lato-normal.woff2" +dest_files=["res://.godot/imported/lato-normal.woff2-bb3a13a900f287d20a242ddd2eaff4ad.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/theme.css b/docs/limboai-stable/_static/css/theme.css new file mode 100644 index 0000000..a88467c --- /dev/null +++ b/docs/limboai-stable/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) 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#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search .wy-dropdown>aactive,.wy-side-nav-search .wy-dropdown>afocus,.wy-side-nav-search>a:hover,.wy-side-nav-search>aactive,.wy-side-nav-search>afocus{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon,.wy-side-nav-search>a.icon{display:block}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.switch-menus{position:relative;display:block;margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-side-nav-search>div.switch-menus>div.language-switch,.wy-side-nav-search>div.switch-menus>div.version-switch{display:inline-block;padding:.2em}.wy-side-nav-search>div.switch-menus>div.language-switch select,.wy-side-nav-search>div.switch-menus>div.version-switch select{display:inline-block;margin-right:-2rem;padding-right:2rem;max-width:240px;text-align-last:center;background:none;border:none;border-radius:0;box-shadow:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-size:1em;font-weight:400;color:hsla(0,0%,100%,.3);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}.wy-side-nav-search>div.switch-menus>div.language-switch select:active,.wy-side-nav-search>div.switch-menus>div.language-switch select:focus,.wy-side-nav-search>div.switch-menus>div.language-switch select:hover,.wy-side-nav-search>div.switch-menus>div.version-switch select:active,.wy-side-nav-search>div.switch-menus>div.version-switch select:focus,.wy-side-nav-search>div.switch-menus>div.version-switch select:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.wy-side-nav-search>div.switch-menus>div.language-switch select option,.wy-side-nav-search>div.switch-menus>div.version-switch select option{color:#000}.wy-side-nav-search>div.switch-menus>div.language-switch:has(>select):after,.wy-side-nav-search>div.switch-menus>div.version-switch:has(>select):after{display:inline-block;width:1.5em;height:100%;padding:.1em;content:"\f0d7";font-size:1em;line-height:1.2em;font-family:FontAwesome;text-align:center;pointer-events:none;box-sizing:border-box}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.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;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{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}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%;float:none;margin-left:0}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/limboai-stable/_static/dark_mode_css/custom.css b/docs/limboai-stable/_static/dark_mode_css/custom.css new file mode 100644 index 0000000..989c2ad --- /dev/null +++ b/docs/limboai-stable/_static/dark_mode_css/custom.css @@ -0,0 +1,77 @@ +.wy-side-nav-search input[type='text'] { + border-radius: 3px; +} + +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +.wy-nav-content a, +.wy-nav-content a:visited { + color: #3091d1; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/docs/limboai-stable/_static/dark_mode_css/dark.css b/docs/limboai-stable/_static/dark_mode_css/dark.css new file mode 100644 index 0000000..e863889 --- /dev/null +++ b/docs/limboai-stable/_static/dark_mode_css/dark.css @@ -0,0 +1,520 @@ +:root { + --dark-text-color: #c1c1c1; + --dark-link-color: #249ee8; +} + +html[data-theme="dark"] body { + color: #bfbfbf; +} + +html[data-theme="dark"] .wy-nav-content-wrap { + background-color: #101010; +} + +html[data-theme="dark"] .wy-nav-content { + background-color: #141414; +} + +html[data-theme="dark"] .section { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .highlight { + background-color: #17181c; +} + +html[data-theme="dark"] .highlight .nn { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .highlight .nb { + color: #8bb8df; +} + +html[data-theme="dark"] .highlight .nv { + color: #40ffff; +} + +html[data-theme="dark"] .highlight .kn, +html[data-theme="dark"] .highlight .kc, +html[data-theme="dark"] .highlight .k { + color: #41c2ea; +} + +html[data-theme="dark"] .highlight .s1, +html[data-theme="dark"] .highlight .s2 { + color: #b3e87f; +} + +html[data-theme="dark"] .highlight .nt { + color: #ccb350; +} + +html[data-theme="dark"] .highlight .c1 { + color: #686868; +} + +html[data-theme="dark"] .highlight .hll { + background-color: #002c4d; +} + +html[data-theme="dark"] .rst-content div[class^="highlight"] { + border-color: #1a1a1a; +} + +html[data-theme="dark"] .wy-nav-content a, +html[data-theme="dark"] .wy-nav-content a:visited { + color: var(--dark-link-color); +} + +html[data-theme="dark"] .btn-neutral { + background-color: #17181c !important; +} + +html[data-theme="dark"] .btn-neutral:hover { + background-color: #101114 !important; +} + +html[data-theme="dark"] .btn-neutral:visited { + color: #c1c1c1 !important; +} + +html[data-theme="dark"] .btn { + box-shadow: none; +} + +html[data-theme="dark"] footer { + color: #bdbdbd; +} + +html[data-theme="dark"] .wy-nav-side { + background-color: #0d0d0d; +} + +html[data-theme="dark"] .wy-menu-vertical li.current { + background-color: #141414; +} + +html[data-theme="dark"] .wy-menu-vertical li.current > a, +html[data-theme="dark"] .wy-menu-vertical li.on a { + background-color: #141415; + color: var(--dark-text-color); +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l1.current > a, +html[data-theme="dark"] .wy-menu-vertical li.current a { + border-color: #0b0c0d; +} + +html[data-theme="dark"] .wy-menu-vertical li.current a { + color: #bbb; +} + +html[data-theme="dark"] .wy-menu-vertical li.current a:hover { + background-color: #222; +} + +html[data-theme="dark"] .wy-menu-vertical a:hover, +html[data-theme="dark"] .wy-menu-vertical li.current > a:hover, +html[data-theme="dark"] .wy-menu-vertical li.on a:hover { + background-color: #1e1e1e; +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l2.current > a, +html[data-theme="dark"] + .wy-menu-vertical + li.toctree-l2.current + li.toctree-l3 + > a { + background-color: #18181a; +} + +html[data-theme="dark"] .wy-side-nav-search { + background-color: #0b152d; +} + +html[data-theme="dark"] .wy-side-nav-search .wy-dropdown > a, +html[data-theme="dark"] .wy-side-nav-search > a { + color: #ddd; +} + +html[data-theme="dark"] .wy-side-nav-search input[type="text"] { + border-color: #111; + background-color: #141414; + color: var(--dark-text-color); +} + +html[data-theme="dark"] .theme-switcher { + background-color: #0b0c0d; + color: var(--dark-text-color); +} + +html[data-theme="dark"].writer-html4 .rst-content dl:not(.docutils) > dt, +html[data-theme="dark"].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not( + .glossary + ):not(.simple) + > dt { + background-color: #0b0b0b; + color: #007dce; + border-color: #282828; +} + +html[data-theme="dark"] .rst-content code, +html[data-theme="dark"] .rst-content tt { + color: var(--dark-text-color); +} + +html[data-theme="dark"].writer-html4 + .rst-content + dl:not(.docutils) + dl:not(.field-list) + > dt, +html[data-theme="dark"].writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not( + .glossary + ):not(.simple) + dl:not(.field-list) + > dt { + background-color: #0f0f0f; + color: #959595; + border-color: #2b2b2b; +} + +html[data-theme="dark"] .rst-content code, +html[data-theme="dark"] .rst-content tt, +html[data-theme="dark"] code { + background-color: #2d2d2d; + border-color: #1c1c1c; +} + +html[data-theme="dark"] .rst-content code.xref, +html[data-theme="dark"] .rst-content tt.xref, +html[data-theme="dark"] a .rst-content code, +html[data-theme="dark"] a .rst-content tt { + color: #cecece; +} + +html[data-theme="dark"] .rst-content .hint, +html[data-theme="dark"] .rst-content .important, +html[data-theme="dark"] .rst-content .tip, +html[data-theme="dark"] .rst-content .wy-alert-success.admonition, +html[data-theme="dark"] .rst-content .wy-alert-success.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-success.attention, +html[data-theme="dark"] .rst-content .wy-alert-success.caution, +html[data-theme="dark"] .rst-content .wy-alert-success.danger, +html[data-theme="dark"] .rst-content .wy-alert-success.error, +html[data-theme="dark"] .rst-content .wy-alert-success.note, +html[data-theme="dark"] .rst-content .wy-alert-success.seealso, +html[data-theme="dark"] .rst-content .wy-alert-success.warning, +html[data-theme="dark"] .wy-alert.wy-alert-success { + background-color: #00392e; +} + +html[data-theme="dark"] .rst-content .hint .admonition-title, +html[data-theme="dark"] .rst-content .hint .wy-alert-title, +html[data-theme="dark"] .rst-content .important .admonition-title, +html[data-theme="dark"] .rst-content .important .wy-alert-title, +html[data-theme="dark"] .rst-content .tip .admonition-title, +html[data-theme="dark"] .rst-content .tip .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.admonition + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.attention + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.attention + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.caution + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-success.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.note .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.seealso + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.seealso .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-success.warning + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-success.warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-success + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-success + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-success .wy-alert-title { + background-color: #006a56; +} + +html[data-theme="dark"] .rst-content .admonition, +html[data-theme="dark"] .rst-content .note, +html[data-theme="dark"] .rst-content .seealso, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-info.attention, +html[data-theme="dark"] .rst-content .wy-alert-info.caution, +html[data-theme="dark"] .rst-content .wy-alert-info.danger, +html[data-theme="dark"] .rst-content .wy-alert-info.error, +html[data-theme="dark"] .rst-content .wy-alert-info.hint, +html[data-theme="dark"] .rst-content .wy-alert-info.important, +html[data-theme="dark"] .rst-content .wy-alert-info.tip, +html[data-theme="dark"] .rst-content .wy-alert-info.warning, +html[data-theme="dark"] .wy-alert.wy-alert-info { + background-color: #002c4d; +} + +html[data-theme="dark"] .rst-content .admonition .admonition-title, +html[data-theme="dark"] .rst-content .note .admonition-title, +html[data-theme="dark"] .rst-content .note .wy-alert-title, +html[data-theme="dark"] .rst-content .seealso .admonition-title, +html[data-theme="dark"] .rst-content .seealso .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-info.admonition + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.admonition .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.attention .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.attention .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.caution .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.hint .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.important .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.important .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.tip .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-info.warning .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-info.warning .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert.wy-alert-info .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-info .rst-content .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-info .wy-alert-title { + background-color: #004a7b; +} + +html[data-theme="dark"] .rst-content .admonition-todo, +html[data-theme="dark"] .rst-content .attention, +html[data-theme="dark"] .rst-content .caution, +html[data-theme="dark"] .rst-content .warning, +html[data-theme="dark"] .rst-content .wy-alert-warning.admonition, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger, +html[data-theme="dark"] .rst-content .wy-alert-warning.error, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint, +html[data-theme="dark"] .rst-content .wy-alert-warning.important, +html[data-theme="dark"] .rst-content .wy-alert-warning.note, +html[data-theme="dark"] .rst-content .wy-alert-warning.seealso, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip, +html[data-theme="dark"] .wy-alert.wy-alert-warning { + background-color: #533500; +} + +html[data-theme="dark"] .rst-content .admonition-todo .admonition-title, +html[data-theme="dark"] .rst-content .admonition-todo .wy-alert-title, +html[data-theme="dark"] .rst-content .attention .admonition-title, +html[data-theme="dark"] .rst-content .attention .wy-alert-title, +html[data-theme="dark"] .rst-content .caution .admonition-title, +html[data-theme="dark"] .rst-content .caution .wy-alert-title, +html[data-theme="dark"] .rst-content .warning .admonition-title, +html[data-theme="dark"] .rst-content .warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.admonition + .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.danger .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.error .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.error .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.hint .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.important + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.important + .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.note .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-warning.seealso + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.seealso .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-warning.tip .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-warning + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-warning + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-warning .wy-alert-title { + background-color: #803b00; +} + +html[data-theme="dark"] .rst-content .danger, +html[data-theme="dark"] .rst-content .error, +html[data-theme="dark"] .rst-content .wy-alert-danger.admonition, +html[data-theme="dark"] .rst-content .wy-alert-danger.admonition-todo, +html[data-theme="dark"] .rst-content .wy-alert-danger.attention, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint, +html[data-theme="dark"] .rst-content .wy-alert-danger.important, +html[data-theme="dark"] .rst-content .wy-alert-danger.note, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning, +html[data-theme="dark"] .wy-alert.wy-alert-danger { + background-color: #82231a; +} + +html[data-theme="dark"] .rst-content .danger .admonition-title, +html[data-theme="dark"] .rst-content .danger .wy-alert-title, +html[data-theme="dark"] .rst-content .error .admonition-title, +html[data-theme="dark"] .rst-content .error .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition-todo + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition-todo + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition + .admonition-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.admonition + .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.attention + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.attention .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.caution .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.hint .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert-danger.important + .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.important .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.note .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.note .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.seealso .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.tip .wy-alert-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning .admonition-title, +html[data-theme="dark"] .rst-content .wy-alert-danger.warning .wy-alert-title, +html[data-theme="dark"] + .rst-content + .wy-alert.wy-alert-danger + .admonition-title, +html[data-theme="dark"] + .wy-alert.wy-alert-danger + .rst-content + .admonition-title, +html[data-theme="dark"] .wy-alert.wy-alert-danger .wy-alert-title { + background-color: #b9372b; +} + +html[data-theme="dark"] .wy-nav-top { + background-color: #0b152d; +} + +html[data-theme="dark"] .rst-content table.docutils thead, +html[data-theme="dark"] .rst-content table.field-list thead, +html[data-theme="dark"] .wy-table thead { + color: var(--dark-text-color); +} + +html[data-theme="dark"] + .rst-content + table.docutils:not(.field-list) + tr:nth-child(2n-1) + td, +html[data-theme="dark"] .wy-table-backed, +html[data-theme="dark"] html[data-theme="dark"] .wy-table-odd td, +html[data-theme="dark"] .wy-table-striped tr:nth-child(2n-1) td { + background-color: #181818; +} + +html[data-theme="dark"] .rst-content table.docutils td, +html[data-theme="dark"] .wy-table-bordered-all td, +html[data-theme="dark"].writer-html5 .rst-content table.docutils th, +html[data-theme="dark"] .rst-content table.docutils, +html[data-theme="dark"] .wy-table-bordered-all { + border-color: #262626; +} + +html[data-theme="dark"] .rst-content table.docutils caption, +html[data-theme="dark"] .rst-content table.field-list caption, +html[data-theme="dark"] .wy-table caption { + color: var(--dark-text-color); +} + +html[data-theme="dark"] .wy-menu-vertical li.toctree-l3.current > a, +html[data-theme="dark"] + .wy-menu-vertical + li.toctree-l3.current + li.toctree-l4 + > a { + background-color: #18181a; +} + +html[data-theme="dark"] .guilabel { + background-color: #343434; + border-color: #4d4d4d; +} diff --git a/docs/limboai-stable/_static/dark_mode_css/general.css b/docs/limboai-stable/_static/dark_mode_css/general.css new file mode 100644 index 0000000..aa614f8 --- /dev/null +++ b/docs/limboai-stable/_static/dark_mode_css/general.css @@ -0,0 +1,68 @@ +input[type='color'], +input[type='date'], +input[type='datetime-local'], +input[type='datetime'], +input[type='email'], +input[type='month'], +input[type='number'], +input[type='password'], +input[type='search'], +input[type='tel'], +input[type='text'], +input[type='time'], +input[type='url'], +input[type='week'] { + box-shadow: none; +} + +.theme-switcher { + border-radius: 50%; + position: fixed; + right: 1.6em; + bottom: 1.4em; + z-index: 3; + border: none; + height: 2.2em; + width: 2.2em; + background-color: #fcfcfc; + font-size: 20px; + -webkit-box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + box-shadow: 0px 3px 14px 4px rgba(0, 0, 0, 0.62); + color: #404040; + transition: all 0.3s ease-in-out; +} + +body, +.wy-nav-content-wrap, +.wy-nav-content, +.section, +.highlight, +.rst-content div[class^='highlight'], +.wy-nav-content a, +.btn-neutral, +.btn, +footer, +.wy-nav-side, +.wy-menu-vertical li, +.wy-menu-vertical a, +.wy-side-nav-search .wy-dropdown, +.wy-side-nav-search a, +.wy-side-nav-search input, +html.writer-html4 .rst-content dl:not(.docutils) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + > dt, +.rst-content code, +.rst-content tt, +html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list) > dt, +html.writer-html5 + .rst-content + dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) + dl:not(.field-list) + > dt, +code, +.rst-content code.xref, +.rst-content tt.xref { + transition: all 0.2s ease-in-out; +} diff --git a/docs/limboai-stable/_static/dark_mode_js/default_dark.js b/docs/limboai-stable/_static/dark_mode_js/default_dark.js new file mode 100644 index 0000000..ea63e07 --- /dev/null +++ b/docs/limboai-stable/_static/dark_mode_js/default_dark.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + } +}; + +loadTheme(); diff --git a/docs/limboai-stable/_static/dark_mode_js/default_light.js b/docs/limboai-stable/_static/dark_mode_js/default_light.js new file mode 100644 index 0000000..2b19f92 --- /dev/null +++ b/docs/limboai-stable/_static/dark_mode_js/default_light.js @@ -0,0 +1,13 @@ +const loadTheme = () => { + let theme = localStorage.getItem('theme'); + + if (theme !== null) { + if (theme === 'dark') + document.documentElement.setAttribute('data-theme', 'dark'); + } else { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + } +}; + +loadTheme(); diff --git a/docs/limboai-stable/_static/dark_mode_js/theme_switcher.js b/docs/limboai-stable/_static/dark_mode_js/theme_switcher.js new file mode 100644 index 0000000..8e26055 --- /dev/null +++ b/docs/limboai-stable/_static/dark_mode_js/theme_switcher.js @@ -0,0 +1,39 @@ +const createThemeSwitcher = () => { + let btn = document.createElement('BUTTON'); + btn.className = 'theme-switcher'; + btn.id = 'themeSwitcher'; + btn.innerHTML = + ''; + document.body.appendChild(btn); + + if (localStorage.getItem('theme') === 'dark') $('#themeMoon').hide(0); + else $('#themeSun').hide(0); +}; + +$(document).ready(() => { + createThemeSwitcher(); + $('#themeSwitcher').click(switchTheme); + + $('footer').html( + $('footer').html() + + 'Dark theme provided by MrDogeBro.' + ); +}); + +const switchTheme = () => { + if (localStorage.getItem('theme') === 'dark') { + localStorage.setItem('theme', 'light'); + document.documentElement.setAttribute('data-theme', 'light'); + + $('#themeSun').fadeOut(200, () => { + $('#themeMoon').fadeIn(200); + }); + } else { + localStorage.setItem('theme', 'dark'); + document.documentElement.setAttribute('data-theme', 'dark'); + + $('#themeMoon').fadeOut(200, () => { + $('#themeSun').fadeIn(200); + }); + } +}; diff --git a/docs/limboai-stable/_static/doctools.js b/docs/limboai-stable/_static/doctools.js new file mode 100644 index 0000000..807cdb1 --- /dev/null +++ b/docs/limboai-stable/_static/doctools.js @@ -0,0 +1,150 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})`, + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)), + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS + && !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) + return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/limboai-stable/_static/documentation_options.js b/docs/limboai-stable/_static/documentation_options.js new file mode 100644 index 0000000..611e524 --- /dev/null +++ b/docs/limboai-stable/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'singlehtml', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/limboai-stable/_static/english-stemmer.js b/docs/limboai-stable/_static/english-stemmer.js new file mode 100644 index 0000000..056760e --- /dev/null +++ b/docs/limboai-stable/_static/english-stemmer.js @@ -0,0 +1,1066 @@ +// Generated from english.sbl by Snowball 3.0.1 - https://snowballstem.org/ + +/**@constructor*/ +var EnglishStemmer = function() { + var base = new BaseStemmer(); + + /** @const */ var a_0 = [ + ["arsen", -1, -1], + ["commun", -1, -1], + ["emerg", -1, -1], + ["gener", -1, -1], + ["later", -1, -1], + ["organ", -1, -1], + ["past", -1, -1], + ["univers", -1, -1] + ]; + + /** @const */ var a_1 = [ + ["'", -1, 1], + ["'s'", 0, 1], + ["'s", -1, 1] + ]; + + /** @const */ var a_2 = [ + ["ied", -1, 2], + ["s", -1, 3], + ["ies", 1, 2], + ["sses", 1, 1], + ["ss", 1, -1], + ["us", 1, -1] + ]; + + /** @const */ var a_3 = [ + ["succ", -1, 1], + ["proc", -1, 1], + ["exc", -1, 1] + ]; + + /** @const */ var a_4 = [ + ["even", -1, 2], + ["cann", -1, 2], + ["inn", -1, 2], + ["earr", -1, 2], + ["herr", -1, 2], + ["out", -1, 2], + ["y", -1, 1] + ]; + + /** @const */ var a_5 = [ + ["", -1, -1], + ["ed", 0, 2], + ["eed", 1, 1], + ["ing", 0, 3], + ["edly", 0, 2], + ["eedly", 4, 1], + ["ingly", 0, 2] + ]; + + /** @const */ var a_6 = [ + ["", -1, 3], + ["bb", 0, 2], + ["dd", 0, 2], + ["ff", 0, 2], + ["gg", 0, 2], + ["bl", 0, 1], + ["mm", 0, 2], + ["nn", 0, 2], + ["pp", 0, 2], + ["rr", 0, 2], + ["at", 0, 1], + ["tt", 0, 2], + ["iz", 0, 1] + ]; + + /** @const */ var a_7 = [ + ["anci", -1, 3], + ["enci", -1, 2], + ["ogi", -1, 14], + ["li", -1, 16], + ["bli", 3, 12], + ["abli", 4, 4], + ["alli", 3, 8], + ["fulli", 3, 9], + ["lessli", 3, 15], + ["ousli", 3, 10], + ["entli", 3, 5], + ["aliti", -1, 8], + ["biliti", -1, 12], + ["iviti", -1, 11], + ["tional", -1, 1], + ["ational", 14, 7], + ["alism", -1, 8], + ["ation", -1, 7], + ["ization", 17, 6], + ["izer", -1, 6], + ["ator", -1, 7], + ["iveness", -1, 11], + ["fulness", -1, 9], + ["ousness", -1, 10], + ["ogist", -1, 13] + ]; + + /** @const */ var a_8 = [ + ["icate", -1, 4], + ["ative", -1, 6], + ["alize", -1, 3], + ["iciti", -1, 4], + ["ical", -1, 4], + ["tional", -1, 1], + ["ational", 5, 2], + ["ful", -1, 5], + ["ness", -1, 5] + ]; + + /** @const */ var a_9 = [ + ["ic", -1, 1], + ["ance", -1, 1], + ["ence", -1, 1], + ["able", -1, 1], + ["ible", -1, 1], + ["ate", -1, 1], + ["ive", -1, 1], + ["ize", -1, 1], + ["iti", -1, 1], + ["al", -1, 1], + ["ism", -1, 1], + ["ion", -1, 2], + ["er", -1, 1], + ["ous", -1, 1], + ["ant", -1, 1], + ["ent", -1, 1], + ["ment", 15, 1], + ["ement", 16, 1] + ]; + + /** @const */ var a_10 = [ + ["e", -1, 1], + ["l", -1, 2] + ]; + + /** @const */ var a_11 = [ + ["andes", -1, -1], + ["atlas", -1, -1], + ["bias", -1, -1], + ["cosmos", -1, -1], + ["early", -1, 5], + ["gently", -1, 3], + ["howe", -1, -1], + ["idly", -1, 2], + ["news", -1, -1], + ["only", -1, 6], + ["singly", -1, 7], + ["skies", -1, 1], + ["sky", -1, -1], + ["ugly", -1, 4] + ]; + + /** @const */ var /** Array */ g_aeo = [17, 64]; + + /** @const */ var /** Array */ g_v = [17, 65, 16, 1]; + + /** @const */ var /** Array */ g_v_WXY = [1, 17, 65, 208, 1]; + + /** @const */ var /** Array */ g_valid_LI = [55, 141, 2]; + + var /** boolean */ B_Y_found = false; + var /** number */ I_p2 = 0; + var /** number */ I_p1 = 0; + + + /** @return {boolean} */ + function r_prelude() { + B_Y_found = false; + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + base.bra = base.cursor; + if (!(base.eq_s("'"))) + { + break lab0; + } + base.ket = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + base.cursor = v_1; + /** @const */ var /** number */ v_2 = base.cursor; + lab1: { + base.bra = base.cursor; + if (!(base.eq_s("y"))) + { + break lab1; + } + base.ket = base.cursor; + if (!base.slice_from("Y")) + { + return false; + } + B_Y_found = true; + } + base.cursor = v_2; + /** @const */ var /** number */ v_3 = base.cursor; + lab2: { + while(true) + { + /** @const */ var /** number */ v_4 = base.cursor; + lab3: { + golab4: while(true) + { + /** @const */ var /** number */ v_5 = base.cursor; + lab5: { + if (!(base.in_grouping(g_v, 97, 121))) + { + break lab5; + } + base.bra = base.cursor; + if (!(base.eq_s("y"))) + { + break lab5; + } + base.ket = base.cursor; + base.cursor = v_5; + break golab4; + } + base.cursor = v_5; + if (base.cursor >= base.limit) + { + break lab3; + } + base.cursor++; + } + if (!base.slice_from("Y")) + { + return false; + } + B_Y_found = true; + continue; + } + base.cursor = v_4; + break; + } + } + base.cursor = v_3; + return true; + }; + + /** @return {boolean} */ + function r_mark_regions() { + I_p1 = base.limit; + I_p2 = base.limit; + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + lab1: { + /** @const */ var /** number */ v_2 = base.cursor; + lab2: { + if (base.find_among(a_0) == 0) + { + break lab2; + } + break lab1; + } + base.cursor = v_2; + if (!base.go_out_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + if (!base.go_in_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + } + I_p1 = base.cursor; + if (!base.go_out_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + if (!base.go_in_grouping(g_v, 97, 121)) + { + break lab0; + } + base.cursor++; + I_p2 = base.cursor; + } + base.cursor = v_1; + return true; + }; + + /** @return {boolean} */ + function r_shortv() { + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.out_grouping_b(g_v_WXY, 89, 121))) + { + break lab1; + } + if (!(base.in_grouping_b(g_v, 97, 121))) + { + break lab1; + } + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + lab2: { + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab2; + } + if (!(base.in_grouping_b(g_v, 97, 121))) + { + break lab2; + } + if (base.cursor > base.limit_backward) + { + break lab2; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("past"))) + { + return false; + } + } + return true; + }; + + /** @return {boolean} */ + function r_R1() { + return I_p1 <= base.cursor; + }; + + /** @return {boolean} */ + function r_R2() { + return I_p2 <= base.cursor; + }; + + /** @return {boolean} */ + function r_Step_1a() { + var /** number */ among_var; + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab0: { + base.ket = base.cursor; + if (base.find_among_b(a_1) == 0) + { + base.cursor = base.limit - v_1; + break lab0; + } + base.bra = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + base.ket = base.cursor; + among_var = base.find_among_b(a_2); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + switch (among_var) { + case 1: + if (!base.slice_from("ss")) + { + return false; + } + break; + case 2: + lab1: { + /** @const */ var /** number */ v_2 = base.limit - base.cursor; + lab2: { + { + /** @const */ var /** number */ c1 = base.cursor - 2; + if (c1 < base.limit_backward) + { + break lab2; + } + base.cursor = c1; + } + if (!base.slice_from("i")) + { + return false; + } + break lab1; + } + base.cursor = base.limit - v_2; + if (!base.slice_from("ie")) + { + return false; + } + } + break; + case 3: + if (base.cursor <= base.limit_backward) + { + return false; + } + base.cursor--; + if (!base.go_out_grouping_b(g_v, 97, 121)) + { + return false; + } + base.cursor--; + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_1b() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_5); + base.bra = base.cursor; + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + switch (among_var) { + case 1: + /** @const */ var /** number */ v_2 = base.limit - base.cursor; + lab2: { + lab3: { + /** @const */ var /** number */ v_3 = base.limit - base.cursor; + lab4: { + if (base.find_among_b(a_3) == 0) + { + break lab4; + } + if (base.cursor > base.limit_backward) + { + break lab4; + } + break lab3; + } + base.cursor = base.limit - v_3; + if (!r_R1()) + { + break lab2; + } + if (!base.slice_from("ee")) + { + return false; + } + } + } + base.cursor = base.limit - v_2; + break; + case 2: + break lab1; + case 3: + among_var = base.find_among_b(a_4); + if (among_var == 0) + { + break lab1; + } + switch (among_var) { + case 1: + /** @const */ var /** number */ v_4 = base.limit - base.cursor; + if (!(base.out_grouping_b(g_v, 97, 121))) + { + break lab1; + } + if (base.cursor > base.limit_backward) + { + break lab1; + } + base.cursor = base.limit - v_4; + base.bra = base.cursor; + if (!base.slice_from("ie")) + { + return false; + } + break; + case 2: + if (base.cursor > base.limit_backward) + { + break lab1; + } + break; + } + break; + } + break lab0; + } + base.cursor = base.limit - v_1; + /** @const */ var /** number */ v_5 = base.limit - base.cursor; + if (!base.go_out_grouping_b(g_v, 97, 121)) + { + return false; + } + base.cursor--; + base.cursor = base.limit - v_5; + if (!base.slice_del()) + { + return false; + } + base.ket = base.cursor; + base.bra = base.cursor; + /** @const */ var /** number */ v_6 = base.limit - base.cursor; + among_var = base.find_among_b(a_6); + switch (among_var) { + case 1: + if (!base.slice_from("e")) + { + return false; + } + return false; + case 2: + { + /** @const */ var /** number */ v_7 = base.limit - base.cursor; + lab5: { + if (!(base.in_grouping_b(g_aeo, 97, 111))) + { + break lab5; + } + if (base.cursor > base.limit_backward) + { + break lab5; + } + return false; + } + base.cursor = base.limit - v_7; + } + break; + case 3: + if (base.cursor != I_p1) + { + return false; + } + /** @const */ var /** number */ v_8 = base.limit - base.cursor; + if (!r_shortv()) + { + return false; + } + base.cursor = base.limit - v_8; + if (!base.slice_from("e")) + { + return false; + } + return false; + } + base.cursor = base.limit - v_6; + base.ket = base.cursor; + if (base.cursor <= base.limit_backward) + { + return false; + } + base.cursor--; + base.bra = base.cursor; + if (!base.slice_del()) + { + return false; + } + } + return true; + }; + + /** @return {boolean} */ + function r_Step_1c() { + base.ket = base.cursor; + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.eq_s_b("y"))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("Y"))) + { + return false; + } + } + base.bra = base.cursor; + if (!(base.out_grouping_b(g_v, 97, 121))) + { + return false; + } + lab2: { + if (base.cursor > base.limit_backward) + { + break lab2; + } + return false; + } + if (!base.slice_from("i")) + { + return false; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_2() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_7); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R1()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("tion")) + { + return false; + } + break; + case 2: + if (!base.slice_from("ence")) + { + return false; + } + break; + case 3: + if (!base.slice_from("ance")) + { + return false; + } + break; + case 4: + if (!base.slice_from("able")) + { + return false; + } + break; + case 5: + if (!base.slice_from("ent")) + { + return false; + } + break; + case 6: + if (!base.slice_from("ize")) + { + return false; + } + break; + case 7: + if (!base.slice_from("ate")) + { + return false; + } + break; + case 8: + if (!base.slice_from("al")) + { + return false; + } + break; + case 9: + if (!base.slice_from("ful")) + { + return false; + } + break; + case 10: + if (!base.slice_from("ous")) + { + return false; + } + break; + case 11: + if (!base.slice_from("ive")) + { + return false; + } + break; + case 12: + if (!base.slice_from("ble")) + { + return false; + } + break; + case 13: + if (!base.slice_from("og")) + { + return false; + } + break; + case 14: + if (!(base.eq_s_b("l"))) + { + return false; + } + if (!base.slice_from("og")) + { + return false; + } + break; + case 15: + if (!base.slice_from("less")) + { + return false; + } + break; + case 16: + if (!(base.in_grouping_b(g_valid_LI, 99, 116))) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_3() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_8); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R1()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("tion")) + { + return false; + } + break; + case 2: + if (!base.slice_from("ate")) + { + return false; + } + break; + case 3: + if (!base.slice_from("al")) + { + return false; + } + break; + case 4: + if (!base.slice_from("ic")) + { + return false; + } + break; + case 5: + if (!base.slice_del()) + { + return false; + } + break; + case 6: + if (!r_R2()) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_4() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_9); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + if (!r_R2()) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_del()) + { + return false; + } + break; + case 2: + lab0: { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab1: { + if (!(base.eq_s_b("s"))) + { + break lab1; + } + break lab0; + } + base.cursor = base.limit - v_1; + if (!(base.eq_s_b("t"))) + { + return false; + } + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_Step_5() { + var /** number */ among_var; + base.ket = base.cursor; + among_var = base.find_among_b(a_10); + if (among_var == 0) + { + return false; + } + base.bra = base.cursor; + switch (among_var) { + case 1: + lab0: { + lab1: { + if (!r_R2()) + { + break lab1; + } + break lab0; + } + if (!r_R1()) + { + return false; + } + { + /** @const */ var /** number */ v_1 = base.limit - base.cursor; + lab2: { + if (!r_shortv()) + { + break lab2; + } + return false; + } + base.cursor = base.limit - v_1; + } + } + if (!base.slice_del()) + { + return false; + } + break; + case 2: + if (!r_R2()) + { + return false; + } + if (!(base.eq_s_b("l"))) + { + return false; + } + if (!base.slice_del()) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_exception1() { + var /** number */ among_var; + base.bra = base.cursor; + among_var = base.find_among(a_11); + if (among_var == 0) + { + return false; + } + base.ket = base.cursor; + if (base.cursor < base.limit) + { + return false; + } + switch (among_var) { + case 1: + if (!base.slice_from("sky")) + { + return false; + } + break; + case 2: + if (!base.slice_from("idl")) + { + return false; + } + break; + case 3: + if (!base.slice_from("gentl")) + { + return false; + } + break; + case 4: + if (!base.slice_from("ugli")) + { + return false; + } + break; + case 5: + if (!base.slice_from("earli")) + { + return false; + } + break; + case 6: + if (!base.slice_from("onli")) + { + return false; + } + break; + case 7: + if (!base.slice_from("singl")) + { + return false; + } + break; + } + return true; + }; + + /** @return {boolean} */ + function r_postlude() { + if (!B_Y_found) + { + return false; + } + while(true) + { + /** @const */ var /** number */ v_1 = base.cursor; + lab0: { + golab1: while(true) + { + /** @const */ var /** number */ v_2 = base.cursor; + lab2: { + base.bra = base.cursor; + if (!(base.eq_s("Y"))) + { + break lab2; + } + base.ket = base.cursor; + base.cursor = v_2; + break golab1; + } + base.cursor = v_2; + if (base.cursor >= base.limit) + { + break lab0; + } + base.cursor++; + } + if (!base.slice_from("y")) + { + return false; + } + continue; + } + base.cursor = v_1; + break; + } + return true; + }; + + this.stem = /** @return {boolean} */ function() { + lab0: { + /** @const */ var /** number */ v_1 = base.cursor; + lab1: { + if (!r_exception1()) + { + break lab1; + } + break lab0; + } + base.cursor = v_1; + lab2: { + { + /** @const */ var /** number */ v_2 = base.cursor; + lab3: { + { + /** @const */ var /** number */ c1 = base.cursor + 3; + if (c1 > base.limit) + { + break lab3; + } + base.cursor = c1; + } + break lab2; + } + base.cursor = v_2; + } + break lab0; + } + base.cursor = v_1; + r_prelude(); + r_mark_regions(); + base.limit_backward = base.cursor; base.cursor = base.limit; + /** @const */ var /** number */ v_3 = base.limit - base.cursor; + r_Step_1a(); + base.cursor = base.limit - v_3; + /** @const */ var /** number */ v_4 = base.limit - base.cursor; + r_Step_1b(); + base.cursor = base.limit - v_4; + /** @const */ var /** number */ v_5 = base.limit - base.cursor; + r_Step_1c(); + base.cursor = base.limit - v_5; + /** @const */ var /** number */ v_6 = base.limit - base.cursor; + r_Step_2(); + base.cursor = base.limit - v_6; + /** @const */ var /** number */ v_7 = base.limit - base.cursor; + r_Step_3(); + base.cursor = base.limit - v_7; + /** @const */ var /** number */ v_8 = base.limit - base.cursor; + r_Step_4(); + base.cursor = base.limit - v_8; + /** @const */ var /** number */ v_9 = base.limit - base.cursor; + r_Step_5(); + base.cursor = base.limit - v_9; + base.cursor = base.limit_backward; + /** @const */ var /** number */ v_10 = base.cursor; + r_postlude(); + base.cursor = v_10; + } + return true; + }; + + /**@return{string}*/ + this['stemWord'] = function(/**string*/word) { + base.setCurrent(word); + this.stem(); + return base.getCurrent(); + }; +}; diff --git a/docs/limboai-stable/_static/file.png b/docs/limboai-stable/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/docs/limboai-stable/_static/file.png differ diff --git a/docs/limboai-stable/_static/file.png.import b/docs/limboai-stable/_static/file.png.import new file mode 100644 index 0000000..73e57f5 --- /dev/null +++ b/docs/limboai-stable/_static/file.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c0bnk4tmmieyn" +path="res://.godot/imported/file.png-a6858b72fa8dc715234ebcf55040b6cf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://docs/limboai-stable/_static/file.png" +dest_files=["res://.godot/imported/file.png-a6858b72fa8dc715234ebcf55040b6cf.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 diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bold.eot b/docs/limboai-stable/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 0000000..3361183 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bold.eot differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf b/docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 0000000..29f691d Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf.import b/docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf.import new file mode 100644 index 0000000..bf74f0c --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://div7pdy1ifsbd" +path="res://.godot/imported/lato-bold.ttf-bf21764b8eeda88e1e83fea57cefd94e.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-bold.ttf" +dest_files=["res://.godot/imported/lato-bold.ttf-bf21764b8eeda88e1e83fea57cefd94e.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/fonts/Lato/lato-bold.woff b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff.import b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff.import new file mode 100644 index 0000000..200dcee --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://blhqbw87l3u8u" +path="res://.godot/imported/lato-bold.woff-33369507c2f690e22366de4f6a251524.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-bold.woff" +dest_files=["res://.godot/imported/lato-bold.woff-33369507c2f690e22366de4f6a251524.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/fonts/Lato/lato-bold.woff2 b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2.import b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2.import new file mode 100644 index 0000000..15b9fa2 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://vi7a272rdhp8" +path="res://.godot/imported/lato-bold.woff2-39f290ca557aa117ff7f1d9c7978aa84.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-bold.woff2" +dest_files=["res://.godot/imported/lato-bold.woff2-39f290ca557aa117ff7f1d9c7978aa84.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/fonts/Lato/lato-bolditalic.eot b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 0000000..3d41549 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 0000000..f402040 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf.import b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf.import new file mode 100644 index 0000000..bd67ff8 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://clonl1cli6ssk" +path="res://.godot/imported/lato-bolditalic.ttf-df5d41dba6e526912a6a9eb3711eeca9.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.ttf" +dest_files=["res://.godot/imported/lato-bolditalic.ttf-df5d41dba6e526912a6a9eb3711eeca9.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/fonts/Lato/lato-bolditalic.woff b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff.import b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff.import new file mode 100644 index 0000000..a3f5824 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bsv8jvoxlbtn" +path="res://.godot/imported/lato-bolditalic.woff-a20fb836ed63f15bd27092fdca7a0aac.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff" +dest_files=["res://.godot/imported/lato-bolditalic.woff-a20fb836ed63f15bd27092fdca7a0aac.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/fonts/Lato/lato-bolditalic.woff2 b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2.import b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2.import new file mode 100644 index 0000000..5a3214d --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bgd8i3ajdfg2c" +path="res://.godot/imported/lato-bolditalic.woff2-fb6725ecc33dd8d38677f3cee3226975.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-bolditalic.woff2" +dest_files=["res://.godot/imported/lato-bolditalic.woff2-fb6725ecc33dd8d38677f3cee3226975.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/fonts/Lato/lato-italic.eot b/docs/limboai-stable/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 0000000..3f82642 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-italic.eot differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf b/docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 0000000..b4bfc9b Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf.import b/docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf.import new file mode 100644 index 0000000..01502d0 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dlfgrxw743w0" +path="res://.godot/imported/lato-italic.ttf-507e0ee5af89964d54cdba3640192645.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-italic.ttf" +dest_files=["res://.godot/imported/lato-italic.ttf-507e0ee5af89964d54cdba3640192645.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/fonts/Lato/lato-italic.woff b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff.import b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff.import new file mode 100644 index 0000000..d9e7911 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://buhk6j0sxsom2" +path="res://.godot/imported/lato-italic.woff-4a977a1d17fb742f3f41bd6eafea3338.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-italic.woff" +dest_files=["res://.godot/imported/lato-italic.woff-4a977a1d17fb742f3f41bd6eafea3338.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/fonts/Lato/lato-italic.woff2 b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2.import b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2.import new file mode 100644 index 0000000..fd2abf3 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cx00jquowyatt" +path="res://.godot/imported/lato-italic.woff2-844bdf4510cfe71bb45b0f1e0ed93729.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-italic.woff2" +dest_files=["res://.godot/imported/lato-italic.woff2-844bdf4510cfe71bb45b0f1e0ed93729.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/fonts/Lato/lato-regular.eot b/docs/limboai-stable/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 0000000..11e3f2a Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-regular.eot differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf b/docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 0000000..74decd9 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf.import b/docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf.import new file mode 100644 index 0000000..3b2da52 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://b7wu2nwax61m8" +path="res://.godot/imported/lato-regular.ttf-176ef733ea6041725fdff01cd9f6890b.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-regular.ttf" +dest_files=["res://.godot/imported/lato-regular.ttf-176ef733ea6041725fdff01cd9f6890b.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/fonts/Lato/lato-regular.woff b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff.import b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff.import new file mode 100644 index 0000000..ef219ea --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://cyk6d6eble8b3" +path="res://.godot/imported/lato-regular.woff-5475db433332cc6974cca68a2d54834f.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-regular.woff" +dest_files=["res://.godot/imported/lato-regular.woff-5475db433332cc6974cca68a2d54834f.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/fonts/Lato/lato-regular.woff2 b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2.import b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2.import new file mode 100644 index 0000000..04d7491 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dg3aqlaqpc3as" +path="res://.godot/imported/lato-regular.woff2-93b5b480888caaea9084ab53d0dd9f6e.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/Lato/lato-regular.woff2" +dest_files=["res://.godot/imported/lato-regular.woff2-93b5b480888caaea9084ab53d0dd9f6e.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/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 0000000..79dc8ef Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 0000000..df5d1df Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf.import b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf.import new file mode 100644 index 0000000..d7e0678 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dgubwf3sebys" +path="res://.godot/imported/roboto-slab-v7-bold.ttf-a75075e0f5b68bd2df2ea93040b413ae.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf" +dest_files=["res://.godot/imported/roboto-slab-v7-bold.ttf-a75075e0f5b68bd2df2ea93040b413ae.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/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff.import b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff.import new file mode 100644 index 0000000..4d02fb9 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://ehdhn0csaf7h" +path="res://.godot/imported/roboto-slab-v7-bold.woff-750edcd1a705410b88ddd06967095296.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff" +dest_files=["res://.godot/imported/roboto-slab-v7-bold.woff-750edcd1a705410b88ddd06967095296.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/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2.import b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2.import new file mode 100644 index 0000000..09488c4 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://ckaehr78r2ixx" +path="res://.godot/imported/roboto-slab-v7-bold.woff2-650afac33d0f5696b4f4a842a48e664f.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2" +dest_files=["res://.godot/imported/roboto-slab-v7-bold.woff2-650afac33d0f5696b4f4a842a48e664f.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/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 0000000..2f7ca78 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 0000000..eb52a79 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf.import b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf.import new file mode 100644 index 0000000..6f8c5bb --- /dev/null +++ b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://70u8rveighqj" +path="res://.godot/imported/roboto-slab-v7-regular.ttf-e7184fb2a6b02257d3577d472c7b8b18.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf" +dest_files=["res://.godot/imported/roboto-slab-v7-regular.ttf-e7184fb2a6b02257d3577d472c7b8b18.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/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff.import b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff.import new file mode 100644 index 0000000..10b7c05 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://c41k5wus00c2" +path="res://.godot/imported/roboto-slab-v7-regular.woff-5133151ca52391eed57e3c8b13f61563.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff" +dest_files=["res://.godot/imported/roboto-slab-v7-regular.woff-5133151ca52391eed57e3c8b13f61563.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/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2.import b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2.import new file mode 100644 index 0000000..f6636d5 --- /dev/null +++ b/docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://b7fykwufpd7tg" +path="res://.godot/imported/roboto-slab-v7-regular.woff2-77d572fc65d20cea2b0ff40ec47758d8.fontdata" + +[deps] + +source_file="res://docs/limboai-stable/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2" +dest_files=["res://.godot/imported/roboto-slab-v7-regular.woff2-77d572fc65d20cea2b0ff40ec47758d8.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/jquery.js b/docs/limboai-stable/_static/jquery.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/docs/limboai-stable/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t a.language.name.localeCompare(b.language.name)); + + const languagesHTML = ` +
+
Languages
+ ${languages + .map( + (translation) => ` +
+ ${translation.language.code} +
+ `, + ) + .join("\n")} +
+ `; + return languagesHTML; + } + + function renderVersions(config) { + if (!config.versions.active.length) { + return ""; + } + const versionsHTML = ` +
+
Versions
+ ${config.versions.active + .map( + (version) => ` +
+ ${version.slug} +
+ `, + ) + .join("\n")} +
+ `; + return versionsHTML; + } + + function renderDownloads(config) { + if (!Object.keys(config.versions.current.downloads).length) { + return ""; + } + const downloadsNameDisplay = { + pdf: "PDF", + epub: "Epub", + htmlzip: "HTML", + }; + + const downloadsHTML = ` +
+
Downloads
+ ${Object.entries(config.versions.current.downloads) + .map( + ([name, url]) => ` +
+ ${downloadsNameDisplay[name]} +
+ `, + ) + .join("\n")} +
+ `; + return downloadsHTML; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const flyout = ` +
+ + Read the Docs + v: ${config.versions.current.slug} + + +
+
+ ${renderLanguages(config)} + ${renderVersions(config)} + ${renderDownloads(config)} +
+
On Read the Docs
+
+ Project Home +
+
+ Builds +
+
+ Downloads +
+
+
+
Search
+
+
+ +
+
+
+
+ + Hosted by Read the Docs + +
+
+ `; + + // Inject the generated flyout into the body HTML element. + document.body.insertAdjacentHTML("beforeend", flyout); + + // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout. + document + .querySelector("#flyout-search-form") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); + }) +} + +if (themeLanguageSelector || themeVersionSelector) { + function onSelectorSwitch(event) { + const option = event.target.selectedIndex; + const item = event.target.options[option]; + window.location.href = item.dataset.url; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const versionSwitch = document.querySelector( + "div.switch-menus > div.version-switch", + ); + if (themeVersionSelector) { + let versions = config.versions.active; + if (config.versions.current.hidden || config.versions.current.type === "external") { + versions.unshift(config.versions.current); + } + const versionSelect = ` + + `; + + versionSwitch.innerHTML = versionSelect; + versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + + const languageSwitch = document.querySelector( + "div.switch-menus > div.language-switch", + ); + + if (themeLanguageSelector) { + if (config.projects.translations.length) { + // Add the current language to the options on the selector + let languages = config.projects.translations.concat( + config.projects.current, + ); + languages = languages.sort((a, b) => + a.language.name.localeCompare(b.language.name), + ); + + const languageSelect = ` + + `; + + languageSwitch.innerHTML = languageSelect; + languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + else { + languageSwitch.remove(); + } + } + }); +} + +document.addEventListener("readthedocs-addons-data-ready", function (event) { + // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav. + document + .querySelector("[role='search'] input") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); +}); \ No newline at end of file diff --git a/docs/limboai-stable/_static/language_data.js b/docs/limboai-stable/_static/language_data.js new file mode 100644 index 0000000..5776786 --- /dev/null +++ b/docs/limboai-stable/_static/language_data.js @@ -0,0 +1,13 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the set of stopwords, stemmer, scorer and splitter. + */ + +const stopwords = new Set(["a", "about", "above", "after", "again", "against", "all", "am", "an", "and", "any", "are", "aren't", "as", "at", "be", "because", "been", "before", "being", "below", "between", "both", "but", "by", "can't", "cannot", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", "doing", "don't", "down", "during", "each", "few", "for", "from", "further", "had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "he's", "her", "here", "here's", "hers", "herself", "him", "himself", "his", "how", "how's", "i", "i'd", "i'll", "i'm", "i've", "if", "in", "into", "is", "isn't", "it", "it's", "its", "itself", "let's", "me", "more", "most", "mustn't", "my", "myself", "no", "nor", "not", "of", "off", "on", "once", "only", "or", "other", "ought", "our", "ours", "ourselves", "out", "over", "own", "same", "shan't", "she", "she'd", "she'll", "she's", "should", "shouldn't", "so", "some", "such", "than", "that", "that's", "the", "their", "theirs", "them", "themselves", "then", "there", "there's", "these", "they", "they'd", "they'll", "they're", "they've", "this", "those", "through", "to", "too", "under", "until", "up", "very", "was", "wasn't", "we", "we'd", "we'll", "we're", "we've", "were", "weren't", "what", "what's", "when", "when's", "where", "where's", "which", "while", "who", "who's", "whom", "why", "why's", "with", "won't", "would", "wouldn't", "you", "you'd", "you'll", "you're", "you've", "your", "yours", "yourself", "yourselves"]); +window.stopwords = stopwords; // Export to global scope + + +/* Non-minified versions are copied as separate JavaScript files, if available */ +BaseStemmer=function(){this.current="",this.cursor=0,this.limit=0,this.limit_backward=0,this.bra=0,this.ket=0,this.setCurrent=function(t){this.current=t,this.cursor=0,this.limit=this.current.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},this.getCurrent=function(){return this.current},this.copy_from=function(t){this.current=t.current,this.cursor=t.cursor,this.limit=t.limit,this.limit_backward=t.limit_backward,this.bra=t.bra,this.ket=t.ket},this.in_grouping=function(t,r,i){return!(this.cursor>=this.limit||i<(i=this.current.charCodeAt(this.cursor))||i>>3]&1<<(7&i))||(this.cursor++,0))},this.go_in_grouping=function(t,r,i){for(;this.cursor>>3]&1<<(7&s)))return!0;this.cursor++}return!1},this.in_grouping_b=function(t,r,i){return!(this.cursor<=this.limit_backward||i<(i=this.current.charCodeAt(this.cursor-1))||i>>3]&1<<(7&i))||(this.cursor--,0))},this.go_in_grouping_b=function(t,r,i){for(;this.cursor>this.limit_backward;){var s=this.current.charCodeAt(this.cursor-1);if(i>>3]&1<<(7&s)))return!0;this.cursor--}return!1},this.out_grouping=function(t,r,i){return!(this.cursor>=this.limit)&&(i<(i=this.current.charCodeAt(this.cursor))||i>>3]&1<<(7&i)))&&(this.cursor++,!0)},this.go_out_grouping=function(t,r,i){for(;this.cursor>>3]&1<<(7&s)))return!0;this.cursor++}return!1},this.out_grouping_b=function(t,r,i){return!(this.cursor<=this.limit_backward)&&(i<(i=this.current.charCodeAt(this.cursor-1))||i>>3]&1<<(7&i)))&&(this.cursor--,!0)},this.go_out_grouping_b=function(t,r,i){for(;this.cursor>this.limit_backward;){var s=this.current.charCodeAt(this.cursor-1);if(s<=i&&r<=s&&0!=(t[(s-=r)>>>3]&1<<(7&s)))return!0;this.cursor--}return!1},this.eq_s=function(t){return!(this.limit-this.cursor>>1),o=0,a=e=(l=t[r])[0].length){if(this.cursor=s+l[0].length,l.length<4)return l[2];var g=l[3](this);if(this.cursor=s+l[0].length,g)return l[2]}}while(0<=(r=l[1]));return 0},this.find_among_b=function(t){for(var r=0,i=t.length,s=this.cursor,h=this.limit_backward,e=0,n=0,c=!1;;){for(var u,o=r+(i-r>>1),a=0,l=e=(u=t[r])[0].length){if(this.cursor=s-u[0].length,u.length<4)return u[2];var g=u[3](this);if(this.cursor=s-u[0].length,g)return u[2]}}while(0<=(r=u[1]));return 0},this.replace_s=function(t,r,i){var s=i.length-(r-t);return this.current=this.current.slice(0,t)+i+this.current.slice(r),this.limit+=s,this.cursor>=r?this.cursor+=s:this.cursor>t&&(this.cursor=t),s},this.slice_check=function(){return!(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>this.current.length)},this.slice_from=function(t){var r=!1;return this.slice_check()&&(this.replace_s(this.bra,this.ket,t),r=!0),r},this.slice_del=function(){return this.slice_from("")},this.insert=function(t,r,i){r=this.replace_s(t,r,i);t<=this.bra&&(this.bra+=r),t<=this.ket&&(this.ket+=r)},this.slice_to=function(){var t="";return t=this.slice_check()?this.current.slice(this.bra,this.ket):t},this.assign_to=function(){return this.current.slice(0,this.limit)}}; +var EnglishStemmer=function(){var a=new BaseStemmer,c=[["arsen",-1,-1],["commun",-1,-1],["emerg",-1,-1],["gener",-1,-1],["later",-1,-1],["organ",-1,-1],["past",-1,-1],["univers",-1,-1]],o=[["'",-1,1],["'s'",0,1],["'s",-1,1]],u=[["ied",-1,2],["s",-1,3],["ies",1,2],["sses",1,1],["ss",1,-1],["us",1,-1]],t=[["succ",-1,1],["proc",-1,1],["exc",-1,1]],l=[["even",-1,2],["cann",-1,2],["inn",-1,2],["earr",-1,2],["herr",-1,2],["out",-1,2],["y",-1,1]],n=[["",-1,-1],["ed",0,2],["eed",1,1],["ing",0,3],["edly",0,2],["eedly",4,1],["ingly",0,2]],f=[["",-1,3],["bb",0,2],["dd",0,2],["ff",0,2],["gg",0,2],["bl",0,1],["mm",0,2],["nn",0,2],["pp",0,2],["rr",0,2],["at",0,1],["tt",0,2],["iz",0,1]],_=[["anci",-1,3],["enci",-1,2],["ogi",-1,14],["li",-1,16],["bli",3,12],["abli",4,4],["alli",3,8],["fulli",3,9],["lessli",3,15],["ousli",3,10],["entli",3,5],["aliti",-1,8],["biliti",-1,12],["iviti",-1,11],["tional",-1,1],["ational",14,7],["alism",-1,8],["ation",-1,7],["ization",17,6],["izer",-1,6],["ator",-1,7],["iveness",-1,11],["fulness",-1,9],["ousness",-1,10],["ogist",-1,13]],m=[["icate",-1,4],["ative",-1,6],["alize",-1,3],["iciti",-1,4],["ical",-1,4],["tional",-1,1],["ational",5,2],["ful",-1,5],["ness",-1,5]],b=[["ic",-1,1],["ance",-1,1],["ence",-1,1],["able",-1,1],["ible",-1,1],["ate",-1,1],["ive",-1,1],["ize",-1,1],["iti",-1,1],["al",-1,1],["ism",-1,1],["ion",-1,2],["er",-1,1],["ous",-1,1],["ant",-1,1],["ent",-1,1],["ment",15,1],["ement",16,1]],k=[["e",-1,1],["l",-1,2]],g=[["andes",-1,-1],["atlas",-1,-1],["bias",-1,-1],["cosmos",-1,-1],["early",-1,5],["gently",-1,3],["howe",-1,-1],["idly",-1,2],["news",-1,-1],["only",-1,6],["singly",-1,7],["skies",-1,1],["sky",-1,-1],["ugly",-1,4]],d=[17,64],v=[17,65,16,1],i=[1,17,65,208,1],w=[55,141,2],p=!1,y=0,h=0;function q(){var r=a.limit-a.cursor;return!!(a.out_grouping_b(i,89,121)&&a.in_grouping_b(v,97,121)&&a.out_grouping_b(v,97,121)||(a.cursor=a.limit-r,a.out_grouping_b(v,97,121)&&a.in_grouping_b(v,97,121)&&!(a.cursor>a.limit_backward))||(a.cursor=a.limit-r,a.eq_s_b("past")))}function z(){return h<=a.cursor}function Y(){return y<=a.cursor}this.stem=function(){var r=a.cursor;if(!(()=>{var r;if(a.bra=a.cursor,0!=(r=a.find_among(g))&&(a.ket=a.cursor,!(a.cursora.limit)a.cursor=i;else{a.cursor=e,a.cursor=r,(()=>{p=!1;var r=a.cursor;if(a.bra=a.cursor,!a.eq_s("'")||(a.ket=a.cursor,a.slice_del())){a.cursor=r;r=a.cursor;if(a.bra=a.cursor,a.eq_s("y")){if(a.ket=a.cursor,!a.slice_from("Y"))return;p=!0}a.cursor=r;for(r=a.cursor;;){var i=a.cursor;r:{for(;;){var e=a.cursor;if(a.in_grouping(v,97,121)&&(a.bra=a.cursor,a.eq_s("y"))){a.ket=a.cursor,a.cursor=e;break}if(a.cursor=e,a.cursor>=a.limit)break r;a.cursor++}if(!a.slice_from("Y"))return;p=!0;continue}a.cursor=i;break}a.cursor=r}})(),h=a.limit,y=a.limit;i=a.cursor;r:{var s=a.cursor;if(0==a.find_among(c)){if(a.cursor=s,!a.go_out_grouping(v,97,121))break r;if(a.cursor++,!a.go_in_grouping(v,97,121))break r;a.cursor++}h=a.cursor,a.go_out_grouping(v,97,121)&&(a.cursor++,a.go_in_grouping(v,97,121))&&(a.cursor++,y=a.cursor)}a.cursor=i,a.limit_backward=a.cursor,a.cursor=a.limit;var e=a.limit-a.cursor,r=((()=>{var r=a.limit-a.cursor;if(a.ket=a.cursor,0==a.find_among_b(o))a.cursor=a.limit-r;else if(a.bra=a.cursor,!a.slice_del())return;if(a.ket=a.cursor,0!=(r=a.find_among_b(u)))switch(a.bra=a.cursor,r){case 1:if(a.slice_from("ss"))break;return;case 2:r:{var i=a.limit-a.cursor,e=a.cursor-2;if(!(e{a.ket=a.cursor,o=a.find_among_b(n),a.bra=a.cursor;r:{var r=a.limit-a.cursor;i:{switch(o){case 1:var i=a.limit-a.cursor;e:{var e=a.limit-a.cursor;if(0==a.find_among_b(t)||a.cursor>a.limit_backward){if(a.cursor=a.limit-e,!z())break e;if(!a.slice_from("ee"))return}}a.cursor=a.limit-i;break;case 2:break i;case 3:if(0==(o=a.find_among_b(l)))break i;switch(o){case 1:var s=a.limit-a.cursor;if(!a.out_grouping_b(v,97,121))break i;if(a.cursor>a.limit_backward)break i;if(a.cursor=a.limit-s,a.bra=a.cursor,a.slice_from("ie"))break;return;case 2:if(a.cursor>a.limit_backward)break i}}break r}a.cursor=a.limit-r;var c=a.limit-a.cursor;if(!a.go_out_grouping_b(v,97,121))return;if(a.cursor--,a.cursor=a.limit-c,!a.slice_del())return;a.ket=a.cursor,a.bra=a.cursor;var o,c=a.limit-a.cursor;switch(o=a.find_among_b(f)){case 1:return a.slice_from("e");case 2:var u=a.limit-a.cursor;if(a.in_grouping_b(d,97,111)&&!(a.cursor>a.limit_backward))return;a.cursor=a.limit-u;break;case 3:return a.cursor!=h||(u=a.limit-a.cursor,q()&&(a.cursor=a.limit-u,a.slice_from("e")))}if(a.cursor=a.limit-c,a.ket=a.cursor,a.cursor<=a.limit_backward)return;if(a.cursor--,a.bra=a.cursor,!a.slice_del())return}})(),a.cursor=a.limit-r,a.limit-a.cursor),r=(a.ket=a.cursor,e=a.limit-a.cursor,(a.eq_s_b("y")||(a.cursor=a.limit-e,a.eq_s_b("Y")))&&(a.bra=a.cursor,a.out_grouping_b(v,97,121))&&a.cursor>a.limit_backward&&a.slice_from("i"),a.cursor=a.limit-i,a.limit-a.cursor),e=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(_))&&(a.bra=a.cursor,z()))switch(r){case 1:if(a.slice_from("tion"))break;return;case 2:if(a.slice_from("ence"))break;return;case 3:if(a.slice_from("ance"))break;return;case 4:if(a.slice_from("able"))break;return;case 5:if(a.slice_from("ent"))break;return;case 6:if(a.slice_from("ize"))break;return;case 7:if(a.slice_from("ate"))break;return;case 8:if(a.slice_from("al"))break;return;case 9:if(a.slice_from("ful"))break;return;case 10:if(a.slice_from("ous"))break;return;case 11:if(a.slice_from("ive"))break;return;case 12:if(a.slice_from("ble"))break;return;case 13:if(a.slice_from("og"))break;return;case 14:if(!a.eq_s_b("l"))return;if(a.slice_from("og"))break;return;case 15:if(a.slice_from("less"))break;return;case 16:if(!a.in_grouping_b(w,99,116))return;if(a.slice_del())break}})(),a.cursor=a.limit-r,a.limit-a.cursor),i=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(m))&&(a.bra=a.cursor,z()))switch(r){case 1:if(a.slice_from("tion"))break;return;case 2:if(a.slice_from("ate"))break;return;case 3:if(a.slice_from("al"))break;return;case 4:if(a.slice_from("ic"))break;return;case 5:if(a.slice_del())break;return;case 6:if(!Y())return;if(a.slice_del())break}})(),a.cursor=a.limit-e,a.limit-a.cursor),r=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(b))&&(a.bra=a.cursor,Y()))switch(r){case 1:if(a.slice_del())break;return;case 2:var i=a.limit-a.cursor;if(!a.eq_s_b("s")&&(a.cursor=a.limit-i,!a.eq_s_b("t")))return;if(a.slice_del())break}})(),a.cursor=a.limit-i,a.limit-a.cursor),e=((()=>{var r;if(a.ket=a.cursor,0!=(r=a.find_among_b(k)))switch(a.bra=a.cursor,r){case 1:if(!Y()){if(!z())return;var i=a.limit-a.cursor;if(q())return;a.cursor=a.limit-i}if(a.slice_del())break;return;case 2:if(!Y())return;if(!a.eq_s_b("l"))return;if(a.slice_del())break}})(),a.cursor=a.limit-r,a.cursor=a.limit_backward,a.cursor);(()=>{if(p)for(;;){var r=a.cursor;r:{for(;;){var i=a.cursor;if(a.bra=a.cursor,a.eq_s("Y")){a.ket=a.cursor,a.cursor=i;break}if(a.cursor=i,a.cursor>=a.limit)break r;a.cursor++}if(a.slice_from("y"))continue;return}a.cursor=r;break}})(),a.cursor=e}}return!0},this.stemWord=function(r){return a.setCurrent(r),this.stem(),a.getCurrent()}}; +window.Stemmer = EnglishStemmer; diff --git a/docs/limboai-stable/_static/logo.png b/docs/limboai-stable/_static/logo.png new file mode 100644 index 0000000..0533077 Binary files /dev/null and b/docs/limboai-stable/_static/logo.png differ diff --git a/docs/limboai-stable/_static/logo.png.import b/docs/limboai-stable/_static/logo.png.import new file mode 100644 index 0000000..2696c78 --- /dev/null +++ b/docs/limboai-stable/_static/logo.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://jq6k2ra3gkdj" +path="res://.godot/imported/logo.png-9b28617998da4184ed44c27ac56f1aa9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://docs/limboai-stable/_static/logo.png" +dest_files=["res://.godot/imported/logo.png-9b28617998da4184ed44c27ac56f1aa9.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 diff --git a/docs/limboai-stable/_static/minus.png b/docs/limboai-stable/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/docs/limboai-stable/_static/minus.png differ diff --git a/docs/limboai-stable/_static/minus.png.import b/docs/limboai-stable/_static/minus.png.import new file mode 100644 index 0000000..9f3f3de --- /dev/null +++ b/docs/limboai-stable/_static/minus.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://f8mq3o6yyvu" +path="res://.godot/imported/minus.png-5a2c9c58b5fc75d9731bab707e91394b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://docs/limboai-stable/_static/minus.png" +dest_files=["res://.godot/imported/minus.png-5a2c9c58b5fc75d9731bab707e91394b.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 diff --git a/docs/limboai-stable/_static/plus.png b/docs/limboai-stable/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/docs/limboai-stable/_static/plus.png differ diff --git a/docs/limboai-stable/_static/plus.png.import b/docs/limboai-stable/_static/plus.png.import new file mode 100644 index 0000000..13b6254 --- /dev/null +++ b/docs/limboai-stable/_static/plus.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjs20j7suab5p" +path="res://.godot/imported/plus.png-4bc9ed130c549937d82409f6df1af706.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://docs/limboai-stable/_static/plus.png" +dest_files=["res://.godot/imported/plus.png-4bc9ed130c549937d82409f6df1af706.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 diff --git a/docs/limboai-stable/_static/pygments.css b/docs/limboai-stable/_static/pygments.css new file mode 100644 index 0000000..6f8b210 --- /dev/null +++ b/docs/limboai-stable/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #F00 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #04D } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #00F; font-weight: bold } /* Name.Class */ +.highlight .no { color: #800 } /* Name.Constant */ +.highlight .nd { color: #A2F } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #00F } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #BBB } /* Text.Whitespace */ +.highlight .mb { color: #666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666 } /* Literal.Number.Float */ +.highlight .mh { color: #666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #00F } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/limboai-stable/_static/searchtools.js b/docs/limboai-stable/_static/searchtools.js new file mode 100644 index 0000000..e29b1c7 --- /dev/null +++ b/docs/limboai-stable/_static/searchtools.js @@ -0,0 +1,693 @@ +/* + * Sphinx JavaScript utilities for the full-text search. + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +// prettier-ignore +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _escapeHTML = (text) => { + return text + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll('"', """) + .replaceAll("'", "'"); +}; + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = _escapeHTML(title); + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + ` (${_escapeHTML(descr)})`; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + highlightTerms.forEach((term) => + _highlightText(listItem, term, "highlighted"), + ); + } else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor), + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + highlightTerms.forEach((term) => + _highlightText(listItem, term, "highlighted"), + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.", + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace("${resultCount}", resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5, + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => + query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter((term) => term); // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString( + htmlString, + "text/html", + ); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { + el.remove(); + }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector( + `[role="main"] ${anchor}`, + ); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`, + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template.", + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords set is from language_data.js + if (stopwords.has(queryTermLower) || queryTerm.match(/^\d+$/)) return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { + // SPHINX_HIGHLIGHT_ENABLED is set in sphinx_highlight.js + localStorage.setItem( + "sphinx_highlight_terms", + [...highlightTerms].join(" "), + ); + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: ( + query, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if ( + title.toLowerCase().trim().includes(queryLower) + && queryLower.length >= title.length / 2 + ) { + for (const [file, id] of foundTitles) { + const score = Math.round( + (Scorer.title * queryLower.length) / title.length, + ); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && queryLower.length >= entry.length / 2) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round((100 * queryLower.length) / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)), + ); + + // lookup as search terms in fulltext + normalResults.push( + ...Search.performTermsSearch(searchTerms, excludedTerms), + ); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result + .slice(0, 4) + .concat([result[5]]) + .map((v) => String(v)) + .join(","); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [ + searchQuery, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ] = Search._parseQuery(query); + const results = Search._performSearch( + searchQuery, + searchTerms, + excludedTerms, + highlightTerms, + objectTerms, + ); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4]; + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => objectSearchCallback(prefix, array)), + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + // find documents, if any, containing the query word in their text/title term indices + // use Object.hasOwnProperty to avoid mismatching against prototype properties + const arr = [ + { + files: terms.hasOwnProperty(word) ? terms[word] : undefined, + score: Scorer.term, + }, + { + files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, + score: Scorer.title, + }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, new Map()); + const fileScores = scoreMap.get(file); + fileScores.set(word, record.score); + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2, + ).length; + if ( + wordList.length !== searchTerms.size + && wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file + || titleTerms[term] === file + || (terms[term] || []).includes(file) + || (titleTerms[term] || []).includes(file), + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w))); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = + top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/limboai-stable/_static/sphinx_highlight.js b/docs/limboai-stable/_static/sphinx_highlight.js new file mode 100644 index 0000000..a74e103 --- /dev/null +++ b/docs/limboai-stable/_static/sphinx_highlight.js @@ -0,0 +1,159 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true; + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 + && !parent.classList.contains(className) + && !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore(span, parent.insertBefore(rest, node.nextSibling)); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect", + ); + const bbox = parent.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: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target), + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms"); + // Update history only if '?highlight' is present; otherwise it + // clears text fragments (not set in window.location by the browser) + if (url.searchParams.has("highlight")) { + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + } + + // get individual terms from highlight string + const terms = highlight + .toLowerCase() + .split(/\s+/) + .filter((x) => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '", + ), + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms"); + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) + return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) + return; + if ( + DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + && event.key === "Escape" + ) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/limboai-stable/index.html b/docs/limboai-stable/index.html new file mode 100644 index 0000000..31d6003 --- /dev/null +++ b/docs/limboai-stable/index.html @@ -0,0 +1,4392 @@ + + + + + + + + + + LimboAI 1.0 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +
+

LimboAI Documentation

+

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.

+

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.

+

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.

+
+
+

Getting LimboAI

+

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.

+

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.

+
+

Get GDExtension version

+

Precompiled builds are available on the official +LimboAI GitHub page, +and in the Asset Library.

+

GDExtension is the most convenient way of using the LimboAI plugin, but it comes +with certain limitations:

+
    +
  • Documentation tooltips are not available.

  • +
  • 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.

    +
    +

    🛈 See also: What is GDExtension?

    +
    +
  • +
+

Installation instructions:

+
    +
  1. Make sure you’re using the latest stable version of the Godot editor.

  2. +
  3. Create a new project for your experiments with LimboAI.

  4. +
  5. 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.

  6. +
  7. Reload your project with Project -> Reload project. There shouldn’t be any errors printed now.

  8. +
  9. In the project files, locate a scene file called showcase.tscn and run it. It’s the demo’s entry point.

  10. +
+
+
+

Get module version

+

Precompiled builds are available on the official +LimboAI GitHub page.

+

Installation instructions:

+
    +
  1. In GitHub releases, download the latest pre-compiled release build for your platform.

  2. +
  3. Download the demo project archive from the same release.

  4. +
  5. Extract the pre-compiled editor and the demo project files.

  6. +
  7. Launch the pre-compiled editor binary, import and open the demo project.

  8. +
  9. Run the project.

  10. +
+

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.

+
+
+
+

Using LimboAI with C#

+

Here’s how you can use the module version with C# to write your tasks and states.

+
    +
  1. Locate LimboAI NuGet package files.

  2. +
+

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.

+
    +
  1. Add a local source for NuGet packages using the following command:

  2. +
+
dotnet nuget add source path/to/limboai/nupkgs --name LimboNugetSource
+
+
+
    +
  1. Your C# project should be able to see LimboAI classes and compile.

  2. +
+

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.

+
+
+

Contributing

+

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.

+

We follow the Godot code style guidelines. +Please use clang-format to maintain consistent styling. You can install +pre-commit hooks for Git using pre-commit install to automate this process.

+

Please keep the minor versions backward-compatible when submitting pull requests.

+

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.

+
+

Compiling as module of the Godot Engine

+
    +
  1. Clone the Godot Engine repository.

  2. +
  3. Switch to the latest stable tag.

  4. +
  5. Clone the LimboAI repository into the modules/limboai directory.

  6. +
+
git clone https://github.com/godotengine/godot.git
+git checkout 4.3-stable  # Replace "4.3-stable" with the latest stable tag
+git clone https://github.com/limbonaut/limboai modules/limboai
+
+
+

Consult the Godot Engine documentation +for detailed instructions on building the engine.

+

Unit tests can be compiled using the tests=yes build option. To execute them, +run the compiled Godot binary with the --test --tc="*[LimboAI]*" command-line options.

+
+

Building C# Packages

+

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.

+
+
+
+

Compiling as GDExtension library

+

You’ll need the SCons build tool and a C++ compiler. See also Compiling. +Run scons target=editor to build the plugin library for your current platform.

+
    +
  • SCons will automatically clone the godot-cpp repository if it doesn’t already exist in the limboai/godot-cpp directory.

  • +
  • By default, built targets are placed in the demo project: demo/addons/limboai/bin/.

  • +
+

Check scons -h for other options and targets.

+
+
+

Contributing to the documentation

+

Online documentation is created using Sphinx. +Source files are located in the doc/source directory in RST format and can +be built locally with sphinx-build. See the +Sphinx documentation +for more details.

+

Class documentation resides in XML files within the doc_classes/ directory. +If you create a new class or modify an existing one, you can run the compiled +Godot binary with the --doctool 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 --doctool +option again to update and tidy up the XML files.

+

Sphinx RST files for the class documentation are generated from +XML files using the Godot script make_rst.py and stored in the doc/source/classes directory. +This process is performed using our own script scripts/update_rst.sh. RST files +in doc/source/classes should not be edited manually.

+
+
+
+
+
+

Introduction to Behavior Trees

+
+

🛈 Note: Demo project includes a tutorial that provides an introduction to behavior trees through illustrative examples.

+
+

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.

+

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.

+
+

🛈 Note: To create your own actions, extend the BTAction +class.

+
+

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: +SUCCESS, FAILURE, or RUNNING. SUCCESS and FAILURE indicate the +outcome of finished work, while RUNNING status is returned when a task requires +more than one tick to complete its job. These statuses determine how the tree +progresses, with the RUNNING status usually meaning that the tree will +continue execution during the next frame.

+

There are four types of tasks:

+
    +
  • Actions are leaf tasks that perform the actual work.

    + +
  • +
  • Conditions are leaf tasks that conduct various checks.

    + +
  • +
  • Composites can have one or more child tasks, and dictate the execution flow of their children.

    + +
  • +
  • Decorators can only have a single child and they change how their child task operates.

    + +
  • +
+

Sequence is one of the core composite tasks. +It executes its child tasks sequentially, from first to last, until one of them +returns FAILURE, or all of them result in SUCCESS. In other words, +if any child task results in FAILURE, the Sequence +execution will be aborted, and the Sequence itself will +return FAILURE.

+

Selector is another essential composite task. +It executes its child tasks sequentially, from first to last, until one of them +returns SUCCESS or all of them result in FAILURE. In other words, when +a child task results in FAILURE, it moves on to the next one until it +finds the one that returns SUCCESS. Once a child task results in SUCCESS, +the Selector stops and also returns SUCCESS. +The purpose of the Selector is to find a child that succeeds.

+

Behavior Trees handle conditional logic using condition tasks. These +tasks check for specific conditions and return either SUCCESS or +FAILURE 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.

+
+

🛈 Note: To create your own conditions, extend the BTCondition +class.

+
+

Check out the BTTask class documentation, which +provides the foundation for various building blocks of Behavior Trees.

+
+
+

Creating Behavior Trees

+

This chapter describes how to create and debug behavior trees.

+
+

Add a Behavior Tree to an agent

+

Follow these steps to add a behavior tree to a new or existing agent:

+
    +
  1. Make a scene file for your agent, or open an existing scene.

  2. +
  3. Add a BTPlayer node to your scene.

  4. +
  5. Select BTPlayer, and create a new behavior tree in the inspector.

  6. +
  7. Optionally, you can save the behavior tree to a file using the property’s context menu.

  8. +
  9. Click the behavior tree property to open it in the LimboAI editor.

  10. +
+
+
+

Debugging Behavior Trees

+

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.

+
+

Inspecting task properties and blackboard

+

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.

+
+
+
+
+

Creating custom tasks

+

By default, user tasks should be placed in the res://ai/tasks +directory. You can set an alternative location for user tasks in the +Project Settings → Limbo AI (To see those options, +Advanced Settings should be enabled in the Project 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.”

+

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.

+
+

🛈 Note: To help you write new tasks, you can add a script template to +your project using “Misc → Create script template” menu option.

+
+

Using the Blackboard is covered in Accessing the Blackboard in a Task.

+
+

Task anatomy

+
@tool
+extends BTAction
+
+# Task parameters.
+@export var parameter1: float
+@export var parameter2: Vector2
+
+## Note: Each method declaration is optional.
+## At minimum, you only need to define the "_tick" method.
+
+
+# Called to generate a display name for the task (requires @tool).
+func _generate_name() -> String:
+    return "MyTask"
+
+
+# Called to initialize the task.
+func _setup() -> void:
+    pass
+
+
+# Called when the task is entered.
+func _enter() -> void:
+    pass
+
+
+# Called when the task is exited.
+func _exit() -> void:
+    pass
+
+
+# Called each time this task is ticked (aka executed).
+func _tick(delta: float) -> Status:
+    return SUCCESS
+
+
+# Strings returned from this method are displayed as warnings in the editor.
+func _get_configuration_warnings() -> PackedStringArray:
+    var warnings := PackedStringArray()
+    return warnings
+
+
+
+
+

Example 1: A simple action

+
@tool
+extends BTAction
+
+## Shows or hides a node and returns SUCCESS.
+## Returns FAILURE if the node is not found.
+
+# Task parameters.
+@export var node_path: NodePath
+@export var visible := true
+
+
+# Called to generate a display name for the task (requires @tool).
+func _generate_name() -> String:
+    return "SetVisible  %s  node_path: \"%s\"" % [visible, node_path]
+
+
+# Called each time this task is ticked (aka executed).
+func _tick(p_delta: float) -> Status:
+    var n: CanvasItem = scene_root.get_node_or_null(node_path)
+    if is_instance_valid(n):
+        n.visible = visible
+        return SUCCESS
+    return FAILURE
+
+
+
+
+

Example 2: InRange condition

+
@tool
+extends BTCondition
+
+## InRange condition checks if the agent is within a range of target,
+## defined by distance_min and distance_max.
+## Returns SUCCESS if the agent is within the defined range;
+## otherwise, returns FAILURE.
+
+@export var distance_min: float
+@export var distance_max: float
+@export var target_var: StringName = &"target"
+
+var _min_distance_squared: float
+var _max_distance_squared: float
+
+
+# Called to generate a display name for the task.
+func _generate_name() -> String:
+    return "InRange (%d, %d) of %s" % [distance_min, distance_max,
+        LimboUtility.decorate_var(target_var)]
+
+
+# Called to initialize the task.
+func _setup() -> void:
+    _min_distance_squared = distance_min * distance_min
+    _max_distance_squared = distance_max * distance_max
+
+
+# Called when the task is executed.
+func _tick(_delta: float) -> Status:
+    var target: Node2D = blackboard.get_var(target_var, null)
+    if not is_instance_valid(target):
+        return FAILURE
+
+    var dist_sq: float = agent.global_position.distance_squared_to(target.global_position)
+    if dist_sq >= _min_distance_squared and dist_sq <= _max_distance_squared:
+        return SUCCESS
+    else:
+        return FAILURE
+
+
+
+
+

Creating tasks in C#

+

You can use the following script template for custom tasks:

+
using Godot;
+using System;
+
+[Tool]
+public partial class _CLASS_ : _BASE_
+{
+    public override string _GenerateName()
+    {
+        return "_CLASS_";
+    }
+
+    public override void _Setup()
+    {
+    }
+
+    public override void _Enter()
+    {
+    }
+
+    public override void _Exit()
+    {
+    }
+
+    public override Status _Tick(double delta)
+    {
+        return Status.Success;
+    }
+
+    public override string[] _GetConfigurationWarnings()
+    {
+        return Array.Empty<string>();
+    }
+}
+
+
+
+
+
+

Sharing data using Blackboard

+

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.

+

Using the Blackboard, you can easily share data in your behavior trees, making the tasks in the behavior tree more flexible.

+
+

Accessing the Blackboard in a Task

+

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:

+
@export var speed_var: StringName = &"speed"
+
+func _tick(delta: float) -> Status:
+    # Set the value of the "speed" variable:
+    blackboard.set_var(speed_var, 200.0)
+
+    # Get the value of the "speed" variable, with a default value of 100.0 if not found:
+    var speed: float = blackboard.get_var(speed_var, 100.0)
+
+    # Check if the "speed" variable exists:
+    if blackboard.has_var(speed_var):
+        # ...
+
+
+

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:

+
@export var object_var: StringName = &"object"
+
+func _tick(delta: float) -> Status:
+    # Get object instance stored in the "object" variable.
+    # - Important: Avoid specifying a type for "obj" in GDScript
+    #   to prevent errors when the instance is freed.
+    var obj = blackboard.get_var(object_var)
+    if is_instance_valid(obj):
+        # ...
+
+
+

It is recommended to suffix variable name properties with _var, 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.

+
+

🛈 Note: The variable doesn’t need to exist when you set it in code.

+
+
+
+

Editing the Blackboard Plan

+

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.

+

To add, modify, or remove variables from the Blackboard Plan, follow these steps:

+
    +
  1. Open the LimboAI editor and load the behavior tree you want to edit.

  2. +
  3. In the editor, click on the small button located inside the tab. This will open the BlackboardPlan in the Inspector.

  4. +
  5. In the Inspector, click the “Manage…” button to show the blackboard plan editor.

  6. +
  7. In the blackboard plan editor, you can add, remove, or reorder variables, and modify their data type and hint.

  8. +
  9. 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.

  10. +
  11. You can specify the default values of the variables directly in the Inspector.

  12. +
+
+
+

Overriding variables in BTPlayer

+

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:

+
    +
  1. Select the BTPlayer node in the scene tree.

  2. +
  3. In the Inspector, locate the “Blackboard Plan” property.

  4. +
  5. Override the desired values to tailor the blackboard variables for the specific scene.

  6. +
+
+
+

Task parameters

+

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.

+

Usage example:

+
extends BTAction
+
+@export var speed: BBFloat
+
+func _tick(delta: float) -> Status:
+    var current_speed: float = speed.get_value(scene_root, blackboard, 0.0)
+    ...
+
+
+
+
+

Connecting variables in BTs to HSMs: Variable mapping

+

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.

+
+

Note

+

To learn more about scopes, see 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.

+
+

Key points about mapping

+
    +
  • Mapping connects two variables so they behave as a single logical variable at runtime.

  • +
  • Linked variables are updated immediately in both scopes — they literally share the +same state in memory (no polling or copying).

  • +
  • Mapping is explicit: you decide which variables the BT exposes as inputs and outputs.

  • +
  • Linkage is bidirectional — there is no distinction between input and output.

  • +
  • Mapping does not create new variables automatically — the variables must already +exist in both blackboard plans before they can be linked.

  • +
+
+
+

Inspector workflow

+
    +
  1. Define the required variables in each BlackboardPlan (HSM plan and BT plan, for example).

  2. +
  3. Select the BTState node in the scene or a BTSubtree +inside a behavior tree.

  4. +
  5. In the Inspector, select the Blackboard Plan property.

  6. +
  7. In the BlackboardPlan resource inspector, locate the Mapping section.

  8. +
  9. Create mappings by pairing variables (BT variable ↔ parent variable).

  10. +
  11. On startup the mappings are applied, and the variables are automatically linked +for the running instance.

  12. +
+
+
+

Programmatic alternative: linking variables in code

+

You can also link variables directly in code using Blackboard.link_var:

+
# Example: programmatically link a BT blackboard variable to an HSM blackboard variable
+# Assume `hsm` is a LimboHSM instance and `bt_state` is a BTState instance
+var hsm_bb := hsm.get_blackboard()
+var bt_bb := bt_state.get_blackboard()
+
+# NOTE: variable names do not need to match
+bt_bb.link_var("target_pos", hsm_bb, "target_pos")
+
+
+
+
+

Best practices

+
    +
  • Declare all BT dependencies in the BT’s BlackboardPlan instead of relying on parent scopes.

  • +
  • Use Mapping to explicitly declare which variables should be shared with the HSM.

  • +
  • Prefer the inspector-based Mapping workflow for clarity and editor support; use +link_var only when runtime or programmatic setup is required.

  • +
  • Avoid writing to blackboard.get_parent() from inside BT tasks unless you have +a very specific reason and accept the coupling it introduces.

  • +
+
+
+
+

Advanced topic: Blackboard scopes

+

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.

+

Scopes are created automatically to prevent naming collisions between contextually separate environments:

+
    +
  • Within BTNewScope.

  • +
  • Under BTSubtree decorators.

  • +
  • With LimboState that have a non-empty blackboard plan defined.

  • +
  • Under LimboHSM nodes: A new scope is created at the root level, +and each BTState child also receives its own separate scope.

  • +
+
+

Sharing data between several agents

+

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:

+
extends BTAction
+
+@export var group_target_var: StringName = &"group_target"
+
+func _tick(delta: float) -> Status:
+    if not blackboard.has_var(group_target_var):
+        var new_target: Node = acquire_target()
+        # Set common target shared between agents in a group:
+        blackboard.top().set_var(group_target_var, new_target)
+
+    # Access common target shared between agents in a group:
+    var target: Node = blackboard.get_var(group_target_var)
+
+
+

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:

+
class_name AgentGroup
+extends Node2D
+## AgentGroup node: Manages the shared Blackboard for agents in a group.
+## Children of this node are assumed to be agents that belong to a common group.
+## This implementation assumes that each agent has a "BTPlayer" node for AI.
+
+@export var blackboard_plan: BlackboardPlan
+
+var shared_scope: Blackboard
+
+func _ready() -> void:
+    if blackboard_plan == null:
+        shared_scope = Blackboard.new()
+    else:
+        shared_scope = blackboard_plan.create_blackboard()
+
+    for child in get_children():
+        var bt_player: BTPlayer = child.find_child("BTPlayer")
+        if is_instance_valid(bt_player):
+            bt_player.blackboard.set_parent(shared_scope)
+
+
+

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.

+
+
+
+

Debugging blackboard variables

+

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.

+
+
+
+

Accessing nodes in the scene tree

+

There are several ways to access nodes in the agent’s scene tree from a BTTask.

+
+

🛈 Note: The root node of the agent’s scene tree can be accessed with the +scene_root property.

+
+
+

With BBNode property

+
@export var cast_param: BBNode
+
+func _tick(delta) -> Status:
+    var node: ShapeCast3D = cast_param.get_value(scene_root, blackboard)
+
+
+
+
+

With NodePath property

+
@export var cast_path: NodePath
+
+func _tick(delta) -> Status:
+    var node: ShapeCast3D = scene_root.get_node(cast_path)
+
+
+
+
+

Using blackboard plan

+

You can create a blackboard variable in the editor with the type NodePath +and point it to the proper node in the BTPlayer blackboard plan. By default, +any NodePath variable will be replaced with the node instance when the blackboard is instantiated +at runtime (see BlackboardPlan.prefetch_nodepath_vars).

+
extends BTCondition
+
+@export var shape_var: StringName = &"shape_cast"
+
+func _tick(delta) -> Status:
+    var shape_cast: ShapeCast3D = blackboard.get_var(shape_var)
+
+
+

The property BTPlayer.prefetch_nodepath_vars should be set to true.

+
+
+
+
+
+

Create State Machines

+

This guide will show how to set up and use a state machine using LimboHSM.

+
+

Initialization

+

To use the LimboHSM state machine, you first need to initialize it in your code. +This is typically done in the _ready function of your script. Here’s an example of how to do this:

+
@onready var hsm: LimboHSM = $LimboHSM
+@onready var idle_state: LimboState = $LimboHSM/IdleState
+@onready var move_state: LimboState = $LimboHSM/MoveState
+
+
+func _ready() -> void:
+    _init_state_machine()
+
+
+func _init_state_machine() -> void:
+    hsm.add_transition(idle_state, move_state, idle_state.EVENT_FINISHED)
+    hsm.add_transition(move_state, idle_state, move_state.EVENT_FINISHED)
+
+    hsm.initialize(self)
+    hsm.set_active(true)
+
+
+

In this example, we first declare the state machine and the states we want to use. +Then, in the _init_state_machine function, we add transitions between the states. +Finally, we initialize the state machine and set it to active.

+
+
+

State example

+

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 AnimationPlayer and waits for it to finish:

+
extends LimboState
+## PlayAnimation: Play an animation on AnimationPlayer, and wait for it to finish.
+
+@export var animation_player: AnimationPlayer
+@export var animation_name: StringName
+
+func _enter() -> void:
+    animation_player.play(animation_name)
+
+func _update(_delta: float) -> void:
+    if not animation_player.is_playing() \
+            or animation_player.assigned_animation != animation_name:
+        dispatch(EVENT_FINISHED)
+
+
+

In this example, the _enter method is called when the state is entered, and it plays the specified animation. +The _update method is called every frame, and it checks if the animation is finished. +If it is, it dispatches the EVENT_FINISHED event, which can result in a transition to the next state.

+
+
+

Events and transitions

+

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.

+

To register a transition and associate it with a specific event, you can use the +LimboHSM.add_transition method:

+
hsm.add_transition(idle_state, move_state, &"movement_started")
+
+
+

In this example, we’re registering a transition from the idle_state to the move_state +when the movement_started event is dispatched.

+

A transition can be also associated with no particular starting state:

+
hsm.add_transition(hsm.ANYSTATE, move_state, &"movement_started")
+
+
+

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.

+

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:

+
extends LimboState
+
+func _setup() -> void:
+    add_event_handler("movement_started", _on_movement_started)
+
+func _on_movement_started(cargo = null) -> bool:
+    # Handle the "movement_started" event here.
+    # `cargo` can be passed with the event when calling `dispatch()`.
+    # It's quite handy when you need to pass some data to the event handler.
+    return true
+
+
+

If the event handler returns true, the event will be considered as consumed, +and it won’t propagate further or result in a state transition.

+
+
+

State anatomy

+
extends LimboState
+
+## Called once, when state is initialized.
+func _setup() -> void:
+    pass
+
+## Called when state is entered.
+func _enter() -> void:
+    pass
+
+## Called when state is exited.
+func _exit() -> void:
+    pass
+
+## Called each frame when this state is active.
+func _update(delta: float) -> void:
+    pass
+
+
+
+
+

Using behavior trees with state machines

+

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.

+

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.

+

Once the LimboHSM has been created, a BTState can be created for a given LimboHSM:

+
extends CharacterBody2D
+
+var hsm: LimboHSM
+
+@export var behavior_tree: BehaviorTree
+
+
+func _ready():
+    hsm = LimboHSM.new()
+    add_child(hsm)
+
+    var bt_state := BTState().new()
+    bt_state.named("Supplied BT")
+
+    # Set the behavior tree, or use a load("res://ai/trees/...") call
+    bt_state.behavior_tree = behavior_tree
+    bt_state.set_scene_root_hint(self)
+
+    hsm.add_child(bt_state)
+    hsm.initial_state = bt_state
+
+    hsm.initialize(self)
+    hsm.set_active(true)
+
+
+
+
+

Single-file state machine setup

+

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:

+
extends CharacterBody2D
+
+var hsm: LimboHSM
+
+@onready var animation_player: AnimationPlayer = $AnimationPlayer
+
+
+func _ready() -> void:
+    _init_state_machine()
+
+
+func _init_state_machine() -> void:
+    hsm = LimboHSM.new()
+    add_child(hsm)
+
+    # Use chained methods and delegation to set up states:
+    var idle_state := LimboState.new().named("Idle") \
+        .call_on_enter(func(): animation_player.play("idle")) \
+        .call_on_update(_idle_update)
+    var move_state := LimboState.new().named("Move") \
+        .call_on_enter(func(): animation_player.play("walk")) \
+        .call_on_update(_move_update)
+
+    hsm.add_child(idle_state)
+    hsm.add_child(move_state)
+
+    hsm.add_transition(idle_state, move_state, &"movement_started")
+    hsm.add_transition(move_state, idle_state, &"movement_ended")
+
+    hsm.initialize(self)
+    hsm.set_active(true)
+
+
+func _idle_update(delta: float) -> void:
+    var dir: Vector2 = Input.get_vector(
+        &"ui_left", &"ui_right", &"ui_up", &"ui_down")
+    if not dir.is_zero_approx():
+        hsm.dispatch(&"movement_started")
+
+
+func _move_update(delta: float) -> void:
+    var dir: Vector2 = Input.get_vector(
+        &"ui_left", &"ui_right", &"ui_up", &"ui_down")
+    var desired_velocity: Vector2 = dir * 200.0
+    velocity = desired_velocity
+    move_and_slide()
+    if desired_velocity.is_zero_approx():
+        hsm.dispatch(&"movement_ended")
+
+
+
+
+
+
+
+

Important classes

+

There are a lot of classes introduced in LimboAI. Here is a list of the most important ones you should know about:

+
+
+

BTTask

+

Inherits: BT

+

Inherited By: BTAction, BTComment, BTComposite, BTCondition, BTDecorator

+

Base class for all BehaviorTree tasks.

+
+

Description

+

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.

+

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.

+

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.

+

Note: Do not extend BTTask directly for your own tasks. Instead, extend one of the subtypes mentioned above.

+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Node

agent

Blackboard

blackboard

String

custom_name

""

float

elapsed_time

Node

scene_root

Status

status

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

_enter() virtual

void

_exit() virtual

String

_generate_name() virtual const

PackedStringArray

_get_configuration_warnings() virtual const

void

_setup() virtual

Status

_tick(delta: float) virtual

void

abort()

void

add_child(task: BTTask)

void

add_child_at_index(task: BTTask, idx: int)

BTTask

clone() const

BehaviorTree

editor_get_behavior_tree()

Status

execute(delta: float)

BTTask

get_child(idx: int) const

int

get_child_count() const

int

get_child_count_excluding_comments() const

int

get_index() const

BTTask

get_parent() const

BTTask

get_root() const

String

get_task_name()

bool

has_child(task: BTTask) const

void

initialize(agent: Node, blackboard: Blackboard, scene_root: Node)

bool

is_descendant_of(task: BTTask) const

bool

is_root() const

BTTask

next_sibling() const

void

print_tree(initial_tabs: int = 0)

void

remove_child(task: BTTask)

void

remove_child_at_index(idx: int)

+
+
+
+

Property Descriptions

+

Node agent 🔗

+
    +
  • void set_agent(value: Node)

  • +
  • Node get_agent()

  • +
+

The agent is the contextual object for the BehaviorTree instance. This is usually the parent of the BTPlayer node that utilizes the BehaviorTree resource.

+
+

Blackboard blackboard 🔗

+ +

Provides access to the Blackboard. Blackboard is used to share data among tasks of the associated BehaviorTree.

+

See Blackboard for additional info.

+
+

String custom_name = "" 🔗

+
    +
  • void set_custom_name(value: String)

  • +
  • String get_custom_name()

  • +
+

User-provided name for the task. If not empty, it is used by the editor to represent the task. See get_task_name.

+
+

float elapsed_time 🔗

+
    +
  • float get_elapsed_time()

  • +
+

Elapsed time since the task was “entered”. See _enter.

+

Returns 0 when task is not RUNNING.

+
+

Node scene_root 🔗

+
    +
  • Node get_scene_root()

  • +
+

Root node of the scene the behavior tree is used in (e.g., the owner of the BTPlayer node). Can be uses to retrieve NodePath references.

+

Example:

+
extends BTAction
+
+@export var node_path: NodePath
+
+func _setup():
+    var node: Node = scene_root.get_node(node_path)
+
+
+
+

Status status 🔗

+ +

Last execution Status returned by _tick.

+
+
+
+

Method Descriptions

+

void _enter() virtual 🔗

+

Called when task is “entered”, i.e. when task is executed while not having a RUNNING 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.

+
+

void _exit() virtual 🔗

+

Called when task is “exited”, i.e. after _tick returns SUCCESS or FAILURE status. See also execute.

+
+

String _generate_name() virtual const 🔗

+

Called to generate a display name for the task unless custom_name is set. See get_task_name.

+
+

PackedStringArray _get_configuration_warnings() virtual const 🔗

+

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 @tool annotation at the top of the file.

+
+

void _setup() virtual 🔗

+

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.

+
+

Status _tick(delta: float) virtual 🔗

+

Called when task is “ticked”, i.e. executed by BTPlayer or BTState during an update.

+

Returns execution status as defined in Status.

+

Note: Tasks perform their main function by implementing this method.

+
+

void abort() 🔗

+

Resets the task and its children recursively. If a task is in the RUNNING state, it is exited and its status is reset to FRESH.

+
+

void add_child(task: BTTask) 🔗

+

Adds a child task. The task is placed at the end of the children list.

+
+

void add_child_at_index(task: BTTask, idx: int) 🔗

+

Adds a child task. The task is placed at idx position in the children list.

+
+

BTTask clone() const 🔗

+

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.

+
+

BehaviorTree editor_get_behavior_tree() 🔗

+

Returns the behavior tree that owns this task. This is only available in the editor.

+
+

Status execute(delta: float) 🔗

+

Performs task’s execution. The execution follows a specific sequence:

+
    +
  • If task’s current status is not RUNNING, the _enter method is called first.

  • +
  • Next, the _tick method is called next to perform the task’s work.

  • +
  • If the _tick method returns SUCCESS or FAILURE status, the _exit method will be called next as part of the execution cleanup.

  • +
+
+

BTTask get_child(idx: int) const 🔗

+

Returns a child task by specifying its index.

+
+

int get_child_count() const 🔗

+

Returns the number of child tasks.

+
+

int get_child_count_excluding_comments() const 🔗

+

Returns the number of child tasks not counting BTComment tasks.

+
+

int get_index() const 🔗

+

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.

+
+

BTTask get_parent() const 🔗

+

Returns the task’s parent.

+
+

BTTask get_root() const 🔗

+

Returns the root task of the behavior tree.

+
+

String get_task_name() 🔗

+

The string returned by this method is used to represent the task in the editor.

+

Method _generate_name is called to generate a display name for the task unless custom_name is set.

+
+

bool has_child(task: BTTask) const 🔗

+

Returns true if task is a child of this task.

+
+

void initialize(agent: Node, blackboard: Blackboard, scene_root: Node) 🔗

+

Initilizes the task. Assigns agent and blackboard, and calls _setup for the task and its children.

+

The method is called recursively for each child task. scene_root 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).

+
+

bool is_descendant_of(task: BTTask) const 🔗

+

Returns true if this task is a descendant of task. In other words, this task must be a child of task or one of its children or grandchildren.

+
+

bool is_root() const 🔗

+

Returns true if this task is the root task of its behavior tree. A behavior tree can have only one root task.

+
+

BTTask next_sibling() const 🔗

+

Returns the next task after this task in the parent’s children list.

+

Returns null if this task has no parent or it is the last child in the parent’s children list.

+
+

void print_tree(initial_tabs: int = 0) 🔗

+

Prints the subtree that starts with this task to the console.

+
+

void remove_child(task: BTTask) 🔗

+

Removes task from children.

+
+

void remove_child_at_index(idx: int) 🔗

+

Removes a child task at a specified index from children.

+
+
+
+

BTPlayer

+

Inherits:

+

Player of BehaviorTree resources.

+
+

Description

+

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).

+

For an introduction to behavior trees, see BehaviorTree.

+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bool

active

true

NodePath

agent_node

NodePath("..")

BehaviorTree

behavior_tree

Blackboard

blackboard

BlackboardPlan

blackboard_plan

bool

monitor_performance

false

UpdateMode

update_mode

1

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + +

BTInstance

get_bt_instance()

void

restart()

void

set_bt_instance(bt_instance: BTInstance)

void

set_scene_root_hint(scene_root: Node)

void

update(delta: float)

+
+
+
+

Signals

+

behavior_tree_finished(status: int) 🔗

+

Deprecated: Use updated signal instead.

+

Emitted when the behavior tree has finished executing and returned SUCCESS or FAILURE.

+

Argument status holds the status returned by the behavior tree. See Status.

+
+

updated(status: int) 🔗

+

Emitted when BTPlayer has finished the behavior tree update.

+

Argument status holds the status returned by the behavior tree. See Status.

+
+
+
+

Enumerations

+

enum UpdateMode: 🔗

+

UpdateMode IDLE = 0

+

Execute behavior tree during the idle process.

+

UpdateMode PHYSICS = 1

+

Execute behavior tree during the physics process.

+

UpdateMode MANUAL = 2

+

Behavior tree is executed manually by calling update.

+
+
+
+

Property Descriptions

+

bool active = true 🔗

+
    +
  • void set_active(value: bool)

  • +
  • bool get_active()

  • +
+

If true, the behavior tree will be executed during update.

+
+

NodePath agent_node = NodePath("..") 🔗

+
    +
  • void set_agent_node(value: NodePath)

  • +
  • NodePath get_agent_node()

  • +
+

Path to the node that will be used as the agent. Setting it after instantiation will have no effect.

+
+

BehaviorTree behavior_tree 🔗

+ +

BehaviorTree resource to instantiate and execute at runtime.

+
+

Blackboard blackboard 🔗

+ +

Holds data shared by the behavior tree tasks. See Blackboard.

+
+

BlackboardPlan blackboard_plan 🔗

+ +

Stores and manages variables that will be used in constructing new Blackboard instances.

+
+

bool monitor_performance = false 🔗

+
    +
  • void set_monitor_performance(value: bool)

  • +
  • bool get_monitor_performance()

  • +
+

If true, adds a performance monitor to “Debugger->Monitors” for each instance of this BTPlayer node.

+
+

UpdateMode update_mode = 1 🔗

+ +

Determines when the behavior tree is executed. See UpdateMode.

+
+
+
+

Method Descriptions

+

BTInstance get_bt_instance() 🔗

+

Returns the behavior tree instance.

+
+

void restart() 🔗

+

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.

+
+

void set_bt_instance(bt_instance: BTInstance) 🔗

+

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.

+
+

void set_scene_root_hint(scene_root: Node) 🔗

+

Sets the Node 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 NOTIFICATION_READY). This is typically useful when creating BTPlayer nodes dynamically from code.

+
+

void update(delta: float) 🔗

+

Executes the root task of the behavior tree instance if active is true. Call this method when update_mode is set to MANUAL. When update_mode is not MANUAL, the update will be called automatically. See UpdateMode.

+
+
+
+

Blackboard

+

Inherits:

+

A key/value storage for sharing among LimboHSM states and BehaviorTree tasks.

+
+

Description

+

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.

+

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.

+

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.

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

bind_var_to_property(var_name: StringName, object: Object, property: StringName, create: bool = false)

void

clear()

void

erase_var(var_name: StringName)

Blackboard

get_parent() const

Variant

get_var(var_name: StringName, default: Variant = null, complain: bool = true) const

Dictionary

get_vars_as_dict() const

bool

has_var(var_name: StringName) const

void

link_var(var_name: StringName, target_blackboard: Blackboard, target_var: StringName, create: bool = false)

Array[StringName]

list_vars() const

void

populate_from_dict(dictionary: Dictionary)

void

print_state() const

void

set_parent(blackboard: Blackboard)

void

set_var(var_name: StringName, value: Variant)

Blackboard

top() const

void

unbind_var(var_name: StringName)

+
+
+
+

Method Descriptions

+

void bind_var_to_property(var_name: StringName, object: Object, property: StringName, create: bool = false) 🔗

+

Establish a binding between a variable and the object’s property specified by property and object. Changes to the variable update the property, and vice versa. If create is true, the variable will be created if it doesn’t exist.

+
+

void clear() 🔗

+

Removes all variables from the Blackboard. Parent scopes are not affected.

+
+

void erase_var(var_name: StringName) 🔗

+

Removes a variable by its name.

+
+

Blackboard get_parent() const 🔗

+

Returns a Blackboard that serves as the parent scope for this instance.

+
+

Variant get_var(var_name: StringName, default: Variant = null, complain: bool = true) const 🔗

+

Returns variable value or default if variable doesn’t exist. If complain is true, 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.

+
+

Dictionary get_vars_as_dict() const 🔗

+

Returns all variables in the Blackboard as a dictionary. Keys are the variable names, values are the variable values. Parent scopes are not included.

+
+

bool has_var(var_name: StringName) const 🔗

+

Returns true if the Blackboard contains the var_name variable, including the parent scopes.

+
+ +

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 create is true, the variable will be created if it doesn’t exist.

+

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.

+
+

Array[StringName] list_vars() const 🔗

+

Returns all variable names in the Blackboard. Parent scopes are not included.

+
+

void populate_from_dict(dictionary: Dictionary) 🔗

+

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.

+
+

void print_state() const 🔗

+

Prints the values of all variables in each scope.

+
+

void set_parent(blackboard: Blackboard) 🔗

+

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.

+
+

void set_var(var_name: StringName, value: Variant) 🔗

+

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.

+
+

Blackboard top() const 🔗

+

Returns the topmost Blackboard in the scope chain.

+
+

void unbind_var(var_name: StringName) 🔗

+

Remove binding from a variable.

+
+
+
+

BBParam

+

Inherits:

+

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

+

A base class for LimboAI typed parameters.

+
+

Description

+

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.

+

Note: Don’t instantiate. Use specific subtypes instead.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

Variant

saved_value

null

ValueSource

value_source

0

StringName

variable

+
+
+

Methods

+ + + + + + + + + +

Variant.Type

get_type() const

Variant

get_value(scene_root: Node, blackboard: Blackboard, default: Variant = null)

+
+
+
+

Enumerations

+

enum ValueSource: 🔗

+

ValueSource SAVED_VALUE = 0

+

The value is stored directly within the BBParam resource.

+

ValueSource BLACKBOARD_VAR = 1

+

The value is referenced by a variable name and retrieved from the Blackboard. The variable name is stored within the BBParam resource.

+
+
+
+

Property Descriptions

+

Variant saved_value = null 🔗

+
    +
  • void set_saved_value(value: Variant)

  • +
  • Variant get_saved_value()

  • +
+

Stores the parameter value when value_source is set to SAVED_VALUE. The data type of the value is determined by get_type.

+
+

ValueSource value_source = 0 🔗

+ +

Specifies the source of the value for BBParam. See ValueSource.

+
+

StringName variable 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

Stores the name of a Blackboard variable when value_source is set to BLACKBOARD_VAR.

+
+
+
+

Method Descriptions

+

Variant.Type get_type() const 🔗

+

Returns the expected data type of the parameter.

+
+

Variant get_value(scene_root: Node, blackboard: Blackboard, default: Variant = null) 🔗

+

Returns the value of the parameter.

+
+
+
+

LimboState

+

Inherits:

+

Inherited By: BTState, LimboHSM

+

A state node for Hierarchical State Machines (HSM).

+
+

Description

+

A LimboAI state node for Hierarchical State Machines (HSM).

+

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 call_on_* methods.

+

For additional details on state machines, refer to LimboHSM.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

StringName

EVENT_FINISHED

Node

agent

Blackboard

blackboard

BlackboardPlan

blackboard_plan

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

_enter() virtual

void

_exit() virtual

void

_setup() virtual

void

_update(delta: float) virtual

void

add_event_handler(event: StringName, handler: Callable)

LimboState

call_on_enter(callable: Callable)

LimboState

call_on_exit(callable: Callable)

LimboState

call_on_update(callable: Callable)

void

clear_guard()

bool

dispatch(event: StringName, cargo: Variant = null)

LimboState

get_root() const

bool

is_active() const

LimboState

named(name: String)

void

set_guard(guard_callable: Callable)

+
+
+
+

Signals

+

entered() 🔗

+

Emitted when the state is entered.

+
+

exited() 🔗

+

Emitted when the state is exited.

+
+

setup() 🔗

+

Emitted when the state is initialized.

+
+

updated(delta: float) 🔗

+

Emitted when the state is updated.

+
+
+
+

Property Descriptions

+

StringName EVENT_FINISHED 🔗

+
    +
  • StringName event_finished()

  • +
+

A commonly used event that indicates that the state has finished its work.

+
+

Node agent 🔗

+
    +
  • void set_agent(value: Node)

  • +
  • Node get_agent()

  • +
+

An agent associated with the state, assigned during initialization.

+
+

Blackboard blackboard 🔗

+ +

A key/value data store shared by states within the state machine to which this state belongs.

+
+

BlackboardPlan blackboard_plan 🔗

+ +

Stores and manages variables that will be used in constructing new Blackboard instances.

+
+
+
+

Method Descriptions

+

void _enter() virtual 🔗

+

Called when the state is entered.

+
+

void _exit() virtual 🔗

+

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!

+
+

void _setup() virtual 🔗

+

Called once during initialization. Use this method to initialize your state.

+
+

void _update(delta: float) virtual 🔗

+

Called during the update. Implement your state’s behavior with this method.

+
+

void add_event_handler(event: StringName, handler: Callable) 🔗

+

Registers a handler to be called when event is dispatched. The handler function should have the following signature:

+
func my_event_handler(cargo=null) -> bool:
+
+
+

If the handler returns true, the event will be consumed. Cargo is an optional parameter that can be passed to the handler. See also dispatch.

+
+

LimboState call_on_enter(callable: Callable) 🔗

+

A chained method that connects the entered signal to a callable.

+
+

LimboState call_on_exit(callable: Callable) 🔗

+

A chained method that connects the exited signal to a callable.

+
+

LimboState call_on_update(callable: Callable) 🔗

+

A chained method that connects the updated signal to a callable.

+
+

void clear_guard() 🔗

+

Clears the guard function, removing the Callable previously set by set_guard.

+
+

bool dispatch(event: StringName, cargo: Variant = null) 🔗

+

Recursively dispatches a state machine event named event with an optional argument cargo. Returns true if the event was consumed.

+

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.

+
+

LimboState get_root() const 🔗

+

Returns the root LimboState.

+
+

bool is_active() const 🔗

+

Returns true if it is currently active, meaning it is the active substate of the parent LimboHSM.

+
+

LimboState named(name: String) 🔗

+

A chained method for setting the name of this state.

+
+

void set_guard(guard_callable: Callable) 🔗

+

Sets the guard function, which is a function called each time a transition to this state is considered. If the function returns false, the transition will be disallowed.

+
+
+
+

LimboHSM

+

Inherits: LimboState

+

Event-based Hierarchical State Machine (HSM).

+
+

Description

+

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.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

LimboState

ANYSTATE

LimboState

initial_state

UpdateMode

update_mode

1

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

add_transition(from_state: LimboState, to_state: LimboState, event: StringName, guard: Callable = Callable())

void

change_active_state(state: LimboState)

LimboState

get_active_state() const

LimboState

get_leaf_state() const

LimboState

get_previous_active_state() const

bool

has_transition(from_state: LimboState, event: StringName) const

void

initialize(agent: Node, parent_scope: Blackboard = null)

void

remove_transition(from_state: LimboState, event: StringName)

void

set_active(active: bool)

void

update(delta: float)

+
+
+
+

Signals

+

active_state_changed(current: LimboState, previous: LimboState) 🔗

+

Emitted when the currently active substate is switched to a different substate.

+
+
+
+

Enumerations

+

enum UpdateMode: 🔗

+

UpdateMode IDLE = 0

+

Update the state machine during the idle process.

+

UpdateMode PHYSICS = 1

+

Update the state machine during the physics process.

+

UpdateMode MANUAL = 2

+

Manually update the state machine by calling update from a script.

+
+
+
+

Property Descriptions

+

LimboState ANYSTATE 🔗

+ +

Useful for defining a transition from any state.

+
+

LimboState initial_state 🔗

+ +

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.

+
+

UpdateMode update_mode = 1 🔗

+ +

Specifies when the state machine should be updated. See UpdateMode.

+
+
+
+

Method Descriptions

+

void add_transition(from_state: LimboState, to_state: LimboState, event: StringName, guard: Callable = Callable()) 🔗

+

Establishes a transition from one state to another when event is dispatched. Both from_state and to_state must be immediate children of this LimboHSM.

+

Optionally, a guard function can be specified, which must return a boolean value. If the guard function returns false, 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.

+
func my_guard() -> bool:
+    return is_some_condition_met()
+
+
+
+

void change_active_state(state: LimboState) 🔗

+

Changes the currently active substate to state. If state is already active, it will be exited and reentered.

+

state must be a child of this LimboHSM.

+
+

LimboState get_active_state() const 🔗

+

Returns the currently active substate.

+
+

LimboState get_leaf_state() const 🔗

+

Returns the currently active leaf state within the state machine.

+
+

LimboState get_previous_active_state() const 🔗

+

Returns the previously active substate.

+
+

bool has_transition(from_state: LimboState, event: StringName) const 🔗

+

Returns true if there is a transition from from_state for a given event.

+
+

void initialize(agent: Node, parent_scope: Blackboard = null) 🔗

+

Initiates the state and calls LimboState._setup for both itself and all substates.

+
+

void remove_transition(from_state: LimboState, event: StringName) 🔗

+

Removes a transition from a state associated with specific event.

+
+

void set_active(active: bool) 🔗

+

When set to true, switches the state to initial_state and activates state processing according to update_mode.

+
+

void update(delta: float) 🔗

+

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.

+
+
+
+

BTState

+

Inherits: LimboState

+

A state node for LimboHSM that hosts a BehaviorTree.

+
+

Description

+

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 SUCCESS or FAILURE. Event names are customizable through success_event and failure_event. For further details on state machine events, see LimboState.dispatch.

+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + +

BehaviorTree

behavior_tree

StringName

failure_event

&"failure"

bool

monitor_performance

false

StringName

success_event

&"success"

+
+
+

Methods

+ + + + + + + + + +

BTInstance

get_bt_instance() const

void

set_scene_root_hint(scene_root: Node)

+
+
+
+

Property Descriptions

+

BehaviorTree behavior_tree 🔗

+ +

A BehaviorTree resource that defines state behavior.

+
+

StringName failure_event = &"failure" 🔗

+
    +
  • void set_failure_event(value: StringName)

  • +
  • StringName get_failure_event()

  • +
+

HSM event that will be dispatched when the behavior tree results in FAILURE. See LimboState.dispatch.

+
+

bool monitor_performance = false 🔗

+
    +
  • void set_monitor_performance(value: bool)

  • +
  • bool get_monitor_performance()

  • +
+

If true, adds a performance monitor to “Debugger->Monitors” for each instance of this BTState node.

+
+

StringName success_event = &"success" 🔗

+
    +
  • void set_success_event(value: StringName)

  • +
  • StringName get_success_event()

  • +
+

HSM event that will be dispatched when the behavior tree results in SUCCESS. See LimboState.dispatch.

+
+
+
+

Method Descriptions

+

BTInstance get_bt_instance() const 🔗

+

Returns the behavior tree instance.

+
+

void set_scene_root_hint(scene_root: Node) 🔗

+

Sets the Node 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.

+
+
+
+

Full class reference is available in the side bar.

+
+
+

BBAabb

+

Inherits: BBParam

+

AABB-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBArray

+

Inherits: BBParam

+

Array-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBBasis

+

Inherits: BBParam

+

Basis-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBBool

+

Inherits: BBParam

+

Bool-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBByteArray

+

Inherits: BBParam

+

ByteArray-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBColor

+

Inherits: BBParam

+

Color-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBColorArray

+

Inherits: BBParam

+

ColorArray-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBDictionary

+

Inherits: BBParam

+

Dictionary-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBFloat

+

Inherits: BBParam

+

Float-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBFloat32Array

+

Inherits: BBParam

+

PackedFloat32Array-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBFloat64Array

+

Inherits: BBParam

+

PackedFloat64Array-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBInt

+

Inherits: BBParam

+

Integer-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBInt32Array

+

Inherits: BBParam

+

PackedInt32Array-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBInt64Array

+

Inherits: BBParam

+

PackedInt64Array-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBNode

+

Inherits: BBParam

+

Node-type parameter for BehaviorTree tasks. See BBParam.

+
+

Description

+

Node-type parameter intended for use with BehaviorTree tasks. See BBParam.

+

If the source is a blackboard variable, it allows any type extended from Object.

+
+
+
+

BBPlane

+

Inherits: BBParam

+

Plane-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBProjection

+

Inherits: BBParam

+

Projection-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBQuaternion

+

Inherits: BBParam

+

Quaternion-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBRect2

+

Inherits: BBParam

+

Rect2-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBRect2i

+

Inherits: BBParam

+

Rect2i-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBString

+

Inherits: BBParam

+

String-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBStringArray

+

Inherits: BBParam

+

StringArray-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBStringName

+

Inherits: BBParam

+

StringName-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBTransform2D

+

Inherits: BBParam

+

Transform2D-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBTransform3D

+

Inherits: BBParam

+

Transform3D-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVariant

+

Inherits: BBParam

+

Variant-type parameter for BehaviorTree tasks. See BBParam.

+
+

Description

+

Variant-type parameter intended for use with BehaviorTree tasks. See BBParam.

+

The data type is specified by type.

+
+
+

Properties

+ + + + + + + +

Variant.Type

type

0

+
+
+
+

Property Descriptions

+

Variant.Type type = 0 🔗

+
    +
  • void set_type(value: Variant.Type)

  • +
  • Variant.Type get_type()

  • +
+

Specified Variant.Type for the parameter value.

+
+
+
+

BBVector2

+

Inherits: BBParam

+

Vector2-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVector2Array

+

Inherits: BBParam

+

Vector2Array-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVector2i

+

Inherits: BBParam

+

Vector2i-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVector3

+

Inherits: BBParam

+

Vector3-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVector3Array

+

Inherits: BBParam

+

Vector3Array-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVector3i

+

Inherits: BBParam

+

Vector3i-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVector4

+

Inherits: BBParam

+

Vector4-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BBVector4i

+

Inherits: BBParam

+

Vector4i-type parameter for BehaviorTree tasks. See BBParam.

+
+
+

BehaviorTree

+

Inherits:

+

Contains Behavior Tree data.

+
+

Description

+

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.

+

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.

+

Note: To create your own actions, extend the BTAction class.

+

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 SUCCESS, RUNNING, or FAILURE. These statuses determine how the tree progresses. They are defined in Status.

+

Behavior Trees handle conditional logic using condition tasks. These tasks check for specific conditions and return either SUCCESS or FAILURE 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.

+

Note: To create your own conditions, extend the BTCondition class.

+

Check out the BTTask class, which provides the foundation for various building blocks of Behavior Trees.

+
+
+

Properties

+ + + + + + + + + + + +

BlackboardPlan

blackboard_plan

String

description

""

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + +

BehaviorTree

clone() const

void

copy_other(other: BehaviorTree)

BTTask

get_root_task() const

BTInstance

instantiate(agent: Node, blackboard: Blackboard, instance_owner: Node, custom_scene_root: Node = null) const

void

set_root_task(task: BTTask)

+
+
+
+

Signals

+

plan_changed() 🔗

+

Emitted when the BlackboardPlan changes.

+
+
+
+

Property Descriptions

+

BlackboardPlan blackboard_plan 🔗

+ +

Stores and manages variables that will be used in constructing new Blackboard instances.

+
+

String description = "" 🔗

+
    +
  • void set_description(value: String)

  • +
  • String get_description()

  • +
+

User-provided description of the BehaviorTree.

+
+
+
+

Method Descriptions

+

BehaviorTree clone() const 🔗

+

Makes a copy of the BehaviorTree resource.

+
+

void copy_other(other: BehaviorTree) 🔗

+

Become a copy of another behavior tree.

+
+

BTTask get_root_task() const 🔗

+

Returns the root task of the BehaviorTree resource.

+
+

BTInstance instantiate(agent: Node, blackboard: Blackboard, instance_owner: Node, custom_scene_root: Node = null) const 🔗

+

Instantiates the behavior tree and returns BTInstance. instance_owner 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.

+

If custom_scene_root is not null, it will be used as the scene root for the newly instantiated behavior tree; otherwise, the scene root will be set to instance_owner.owner. Scene root is essential for BBNode instances to work properly.

+
+

void set_root_task(task: BTTask) 🔗

+

Assigns a new root task to the BehaviorTree resource.

+
+
+
+

BehaviorTreeData

+

Inherits:

+

Represents current state of a BehaviorTree instance.

+
+

Description

+

This class is used by the LimboAI debugger for the serialization and deserialization of BehaviorTree instance data.

+

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.

+
+
+

Methods

+ + + + + + +

BehaviorTreeData

create_from_bt_instance(bt_instance: BTInstance) static

+
+
+
+

Method Descriptions

+

BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) static 🔗

+

Returns current state of the bt_instance encoded as a BehaviorTreeData, suitable for use with BehaviorTreeView.

+

Behavior tree instance can be acquired with BTPlayer.get_bt_instance.

+
+
+
+

BehaviorTreeView

+

Inherits:

+

Visualizes the current state of a BehaviorTree instance.

+
+

Description

+

Visualizes the current state of a BehaviorTree instance. See also BehaviorTreeData.

+
+
+

Properties

+ + + + + + + +

int

update_interval_msec

0

+
+
+

Methods

+ + + + + + + + + +

void

clear()

void

update_tree(behavior_tree_data: BehaviorTreeData)

+
+
+
+

Signals

+

task_selected(type_name: String, script_path: String) 🔗

+

Emitted when a task item is selected in BehaviorTreeView.

+
+
+
+

Property Descriptions

+

int update_interval_msec = 0 🔗

+
    +
  • void set_update_interval_msec(value: int)

  • +
  • int get_update_interval_msec()

  • +
+

Minimum delay between two updates (in milliseconds). Set to higher values for a lower CPU load.

+
+
+
+

Method Descriptions

+

void clear() 🔗

+

Clears the tree view.

+
+

void update_tree(behavior_tree_data: BehaviorTreeData) 🔗

+

Updates the representation of a BehaviorTree instance. See also BehaviorTreeData.

+
+
+
+

BlackboardPlan

+

Inherits:

+

Stores and manages variables that will be used in constructing new Blackboard instances.

+
+

Properties

+ + + + + + + +

bool

prefetch_nodepath_vars

true

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Blackboard

create_blackboard(prefetch_root: Node, parent_scope: Blackboard = null, prefetch_root_for_base_plan: Node = null)

BlackboardPlan

get_base_plan() const

Callable

get_parent_scope_plan_provider() const

bool

is_derived() const

void

populate_blackboard(blackboard: Blackboard, overwrite: bool, prefetch_root: Node, prefetch_root_for_base_plan: Node = null)

void

set_base_plan(blackboard_plan: BlackboardPlan)

void

set_parent_scope_plan_provider(callable: Callable)

void

sync_with_base_plan()

+
+
+
+

Property Descriptions

+

bool prefetch_nodepath_vars = true 🔗

+
    +
  • void set_prefetch_nodepath_vars(value: bool)

  • +
  • bool is_prefetching_nodepath_vars()

  • +
+

Enables or disables NodePath variable prefetching. If true, NodePath values will be replaced with node instances when the Blackboard is created.

+
+
+
+

Method Descriptions

+

Blackboard create_blackboard(prefetch_root: Node, parent_scope: Blackboard = null, prefetch_root_for_base_plan: Node = null) 🔗

+

Constructs a new instance of a Blackboard using this plan. If NodePath prefetching is enabled, prefetch_root will be used to retrieve node instances for NodePath variables and substitute their values.

+
+

BlackboardPlan get_base_plan() const 🔗

+

Returns the base plan. See is_derived.

+
+

Callable get_parent_scope_plan_provider() const 🔗

+

Returns the parent scope plan provider - a callable that returns a BlackboardPlan.

+
+

bool is_derived() const 🔗

+

Returns true if this plan is derived from another, i.e., the base plan is not null. A derived plan can only contain variables that are present in the base plan, and only variable values can be different.

+
+

void populate_blackboard(blackboard: Blackboard, overwrite: bool, prefetch_root: Node, prefetch_root_for_base_plan: Node = null) 🔗

+

Populates blackboard with the variables from this plan. If overwrite is true, existing variables with the same names will be overwritten. If NodePath prefetching is enabled, prefetch_root will be used to retrieve node instances for NodePath variables and substitute their values.

+
+

void set_base_plan(blackboard_plan: BlackboardPlan) 🔗

+

Sets the base plan. If assigned, this plan will be derived from the base plan.

+

Use with caution, as it will remove variables not present in the base plan. Only use this for custom tooling.

+
+

void set_parent_scope_plan_provider(callable: Callable) 🔗

+

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.

+
+

void sync_with_base_plan() 🔗

+

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.

+
+
+
+

BT

+

Inherits:

+

Inherited By: BTTask

+

Base of BTTask.

+
+
+

Enumerations

+

enum Status: 🔗

+

Status FRESH = 0

+

Task wasn’t executed yet or it was aborted and reset.

+

Status RUNNING = 1

+

Task is being performed and hasn’t finished yet.

+

Status FAILURE = 2

+

Task has finished with failure.

+

Status SUCCESS = 3

+

Task has finished with success.

+
+
+
+

BTAction

+

Inherits: BTTask < BT

+

Inherited By: BTAwaitAnimation, BTCallMethod, BTConsolePrint, BTEvaluateExpression, BTFail, BTPauseAnimation, BTPlayAnimation, BTRandomWait, BTSetAgentProperty, BTSetVar, BTStopAnimation, BTWait, BTWaitTicks

+

Base class for all BehaviorTree actions.

+
+

Description

+

Base class for all actions within a BehaviorTree. You can create your own actions by extending the BTAction class.

+

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.

+

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 RUNNING status. When the task is finished, the action returns either SUCCESS or FAILURE to indicate the outcome.

+
+
+
+

BTAlwaysFail

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that converts SUCCESS into FAILURE.

+
+
+

BTAlwaysSucceed

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that converts FAILURE into SUCCESS.

+
+
+

BTAwaitAnimation

+

Inherits: BTAction < BTTask < BT

+

BT action that waits for an animation to finish playing.

+
+

Description

+

BTAwaitAnimation action waits for an animation on the specified AnimationPlayer node to finish playing and returns SUCCESS.

+

Returns SUCCESS if the specified animation has finished playing or if the specified animation is not currently playing.

+

Returns FAILURE if the specified animation doesn’t exist or if the action fails to get the AnimationPlayer node.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

StringName

animation_name

&""

BBNode

animation_player

float

max_time

1.0

+
+
+
+

Property Descriptions

+

StringName animation_name = &"" 🔗

+
    +
  • void set_animation_name(value: StringName)

  • +
  • StringName get_animation_name()

  • +
+

Animation’s key within the AnimationPlayer node.

+
+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

Parameter that specifies the AnimationPlayer node.

+
+

float max_time = 1.0 🔗

+
    +
  • void set_max_time(value: float)

  • +
  • float get_max_time()

  • +
+

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 SUCCESS.

+
+
+
+

BTCallMethod

+

Inherits: BTAction < BTTask < BT

+

BT action that calls a method on a specified Node or Object.

+
+

Description

+

BTCallMethod action calls a method on the specified Node or Object instance and returns SUCCESS.

+

Returns FAILURE if the action encounters an issue during the method execution.

+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + +

Array[BBVariant]

args

[]

bool

args_include_delta

false

StringName

method

&""

BBNode

node

StringName

result_var

&""

+
+
+
+

Property Descriptions

+

Array[BBVariant] args = [] 🔗

+ +

The arguments to be passed when calling the method.

+
+

bool args_include_delta = false 🔗

+
    +
  • void set_include_delta(value: bool)

  • +
  • bool is_delta_included()

  • +
+

Include delta as a first parameter and shift the position of the rest of the arguments if any.

+
+

StringName method = &"" 🔗

+
    +
  • void set_method(value: StringName)

  • +
  • StringName get_method()

  • +
+

The name of the method to be called.

+
+

BBNode node 🔗

+
    +
  • void set_node_param(value: BBNode)

  • +
  • BBNode get_node_param()

  • +
+

Specifies the Node or Object instance containing the method to be called.

+
+

StringName result_var = &"" 🔗

+
    +
  • void set_result_var(value: StringName)

  • +
  • StringName get_result_var()

  • +
+

if non-empty, assign the result of the method call to the blackboard variable specified by this property.

+
+
+
+

BTCheckAgentProperty

+

Inherits: BTCondition < BTTask < BT

+

BT condition that checks agent’s property value.

+
+

Description

+

BTCheckAgentProperty examines the agent’s property value and compares it to value.

+

Returns SUCCESS or FAILURE based on the check_type.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

CheckType

check_type

0

StringName

property

&""

BBVariant

value

+
+
+
+

Property Descriptions

+

CheckType check_type = 0 🔗

+ +

The type of check to be performed.

+
+

StringName property = &"" 🔗

+
    +
  • void set_property(value: StringName)

  • +
  • StringName get_property()

  • +
+

Parameter that specifies the agent’s property to be compared.

+
+

BBVariant value 🔗

+ +

Parameter that specifies the value against which an agent’s property will be compared.

+
+
+
+

BTCheckTrigger

+

Inherits: BTCondition < BTTask < BT

+

BT condition that checks a trigger (a boolean variable).

+
+

Description

+

BTCheckTrigger verifies whether the variable is set to true. If it is, the task switches it to false and returns SUCCESS. Otherwise, it returns FAILURE.

+

BTCheckTrigger can function as a “gate” within a BTSequence: when the trigger variable is set to true, it permits the execution of subsequent tasks and then changes the variable to false.

+
+
+

Properties

+ + + + + + + +

StringName

variable

&""

+
+
+
+

Property Descriptions

+

StringName variable = &"" 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

A boolean variable on the blackboard used as a trigger. See also BTTask.blackboard.

+

If variable’s value is true, BTCheckTrigger will switch it to false and return SUCCESS.

+

If variable’s value is false, BTCheckTrigger will return FAILURE.

+
+
+
+

BTCheckVar

+

Inherits: BTCondition < BTTask < BT

+

BT condition that checks a variable on the blackboard.

+
+

Description

+

BTCheckVar evaluates the variable against value and returns SUCCESS or FAILURE based on the check_type.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

CheckType

check_type

0

BBVariant

value

StringName

variable

&""

+
+
+
+

Property Descriptions

+

CheckType check_type = 0 🔗

+ +

The type of check to be performed.

+
+

BBVariant value 🔗

+ +

A parameter that specifies the value against which the variable will be compared.

+
+

StringName variable = &"" 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

The name of the variable to check its value.

+
+
+
+

BTComment

+

Inherits: BTTask < BT

+

BTComment adds annotations or explanatory notes to a BehaviorTree.

+
+

Description

+

BTComment is used to add annotations or explanatory notes to a BehaviorTree.

+

Comments are not executed as part of the tree and are removed from runtime instances of the BehaviorTree.

+
+
+
+

BTComposite

+

Inherits: BTTask < BT

+

Inherited By: BTDynamicSelector, BTDynamicSequence, BTParallel, BTProbabilitySelector, BTRandomSelector, BTRandomSequence, BTSelector, BTSequence

+

Base class for BT composite tasks.

+
+

Description

+

Base class for all BehaviorTree composite tasks. You can create your own composite tasks by extending the BTComposite class.

+

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.

+
+
+
+

BTCondition

+

Inherits: BTTask < BT

+

Inherited By: BTCheckAgentProperty, BTCheckTrigger, BTCheckVar

+

Base class for BT conditions.

+
+

Description

+

Base class for all BehaviorTree conditions. You can create your own conditions by extending the BTCondition class.

+

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.

+

Conditions typically don’t take multiple ticks to finish and return either SUCCESS or FAILURE immediately.

+
+
+
+

BTConsolePrint

+

Inherits: BTAction < BTTask < BT

+

BT action task that outputs text to the console.

+
+

Description

+

BTConsolePrint action outputs text to the console and returns SUCCESS. It can include placeholders for format arguments similar to GDScript’s % operator.

+
+
+

Properties

+ + + + + + + + + + + +

PackedStringArray

bb_format_parameters

PackedStringArray()

String

text

""

+
+
+
+

Property Descriptions

+

PackedStringArray bb_format_parameters = PackedStringArray() 🔗

+
    +
  • void set_bb_format_parameters(value: PackedStringArray)

  • +
  • PackedStringArray get_bb_format_parameters()

  • +
+

The values of format parameters are used as format arguments for the text that will be printed.

+

Note: The returned array is copied and any changes to it will not update the original property value. See PackedStringArray for more details.

+
+

String text = "" 🔗

+
    +
  • void set_text(value: String)

  • +
  • String get_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.

+
+
+
+

BTCooldown

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that executes its child task only if duration time has passed since the previous execution.

+
+

Description

+

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 true.

+

Returns RUNNING, if the child task results in RUNNING.

+

Returns SUCCESS, if the child task results in SUCCESS, and triggers the cooldown timer.

+

Returns FAILURE, if the child task results in FAILURE or if duration time didn’t pass since the previous execution.

+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + +

StringName

cooldown_state_var

&""

float

duration

10.0

bool

process_pause

false

bool

start_cooled

false

bool

trigger_on_failure

false

+
+
+
+

Property Descriptions

+

StringName cooldown_state_var = &"" 🔗

+
    +
  • void set_cooldown_state_var(value: StringName)

  • +
  • StringName get_cooldown_state_var()

  • +
+

A boolean variable used to store the cooldown state in the Blackboard. If left empty, the variable will be automatically generated and assigned.

+

If the variable’s value is set to true, 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.

+
+

float duration = 10.0 🔗

+
    +
  • void set_duration(value: float)

  • +
  • float get_duration()

  • +
+

Time to wait before permitting another child’s execution.

+
+

bool process_pause = false 🔗

+
    +
  • void set_process_pause(value: bool)

  • +
  • bool get_process_pause()

  • +
+

If true, process cooldown when the SceneTree is paused.

+
+

bool start_cooled = false 🔗

+
    +
  • void set_start_cooled(value: bool)

  • +
  • bool get_start_cooled()

  • +
+

If true, initiate a cooldown as if the child had been executed before the first BT tick.

+
+

bool trigger_on_failure = false 🔗

+
    +
  • void set_trigger_on_failure(value: bool)

  • +
  • bool get_trigger_on_failure()

  • +
+

If true, the cooldown will be activated if the child task also returns FAILURE. Otherwise, the cooldown will only be triggered when the child task returns SUCCESS.

+
+
+
+

BTDecorator

+

Inherits: BTTask < BT

+

Inherited By: BTAlwaysFail, BTAlwaysSucceed, BTCooldown, BTDelay, BTForEach, BTInvert, BTNewScope, BTProbability, BTRepeat, BTRepeatUntilFailure, BTRepeatUntilSuccess, BTRunLimit, BTTimeLimit

+

Base class for BT decorators.

+
+

Description

+

Base class for all BehaviorTree decorators. You can create your own decorators by extending the BTDecorator class.

+

A decorator is a task within a BehaviorTree that alters the behavior of its child task. Decorators can have only one child task.

+

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.

+
+
+
+

BTDelay

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that introduces a delay before executing its child task.

+
+

Description

+

BTDelay introduces a delay of seconds before executing its child task. Returns RUNNING during the delay period.

+
+
+

Properties

+ + + + + + + +

float

seconds

1.0

+
+
+
+

Property Descriptions

+

float seconds = 1.0 🔗

+
    +
  • void set_seconds(value: float)

  • +
  • float get_seconds()

  • +
+

Delay duration in seconds.

+
+
+
+

BTDynamicSelector

+

Inherits: BTComposite < BTTask < BT

+

BT composite that executes tasks from scratch every tick until first SUCCESS.

+
+

Description

+

BTDynamicSelector executes its child tasks sequentially, from first to last, until any child returns SUCCESS. 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.

+

Returns RUNNING if a child task results in RUNNING. BTDynamicSelector will remember the last RUNNING 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 FAILURE, it will abort the remembered RUNNING task.

+

Returns FAILURE if all child tasks result in FAILURE.

+

Returns SUCCESS if a child task results in SUCCESS.

+
+
+
+

BTDynamicSequence

+

Inherits: BTComposite < BTTask < BT

+

BT composite that executes tasks from scratch every tick as long as they return SUCCESS.

+
+

Description

+

BTDynamicSequence executes its child tasks sequentially, from first to last, for as long as they return SUCCESS. 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 RUNNING action when any condition results in FAILURE.

+

Returns RUNNING if a child task results in RUNNING. BTDynamicSequence will remember the last RUNNING 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 SUCCESS, it will abort the remembered RUNNING task.

+

Returns FAILURE if a child task results in FAILURE.

+

Returns SUCCESS if all child tasks result in SUCCESS.

+
+
+
+

BTEvaluateExpression

+

Inherits: BTAction < BTTask < BT

+

BT action that evaluates an Expression against a specified Node or Object.

+
+

Description

+

BTEvaluateExpression action evaluates an expression_string on the specified Node or Object instance and returns SUCCESS when the Expression executes successfully.

+

Returns FAILURE if the action encounters an issue during the Expression parsing or execution.

+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

String

expression_string

""

bool

input_include_delta

false

PackedStringArray

input_names

PackedStringArray()

Array[BBVariant]

input_values

[]

BBNode

node

StringName

result_var

&""

+
+
+

Methods

+ + + + + + +

Error

parse()

+
+
+
+

Property Descriptions

+

String expression_string = "" 🔗

+
    +
  • void set_expression_string(value: String)

  • +
  • String get_expression_string()

  • +
+

The expression string to be parsed and executed.

+

Warning: Call parse after updating expression_string to update the internal Expression as it won’t be updated automatically.

+
+

bool input_include_delta = false 🔗

+
    +
  • void set_input_include_delta(value: bool)

  • +
  • bool is_input_delta_included()

  • +
+

If enabled, the input variable delta will be added to input_names and input_values.

+

Warning: Call parse after toggling input_include_delta to update the internal Expression as it won’t be updated automatically.

+
+

PackedStringArray input_names = PackedStringArray() 🔗

+
    +
  • void set_input_names(value: PackedStringArray)

  • +
  • PackedStringArray get_input_names()

  • +
+

List of variable names within expression_string for which the user will provide values for through input_values.

+

Warning: Call parse after updating input_names to update the internal Expression as it won’t be updated automatically.

+

Note: The returned array is copied and any changes to it will not update the original property value. See PackedStringArray for more details.

+
+

Array[BBVariant] input_values = [] 🔗

+ +

List of values for variables specified in input_names. The values are mapped to the variables by their array index.

+
+

BBNode node 🔗

+
    +
  • void set_node_param(value: BBNode)

  • +
  • BBNode get_node_param()

  • +
+

Specifies the Node or Object instance containing the method to be called.

+
+

StringName result_var = &"" 🔗

+
    +
  • void set_result_var(value: StringName)

  • +
  • StringName get_result_var()

  • +
+

if non-empty, assign the result of the method call to the blackboard variable specified by this property.

+
+
+
+

Method Descriptions

+

Error parse() 🔗

+

Calls Expression.parse considering input_include_delta and input_names and returns its error code.

+
+
+
+

BTFail

+

Inherits: BTAction < BTTask < BT

+

BT action that always returns FAILURE.

+
+
+

BTForEach

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that executes its child task for each element of an Array.

+
+

Description

+

BTForEach executes its child task for each element of an Array. During each iteration, the next element is stored in the specified Blackboard variable.

+

Returns RUNNING if the child task results in RUNNING or if the child task results in SUCCESS on a non-last iteration.

+

Returns FAILURE if the child task results in FAILURE.

+

Returns SUCCESS if the child task results in SUCCESS on the last iteration.

+
+
+

Properties

+ + + + + + + + + + + +

StringName

array_var

&""

StringName

save_var

&""

+
+
+
+

Property Descriptions

+

StringName array_var = &"" 🔗

+
    +
  • void set_array_var(value: StringName)

  • +
  • StringName get_array_var()

  • +
+

A variable within the Blackboard that holds an Array, which is used for the iteration process.

+
+

StringName save_var = &"" 🔗

+
    +
  • void set_save_var(value: StringName)

  • +
  • StringName get_save_var()

  • +
+

A Blackboard variable used to store an element of the array referenced by array_var.

+
+
+
+

BTInstance

+

Inherits:

+

Represents a runtime instance of a BehaviorTree resource.

+
+

Description

+

Can be created using the BehaviorTree.instantiate method.

+
+
+

Properties

+ + + + + + + +

bool

monitor_performance

false

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Node

get_agent() const

Blackboard

get_blackboard() const

Status

get_last_status() const

Node

get_owner_node() const

BTTask

get_root_task() const

String

get_source_bt_path() const

bool

is_instance_valid() const

void

register_with_debugger()

void

unregister_with_debugger()

Status

update(delta: float)

+
+
+
+

Signals

+

freed() 🔗

+

Emitted when the behavior tree instance is freed. Used by debugger to unregister.

+
+

updated(status: int) 🔗

+

Emitted when the behavior tree instance has finished updating.

+
+
+
+

Property Descriptions

+

bool monitor_performance = false 🔗

+
    +
  • void set_monitor_performance(value: bool)

  • +
  • bool get_monitor_performance()

  • +
+

If true, adds a performance monitor for this instance to “Debugger->Monitors” in the editor.

+
+
+
+

Method Descriptions

+

Node get_agent() const 🔗

+

Returns the agent of the behavior tree instance.

+
+

Blackboard get_blackboard() const 🔗

+

Returns the blackboard of the behavior tree instance.

+
+

Status get_last_status() const 🔗

+

Returns the execution status of the last update.

+
+

Node get_owner_node() const 🔗

+

Returns the scene Node that owns this behavior tree instance.

+
+

BTTask get_root_task() const 🔗

+

Returns the root task of the behavior tree instance.

+
+

String get_source_bt_path() const 🔗

+

Returns the file path to the behavior tree resource that was used to create this instance.

+
+

bool is_instance_valid() const 🔗

+

Returns true if the behavior tree instance is properly initialized and can be used.

+
+

void register_with_debugger() 🔗

+

Registers the behavior tree instance with the debugger.

+
+

void unregister_with_debugger() 🔗

+

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.

+
+

Status update(delta: float) 🔗

+

Ticks the behavior tree instance and returns its status.

+
+
+
+

BTInvert

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that transforms FAILURE into SUCCESS and SUCCESS into FAILURE.

+
+

Description

+

BTInvert transforms FAILURE into SUCCESS and SUCCESS into FAILURE.

+
+
+
+

BTNewScope

+

Inherits: BTDecorator < BTTask < BT

+

Inherited By: BTSubtree

+

BT decorator that creates a new Blackboard scope.

+
+

Description

+

BTNewScope creates a new Blackboard scope during initialization and populates it with data. See Blackboard.

+

Returns the status of the child task execution.

+
+
+

Properties

+ + + + + + +

BlackboardPlan

blackboard_plan

+
+
+
+

Property Descriptions

+

BlackboardPlan blackboard_plan 🔗

+ +

Stores and manages variables that will be used in constructing new Blackboard instances.

+
+
+
+

BTParallel

+

Inherits: BTComposite < BTTask < BT

+

BT composite that executes all of its child tasks simultaneously.

+
+

Description

+

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 RUNNING will be terminated, and the result will be either FAILURE or SUCCESS. 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.

+

If set to repeat, all child tasks will be re-executed each tick, regardless of whether they previously resulted in SUCCESS or FAILURE.

+

Returns FAILURE when the required number of child tasks result in FAILURE. When repeat is set to false, if none of the criteria were met and all child tasks resulted in either SUCCESS or FAILURE, BTParallel will return FAILURE.

+

Returns SUCCESS when the required number of child tasks result in SUCCESS.

+

Returns RUNNING if none of the criterea were fulfilled, and either repeat is set to true or a child task resulted in RUNNING.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

int

num_failures_required

1

int

num_successes_required

1

bool

repeat

false

+
+
+
+

Property Descriptions

+

int num_failures_required = 1 🔗

+
    +
  • void set_num_failures_required(value: int)

  • +
  • int get_num_failures_required()

  • +
+

If the specified number of child tasks return FAILURE, BTParallel will also return FAILURE.

+
+

int num_successes_required = 1 🔗

+
    +
  • void set_num_successes_required(value: int)

  • +
  • int get_num_successes_required()

  • +
+

If the specified number of child tasks return SUCCESS, BTParallel will also return SUCCESS.

+
+

bool repeat = false 🔗

+
    +
  • void set_repeat(value: bool)

  • +
  • bool get_repeat()

  • +
+

When true, the child tasks will be executed again, regardless of whether they previously resulted in a SUCCESS or FAILURE.

+

When false, if none of the criteria were met, and all child tasks resulted in a SUCCESS or FAILURE, BTParallel will return FAILURE.

+
+
+
+

BTPauseAnimation

+

Inherits: BTAction < BTTask < BT

+

BT action that pauses the playback of an animation on the specified AnimationPlayer node.

+
+

Description

+

BTPauseAnimation action pauses the playback of an animation on the specified AnimationPlayer node and returns SUCCESS.

+

Returns FAILURE if the action fails to get the AnimationPlayer node.

+
+
+

Properties

+ + + + + + +

BBNode

animation_player

+
+
+
+

Property Descriptions

+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

Parameter that specifies the AnimationPlayer node.

+
+
+
+

BTPlayAnimation

+

Inherits: BTAction < BTTask < BT

+

BT action that plays an animation on the specified AnimationPlayer node.

+
+

Description

+

BTPlayAnimation action plays an animation on the specified AnimationPlayer node. If the await_completion is greater than 0, the action will wait for the animation to complete, with the maximum waiting time equal to await_completion.

+

Returns SUCCESS if the animation finishes playing or if the elapsed time exceeds await_completion. When await_completion is set to 0, BTPlayAnimation doesn’t wait for the animation to finish and immediately returns SUCCESS.

+

Returns RUNNING if the animation is still playing and the elapsed time is less than await_completion.

+

Returns FAILURE if the action fails to play the requested animation.

+
+
+

Properties

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

StringName

animation_name

&""

BBNode

animation_player

float

await_completion

0.0

float

blend

-1.0

bool

from_end

false

float

speed

1.0

+
+
+
+

Property Descriptions

+

StringName animation_name = &"" 🔗

+
    +
  • void set_animation_name(value: StringName)

  • +
  • StringName get_animation_name()

  • +
+

Animation’s key within the AnimationPlayer node. If empty, BTPlayAnimation will resume the last played animation if the AnimationPlayer was previously paused.

+
+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

Parameter that specifies the AnimationPlayer node.

+
+

float await_completion = 0.0 🔗

+
    +
  • void set_await_completion(value: float)

  • +
  • float get_await_completion()

  • +
+

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 SUCCESS.

+
+

float blend = -1.0 🔗

+
    +
  • void set_blend(value: float)

  • +
  • float get_blend()

  • +
+

Custom blend time (in seconds). See AnimationPlayer.play.

+
+

bool from_end = false 🔗

+
    +
  • void set_from_end(value: bool)

  • +
  • bool get_from_end()

  • +
+

Play animation from the end. Used in combination with negative speed to play animation in reverse. See AnimationPlayer.play.

+
+

float speed = 1.0 🔗

+
    +
  • void set_speed(value: float)

  • +
  • float get_speed()

  • +
+

Custom playback speed scaling ratio. See AnimationPlayer.play.

+
+
+
+

BTProbability

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that executes its child task with a given probability.

+
+

Description

+

BTProbability executes its child task with a given probability defined by run_chance.

+

Returns the result of the child task if it was executed; otherwise, it returns FAILURE.

+
+
+

Properties

+ + + + + + + +

float

run_chance

0.5

+
+
+
+

Property Descriptions

+

float run_chance = 0.5 🔗

+
    +
  • void set_run_chance(value: float)

  • +
  • float get_run_chance()

  • +
+

Probability that defines how likely the child task will be executed.

+
+
+
+

BTProbabilitySelector

+

Inherits: BTComposite < BTTask < BT

+

BT composite that chooses a child task to execute based on attached probabilities.

+
+

Description

+

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.

+

Returns SUCCESS when a child task results in SUCCESS.

+

Returns RUNNING when a child task results in RUNNING.

+

The behavior of BTProbabilitySelector when a child task results in FAILURE depends on the abort_on_failure value:

+
    +
  • If abort_on_failure is false, when a child task results in FAILURE, 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 FAILURE.

  • +
  • If abort_on_failure is true, when a child task results in FAILURE, BTProbabilitySelector will not choose another child task to be executed and will immediately return FAILURE.

  • +
+
+
+

Properties

+ + + + + + + +

bool

abort_on_failure

false

+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

float

get_probability(child_idx: int) const

float

get_total_weight() const

float

get_weight(child_idx: int) const

bool

has_probability(child_idx: int) const

void

set_probability(child_idx: int, probability: float)

void

set_weight(child_idx: int, weight: float)

+
+
+
+

Property Descriptions

+

bool abort_on_failure = false 🔗

+
    +
  • void set_abort_on_failure(value: bool)

  • +
  • bool get_abort_on_failure()

  • +
+

If true, BTProbabilitySelector will not choose another child to execute and will return FAILURE when a child task results in FAILURE.

+
+
+
+

Method Descriptions

+

float get_probability(child_idx: int) const 🔗

+

Returns the child task’s selection probability.

+
+

float get_total_weight() const 🔗

+

Returns the total weight of all child tasks.

+
+

float get_weight(child_idx: int) const 🔗

+

Returns the child task’s weight within the weighted probability selection algorithm.

+
+

bool has_probability(child_idx: int) const 🔗

+

Returns whether the child task at index child_idx participates within the weighted probability selection algorithm and has a probability assigned to it. Returns false for BTComment tasks.

+
+

void set_probability(child_idx: int, probability: float) 🔗

+

Sets the child task’s weight calculated based on the desired probability.

+
+

void set_weight(child_idx: int, weight: float) 🔗

+

Sets the child task’s weight for the weighted probability selection algorithm.

+
+
+
+

BTRandomSelector

+

Inherits: BTComposite < BTTask < BT

+

BT composite that executes tasks in random order until first SUCCESS.

+
+

Description

+

BTRandomSelector executes its child tasks in a random order until any child returns SUCCESS. If a child task results in FAILURE, BTRandomSelector will immediately execute another child task until one of them returns SUCCESS or all of them result in FAILURE.

+

Returns RUNNING if a child task results in RUNNING. BTRandomSelector will remember the execution order and the last child task that returned RUNNING, ensuring it resumes from that point in the next tick.

+

Returns FAILURE if all child tasks result in FAILURE.

+

Returns SUCCESS if a child task results in SUCCESS.

+
+
+
+

BTRandomSequence

+

Inherits: BTComposite < BTTask < BT

+

BT composite that executes tasks in random order as long as they return SUCCESS.

+
+

Description

+

BTRandomSequence executes its child tasks in a random order as long as they return SUCCESS. If a child task results in SUCCESS, BTRandomSequence will immediately execute the next child task until one of them returns FAILURE or all of them result in SUCCESS.

+

Returns RUNNING if a child task results in RUNNING. BTRandomSequence will remember the execution order and the last child task that returned RUNNING, ensuring it resumes from that point in the next tick.

+

Returns FAILURE if a child task results in FAILURE.

+

Returns SUCCESS if all child tasks result in SUCCESS.

+
+
+
+

BTRandomWait

+

Inherits: BTAction < BTTask < BT

+

BT action that waits for a randomized duration to elapse and then returns SUCCESS.

+
+

Description

+

BTRandomWait action waits for a randomized duration to elapse and then returns SUCCESS. The duration is randomized within the specified range, defined by min_duration and max_duration.

+
+
+

Properties

+ + + + + + + + + + + +

float

max_duration

2.0

float

min_duration

1.0

+
+
+
+

Property Descriptions

+

float max_duration = 2.0 🔗

+
    +
  • void set_max_duration(value: float)

  • +
  • float get_max_duration()

  • +
+

Maximum duration for the wait.

+
+

float min_duration = 1.0 🔗

+
    +
  • void set_min_duration(value: float)

  • +
  • float get_min_duration()

  • +
+

Minimum duration for the wait.

+
+
+
+

BTRepeat

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that repeats its child a specified number of times.

+
+

Description

+

BTRepeat iterates its child task a specified number of times, as defined by times. If forever is true, the child’s execution will be repeated indefinitely.

+

Returns RUNNING if the child task results in RUNNING. If forever is true, BTRepeat will always return RUNNING.

+

Returns SUCCESS if the specified number of successful executions is reached. If abort_on_failure is false, a FAILURE status returned by the child is also considered a successful execution.

+

Returns FAILURE if the child task results in FAILURE when abort_on_failure is true.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

bool

abort_on_failure

false

bool

forever

false

int

times

1

+
+
+
+

Property Descriptions

+

bool abort_on_failure = false 🔗

+
    +
  • void set_abort_on_failure(value: bool)

  • +
  • bool get_abort_on_failure()

  • +
+

If false, FAILURE status returned by the child task is also considered as a successful execution.

+
+

bool forever = false 🔗

+
    +
  • void set_forever(value: bool)

  • +
  • bool get_forever()

  • +
+

If true, the child’s execution will be repeated indefinitely, always returning RUNNING.

+
+

int times = 1 🔗

+
    +
  • void set_times(value: int)

  • +
  • int get_times()

  • +
+

The number of times to repeat execution of the child task.

+
+
+
+

BTRepeatUntilFailure

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that repeats its child task until FAILURE.

+
+

Description

+

BTRepeatUntilFailure repeats its child task until it results in FAILURE.

+

Returns RUNNING if the child task results in RUNNING or SUCCESS.

+

Returns SUCCESS if the child task results in FAILURE.

+
+
+
+

BTRepeatUntilSuccess

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that repeats its child task until SUCCESS.

+
+

Description

+

BTRepeatUntilSuccess repeats its child task until it results in SUCCESS.

+

Returns RUNNING if the child task results in RUNNING or FAILURE.

+

Returns SUCCESS if the child task results in SUCCESS.

+
+
+
+

BTRunLimit

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that restricts the execution of its child a limited number of times.

+
+

Description

+

BTRunLimit restricts the execution of the child task to a maximum number of times, defined by run_limit.

+

Returns FAILURE if the limit on executions is exceeded; otherwise, it returns the status of the child task.

+
+
+

Properties

+ + + + + + + + + + + +

CountPolicy

count_policy

0

int

run_limit

1

+
+
+
+

Enumerations

+

enum CountPolicy: 🔗

+

CountPolicy COUNT_SUCCESSFUL = 0

+

Count only successful runs towards the limit.

+

CountPolicy COUNT_FAILED = 1

+

Count only failed runs towards the limit.

+

CountPolicy COUNT_ALL = 2

+

Count successful and failed runs towards the limit.

+
+
+
+

Property Descriptions

+

CountPolicy count_policy = 0 🔗

+ +

Which runs should be counted towards the limit: successful, failed, or all?

+
+

int run_limit = 1 🔗

+
    +
  • void set_run_limit(value: int)

  • +
  • int get_run_limit()

  • +
+

The maximum number of times the child is permitted to be executed.

+
+
+
+

BTSelector

+

Inherits: BTComposite < BTTask < BT

+

BT composite that sequentially executes tasks until first SUCCESS.

+
+

Description

+

BTSelector executes its child tasks sequentially, from first to last, until any child returns SUCCESS. If a child task results in FAILURE, BTSelector will immediately execute the next child task until one of them returns SUCCESS or all of them result in FAILURE. 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.

+

Returns RUNNING if a child task results in RUNNING. BTSelector will remember the last child task that returned RUNNING, ensuring it resumes from that point in the next execution tick.

+

Returns SUCCESS if a child task results in SUCCESS.

+

Returns FAILURE if all child tasks result in FAILURE.

+
+
+
+

BTSequence

+

Inherits: BTComposite < BTTask < BT

+

BT composite that sequentially executes tasks as long as they return SUCCESS.

+
+

Description

+

BTSequence executes its child tasks sequentially, from first to last, as long as they return SUCCESS. If a child task results in SUCCESS, BTSequence will immediately execute the next child task until one of them returns FAILURE or all of them result in SUCCESS. 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.

+

Returns RUNNING if any child task results in RUNNING. BTSequence will remember the last child task that returned RUNNING, ensuring it resumes from that point in the next execution tick.

+

Returns SUCCESS if all child tasks result in SUCCESS.

+

Returns FAILURE if a child task results in FAILURE.

+
+
+
+

BTSetAgentProperty

+

Inherits: BTAction < BTTask < BT

+

BT action that assigns a value to the specified agent’s property.

+
+

Description

+

BTSetAgentProperty assigns the specified value to the agent’s property identified by the property and returns SUCCESS. Optionally, it can perform a specific operation before assignment.

+

Returns FAILURE if it fails to set the property.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

Operation

operation

0

StringName

property

&""

BBVariant

value

+
+
+
+

Property Descriptions

+

Operation operation = 0 🔗

+ +

Specifies the operation to be performed before assignment. Operation is executed as follows:

+

property = property OPERATION value

+
+

StringName property = &"" 🔗

+
    +
  • void set_property(value: StringName)

  • +
  • StringName get_property()

  • +
+

Parameter that specifies the agent’s property name.

+
+

BBVariant value 🔗

+ +

Parameter that specifies the value that will be assigned to agent’s property.

+
+
+
+

BTSetVar

+

Inherits: BTAction < BTTask < BT

+

BT action that assigns value to the variable and then returns SUCCESS.

+
+

Description

+

BTSetVar assigns value to the variable and then returns SUCCESS. Optionally, it can perform a specific operation before assignment.

+

Returns FAILURE if it fails to set the variable.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

Operation

operation

0

BBVariant

value

StringName

variable

&""

+
+
+
+

Property Descriptions

+

Operation operation = 0 🔗

+ +

Specifies the operation to be performed before assignment. Operation is executed as follows:

+

variable = variable OPERATION value

+
+

BBVariant value 🔗

+ +

Parameter that specifies the value to be assigned to the variable.

+
+

StringName variable = &"" 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

Name of the variable to which the value will be assigned.

+
+
+
+

BTStopAnimation

+

Inherits: BTAction < BTTask < BT

+

BT action that stops the playback of an animation on the specified AnimationPlayer node.

+
+

Description

+

BTStopAnimation action stops the playback of an animation on the specified AnimationPlayer node and returns SUCCESS. If animation_name is set, it will only stop the playback if the specified animation is currently playing.

+

Returns FAILURE if the action fails to get the AnimationPlayer node.

+
+
+

Properties

+ + + + + + + + + + + + + + + +

StringName

animation_name

&""

BBNode

animation_player

bool

keep_state

false

+
+
+
+

Property Descriptions

+

StringName animation_name = &"" 🔗

+
    +
  • void set_animation_name(value: StringName)

  • +
  • StringName get_animation_name()

  • +
+

Animation’s key within the AnimationPlayer node. If not empty, BTStopAnimation will only stop the playback if the specified animation is currently playing.

+
+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

Parameter that specifies the AnimationPlayer node.

+
+

bool keep_state = false 🔗

+
    +
  • void set_keep_state(value: bool)

  • +
  • bool get_keep_state()

  • +
+

If true, the animation state is not updated visually.

+
+
+
+

BTSubtree

+

Inherits: BTNewScope < BTDecorator < BTTask < BT

+

BT decorator that instantiates and runs a subtree within the larger tree.

+
+

Description

+

BTSubtree instantiates a BehaviorTree and includes its root task as a child during initialization, while also creating a new Blackboard scope.

+

Returns the status of the subtree’s execution.

+

Subtree blackboard variables can be mapped to the main tree blackboard plan variables. Check out mapping section in the inspector.

+

Note: BTSubTree is designed as a simpler loader, and does not support updating subtree at runtime. A custom subtree decorator is better suited:

+
extends BTDecorator
+## MyCustomBranch
+
+func _setup() -> void:
+    var bt: BehaviorTree = load("res://...")
+    var my_branch: BTTask = bt.get_root_task().clone()
+    my_branch.initialize(agent, blackboard)
+    add_child(my_branch)
+
+func _tick(delta) -> Status:
+    var child: BTTask = get_child(0)
+    return child.execute(delta)
+
+
+

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.

+
+
+

Properties

+ + + + + + +

BehaviorTree

subtree

+
+
+
+

Property Descriptions

+

BehaviorTree subtree 🔗

+ +

A BehaviorTree resource that will be instantiated as a subtree.

+
+
+
+

BTTimeLimit

+

Inherits: BTDecorator < BTTask < BT

+

BT decorator that sets a time limit for its child’s execution.

+
+

Description

+

BTTimeLimit allocates a limited time for the child’s execution and aborts it, returning FAILURE if the time_limit is exceeded.

+

Returns FAILURE if the time_limit is exceeded; otherwise, it returns the status of the child task.

+
+
+

Properties

+ + + + + + + +

float

time_limit

5.0

+
+
+
+

Property Descriptions

+

float time_limit = 5.0 🔗

+
    +
  • void set_time_limit(value: float)

  • +
  • float get_time_limit()

  • +
+

Time allocated for the child task’s execution.

+
+
+
+

BTWait

+

Inherits: BTAction < BTTask < BT

+

BT action that waits for a specified duration to elapse and then returns SUCCESS.

+
+

Properties

+ + + + + + + +

float

duration

1.0

+
+
+
+

Property Descriptions

+

float duration = 1.0 🔗

+
    +
  • void set_duration(value: float)

  • +
  • float get_duration()

  • +
+
+

There is currently no description for this property. Please help us by contributing one!

+
+
+
+
+

BTWaitTicks

+

Inherits: BTAction < BTTask < BT

+

BT action that waits for a specified number of ticks to elapse and then returns SUCCESS.

+
+

Properties

+ + + + + + + +

int

num_ticks

1

+
+
+
+

Property Descriptions

+

int num_ticks = 1 🔗

+
    +
  • void set_num_ticks(value: int)

  • +
  • int get_num_ticks()

  • +
+

The number of ticks to wait before returning SUCCESS.

+
+
+
+

LimboUtility

+

Inherits:

+

Helper functions for LimboAI.

+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

String

decorate_output_var(variable: String) const

String

decorate_var(variable: String) const

String

get_check_operator_string(check: CheckType) const

String

get_operation_string(operation: Operation) const

String

get_status_name(status: int) const

Texture2D

get_task_icon(class_or_script_path: String) const

bool

perform_check(check: CheckType, a: Variant, b: Variant)

Variant

perform_operation(operation: Operation, a: Variant, b: Variant)

+
+
+
+

Enumerations

+

enum CheckType: 🔗

+

CheckType CHECK_EQUAL = 0

+

Equality Check.

+

CheckType CHECK_LESS_THAN = 1

+

Less Than Check.

+

CheckType CHECK_LESS_THAN_OR_EQUAL = 2

+

Less Than or Equal To Check.

+

CheckType CHECK_GREATER_THAN = 3

+

Greater Than Check.

+

CheckType CHECK_GREATER_THAN_OR_EQUAL = 4

+

Greater Than or Equal To Check

+

CheckType CHECK_NOT_EQUAL = 5

+

Inequality Check.

+
+

enum Operation: 🔗

+

Operation OPERATION_NONE = 0

+

No operation.

+

Operation OPERATION_ADDITION = 1

+

Arithmetic addition.

+

Operation OPERATION_SUBTRACTION = 2

+

Arithmetic subtraction.

+

Operation OPERATION_MULTIPLICATION = 3

+

Arithmetic multiplication.

+

Operation OPERATION_DIVISION = 4

+

Arithmetic division.

+

Operation OPERATION_MODULO = 5

+

Produces the remainder of an integer division.

+

Operation OPERATION_POWER = 6

+

Multiply a by itself b times.

+

Operation OPERATION_BIT_SHIFT_LEFT = 7

+

Bitwise left shift.

+

Operation OPERATION_BIT_SHIFT_RIGHT = 8

+

Bitwise right shift.

+

Operation OPERATION_BIT_AND = 9

+

Bitwise AND.

+

Operation OPERATION_BIT_OR = 10

+

Bitwise OR.

+

Operation OPERATION_BIT_XOR = 11

+

Bitwise XOR.

+
+
+
+

Method Descriptions

+

String decorate_output_var(variable: String) const 🔗

+

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.

+
+

String decorate_var(variable: String) const 🔗

+

Produces a string with a Blackboard variable name that is formatted for display or console output.

+
+

String get_check_operator_string(check: CheckType) const 🔗

+

Returns an operator string for a CheckType enum value. For example, CHECK_EQUAL returns “==”.

+
+

String get_operation_string(operation: Operation) const 🔗

+

Returns a string representation of an Operation enum value.

+
+

String get_status_name(status: int) const 🔗

+

Returns a name of a BTTask status code.

+
+

Texture2D get_task_icon(class_or_script_path: String) const 🔗

+

Returns the icon texture associated with a task based on its class name or script resource path.

+
+

bool perform_check(check: CheckType, a: Variant, b: Variant) 🔗

+

Performs a check on two values, a and b, and returns true if the check passes.

+
+

Variant perform_operation(operation: Operation, a: Variant, b: Variant) 🔗

+

Performs an operation on two values, a and b, and returns the result.

+
+
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2023-present Serhii Snitsaruk and the LimboAI contributors.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/limboai-stable/index.zh.html b/docs/limboai-stable/index.zh.html new file mode 100644 index 0000000..978f0ef --- /dev/null +++ b/docs/limboai-stable/index.zh.html @@ -0,0 +1,4190 @@ + + + + + + +LimboAI 1.0 文档 + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+
+

LimboAI 文档

+

LimboAI 是一个面向 Godot Engine 4 的开源 C++ 模块,将行为树与状态机结合在一起,用于打造你游戏的 AI。它自带行为树编辑器、内置文档、可视化调试器等!虽然它是用 C++ 实现的,但完全支持用 GDScript 来创建你自己的任务和状态。完整功能列表见 LimboAI GitHub 页面。

+

行为树是一种强大的层次结构,用于建模和控制游戏中智能体(例如角色、敌人、实体)的行为。它旨在让你更轻松地为游戏创建复杂且高度模块化的行为。想进一步了解行为树,请参阅行为树简介。

+

分层状态机是一种有限状态机,允许任意状态拥有自己的子状态机。这样你就可以把一个庞大的状态机拆解为多个较小的状态机,从而应对 AI 在状态与状态转换上的复杂度。

+
+
+

获取 LimboAI

+

LimboAI 既可以作为 C++ 模块使用,也可以作为 GDExtension 共享库使用。两者之间存在一些差异。简而言之,GDExtension 版本使用起来更方便,但功能上略有受限。模块版本提供更好的编辑器体验,性能也稍好一些,但需要使用包含导出模板的自定义引擎构建。无论你选择哪种方式,你的项目都能同时兼容两者,随时可以互相切换。

+

选择你想使用的版本。如果拿不定主意,就从 GDExtension 版本开始。你随时可以改变决定 —— 两个版本完全兼容。

+
+

获取 GDExtension 版本

+

官方 LimboAI GitHub 页面以及资源库(Asset Library)中都提供了预编译版本。

+

GDExtension 是使用 LimboAI 插件最便捷的方式,但它有一些限制:

+
    +
  • 不提供文档提示(tooltip)。

  • +
  • 由于依赖 Godot API 中不存在的引擎类,扩展版本中无法使用便捷的 BBParam 属性编辑器。

    +
    +

    🛈 另见:什么是 GDExtension?

    +
    +
  • +
+

安装步骤:

+
    +
  1. 确认你正在使用最新稳定版的 Godot 编辑器。

  2. +
  3. 为你的 LimboAI 实验创建一个新项目。

  4. +
  5. 在 Godot 中点击屏幕顶部的 AssetLib 标签,搜索 LimboAI 并下载。LimboAI 插件会连同示例项目文件一起下载。此时打印出的错误可以忽略,那是因为扩展库尚未加载。

  6. +
  7. 用 Project -> Reload project 重新加载项目。现在应该不会再打印任何错误了。

  8. +
  9. 在项目文件中找到名为 showcase.tscn 的场景文件并运行它。它是示例的入口点。

  10. +
+
+
+

获取模块版本

+

官方 LimboAI GitHub 页面提供预编译版本。

+

安装步骤:

+
    +
  1. 在 GitHub releases 中,下载适用于你平台的最新预编译发行版。

  2. +
  3. 从同一个发行版中下载示例项目压缩包。

  4. +
  5. 解压预编译编辑器与示例项目文件。

  6. +
  7. 启动预编译的编辑器可执行文件,导入并打开示例项目。

  8. +
  9. 运行项目。

  10. +
+

重要:使用模块版 LimboAI 导出游戏时,请务必使用同一个 GitHub 发行版构建中附带的预编译导出模板。

+
+
+
+

在 C# 中使用 LimboAI

+

下面介绍如何使用模块版本配合 C# 编写你的任务和状态。

+
    +
  1. 找到 LimboAI 的 NuGet 包文件。

  2. +
+

每个提供的构建都带有 GodotSharp 文件夹,其中的包位于 “GodotSharp/Tools/nupkgs/” 下。记下该目录路径,下一步会用到。

+
    +
  1. 使用以下命令添加一个本地 NuGet 包源:

  2. +
+
dotnet nuget add source path/to/limboai/nupkgs --name LimboNugetSource
+
+
+
    +
  1. 你的 C# 项目应该就能看到 LimboAI 的类并成功编译。

  2. +
+

关于 GDExtension,目前我只能确认模块版本与 C# 可以正常工作。遗憾的是,我在 GDExtension 版本上还没有成功过。如果你用 GDExtension 成功了,请通过 Discord 或邮件告诉我。

+
+
+

参与贡献

+

在 Godot 发布第三个 beta 或候选版本之前,我们以 Godot 引擎的最新稳定版作为开发目标。如果你想为本项目做贡献,请确保使用对应的 Godot 版本。

+

我们遵循 Godot 代码风格指南。请使用 clang-format 来保持风格一致。你可以用 pre-commit install 为 Git 安装 pre-commit 钩子,把这一过程自动化。

+

提交拉取请求(Pull Request)时,请保持次版本向后兼容。

+

我们支持把 LimboAI 构建为 Godot 引擎的模块,也支持构建为 GDExtension 库。请确保你的贡献在两种方式下都兼容。我们的 CI 工作流会验证你的改动能否在两种配置下都编译通过。

+
+

作为 Godot 引擎模块编译

+
    +
  1. 克隆 Godot 引擎仓库。

  2. +
  3. 切换到最新的稳定版 tag。

  4. +
  5. 把 LimboAI 仓库克隆到 modules/limboai 目录中。

  6. +
+
git clone https://github.com/godotengine/godot.git
+git checkout 4.3-stable  # Replace "4.3-stable" with the latest stable tag
+git clone https://github.com/limbonaut/limboai modules/limboai
+
+
+

详细的引擎构建说明请参考 Godot 引擎文档。

+

使用 tests=yes 构建选项可以编译单元测试。要运行它们,请带上 --test --tc="*[LimboAI]*" 命令行选项运行编译好的 Godot 可执行文件。

+
+

构建 C# 包

+

如果你希望从源码构建时启用 LimboAI 的 C# 支持,请按照 Godot 关于带 C# 支持从源码构建的说明操作:使用 .NET 编译。LimboAI 的类会包含在该构建流程的输出中。

+
+
+
+

作为 GDExtension 库编译

+

你需要 SCons 构建工具和一个 C++ 编译器。另见编译。运行 scons target=editor 即可为你当前的平台构建插件库。

+
    +
  • 如果 limboai/godot-cpp 目录中还没有 godot-cpp 仓库,SCons 会自动克隆它。

  • +
  • 默认情况下,构建产物会被放到示例项目中:demo/addons/limboai/bin/。

  • +
+

其他选项与目标请查看 scons -h。

+
+
+

为文档做贡献

+

在线文档使用 Sphinx 生成。源文件以 RST 格式放在 doc/source 目录中,可以在本地用 sphinx-build 构建。更多细节请参阅 Sphinx 文档。

+

类文档存放在 doc_classes/ 目录下的 XML 文件中。如果你新建了类或修改了已有类,可以在 Godot 源码根目录下用 --doctool 选项运行编译好的 Godot 可执行文件,用来生成缺失的 XML 文件或类文档中对应文件的缺失片段。编辑完 XML 文件后,请再次用 --doctool 选项运行编译好的编辑器可执行文件,以更新并整理这些 XML 文件。

+

类文档的 Sphinx RST 文件由 XML 文件经 Godot 脚本 make_rst.py 生成,并保存在 doc/source/classes 目录中。该过程由我们自己的脚本 scripts/update_rst.sh 完成。doc/source/classes 中的 RST 文件不应手动编辑。

+
+
+
+
+
+

行为树简介

+
+

🛈 注意:示例项目中包含一个教程,通过直观的示例带你入门行为树。

+
+

行为树(BT)是一种层次结构,用于建模和控制游戏中智能体(例如角色、敌人、实体)的行为。它旨在让你更轻松地为游戏创建复杂且高度模块化的行为。

+

行为树由若干任务组成,这些任务代表具体的动作或决策规则。任务大致可分为两大类:控制任务和叶任务。控制任务决定树内的执行流程,包括 Sequence、Selector 和 Invert。叶任务代表要执行的具体动作(例如移动或攻击),或是需要检查的条件。BTTask 类为行为树的各种积木块提供了基础。这类任务可以通过 Blackboard 共享数据。

+
+

🛈 注意:要创建你自己的动作,请继承 BTAction 类。

+
+

行为树通常每一帧都会处理一次。它自上而下遍历,由控制任务决定控制流。每个任务都有一个 _tick 方法,负责执行任务的工作并返回表示进度的状态:SUCCESS、FAILURE 或 RUNNING。SUCCESS 和 FAILURE 表示已完成工作的结果,而当一个任务需要不止一个 tick 才能完成时,就会返回 RUNNING 状态。这些状态决定树的推进方式,其中 RUNNING 状态通常意味着树会在下一帧继续执行。

+

任务共有四种类型:

+
    +
  • 动作(Actions)是执行实际工作的叶任务。

    + +
  • +
  • 条件(Conditions)是执行各种检查的叶任务。

    + +
  • +
  • 组合任务(Composites)可以拥有一个或多个子任务,并决定子任务的执行流程。

    + +
  • +
  • 装饰器(Decorators)只能拥有一个子任务,用于改变其子任务的运行方式。

    + +
  • +
+

Sequence 是核心组合任务之一。它按顺序从第一个到最后一个执行子任务,直到其中一个返回 FAILURE,或者全部返回 SUCCESS。换句话说,只要有任一子任务返回 FAILURE,Sequence 的执行就会被中止,并且 Sequence 自身会返回 FAILURE。

+

Selector 是另一个必不可少的组合任务。它按顺序从第一个到最后一个执行子任务,直到其中一个返回 SUCCESS 或全部返回 FAILURE。换句话说,当某个子任务返回 FAILURE 时,它就继续尝试下一个,直到找到那个返回 SUCCESS 的子任务。一旦某个子任务返回 SUCCESS,Selector 就会停止,并同样返回 SUCCESS。Selector 的目的就是找出一个能够成功的子任务。

+

行为树通过条件任务来处理条件逻辑。这些任务检查特定条件,并根据智能体或其环境的状态返回 SUCCESS 或 FAILURE(例如 “IsLowOnHealth”、“IsTargetInSight”)。条件可以与 Sequence 和 Selector 搭配使用,构建你的决策逻辑。

+
+

🛈 注意:要创建你自己的条件,请继承 BTCondition 类。

+
+

请查阅 BTTask 类的文档,它为行为树的各种积木块提供了基础。

+
+
+

创建行为树

+

本章介绍如何创建和调试行为树。

+
+

为智能体添加行为树

+

按照以下步骤,为新建或已有的智能体添加行为树:

+
    +
  1. 为你的智能体创建一个场景文件,或者打开一个已有的场景。

  2. +
  3. 在场景中添加一个 BTPlayer 节点。

  4. +
  5. 选中 BTPlayer,在检视面板(Inspector)中新建一个行为树。

  6. +
  7. 你也可以通过该属性的上下文菜单,把行为树保存到文件中。

  8. +
  9. 点击行为树属性,在 LimboAI 编辑器中打开它。

  10. +
+
+
+

调试行为树

+

在 Godot 引擎中,依次打开 “Bottom Panel > Debugger > LimboAI” 标签页。借助 LimboAI 调试器,你可以查看运行中的项目里任何当前处于活动状态的行为树。调试器可以从主编辑器窗口中分离出来,如果你使用 HiDPI 显示器或第二块屏幕,这会特别有用。

+
+

查看任务属性与黑板

+

当你在 LimboAI 调试器中点击某个任务时,它的属性会显示在远程检视面板(Remote Inspector)中,其中包含 Blackboard 引用。点击 Blackboard 可以打开它,查看整条作用域链上的所有变量,并按作用域分组。你还可以实时修改变量值,这对测试和调试游戏 AI 很有帮助。

+
+
+
+
+

创建自定义任务

+

默认情况下,用户任务应放在 res://ai/tasks 目录中。你可以在 Project Settings → Limbo AI 中为用户任务设置其他位置(要看到这些选项,需要在项目设置中启用 Advanced Settings)。

+

用户任务目录下的每个子目录都会被当作一个分类。因此,如果你创建了一个名为 “motion_and_physics” 的子目录,其中的自定义任务会自动归类到 “Motion And Physics” 下。

+

创建自定义任务时,请继承以下基类之一:BTAction、BTCondition、BTDecorator、BTComposite。关于任务类型的更多内容,可阅读行为树简介。

+
+

🛈 注意:为了帮助你编写新任务,你可以通过 “Misc → Create script template” 菜单项向项目中添加脚本模板。

+
+

Blackboard 的使用方法见在任务中访问黑板。

+
+

任务的结构

+
@tool
+extends BTAction
+
+# 任务参数。
+@export var parameter1: float
+@export var parameter2: Vector2
+
+## 注意:每个方法声明都是可选的。
+## 至少只需要定义 "_tick" 方法。
+
+
+# 调用它来为任务生成显示名称(需要 @tool)。
+func _generate_name() -> String:
+    return "MyTask"
+
+
+# 调用它来初始化任务。
+func _setup() -> void:
+    pass
+
+
+# 当任务被进入时调用。
+func _enter() -> void:
+    pass
+
+
+# 当任务被退出时调用。
+func _exit() -> void:
+    pass
+
+
+# 每次该任务被 tick(即被执行)时调用。
+func _tick(delta: float) -> Status:
+    return SUCCESS
+
+
+# 此方法返回的字符串会作为警告显示在编辑器中。
+func _get_configuration_warnings() -> PackedStringArray:
+    var warnings := PackedStringArray()
+    return warnings
+
+
+
+
+

示例 1:一个简单的动作

+
@tool
+extends BTAction
+
+## 显示或隐藏一个节点并返回 SUCCESS。
+## 如果找不到该节点,返回 FAILURE。
+
+# 任务参数。
+@export var node_path: NodePath
+@export var visible := true
+
+
+# 调用它来为任务生成显示名称(需要 @tool)。
+func _generate_name() -> String:
+    return "SetVisible  %s  node_path: \"%s\"" % [visible, node_path]
+
+
+# 每次该任务被 tick(即被执行)时调用。
+func _tick(p_delta: float) -> Status:
+    var n: CanvasItem = scene_root.get_node_or_null(node_path)
+    if is_instance_valid(n):
+        n.visible = visible
+        return SUCCESS
+    return FAILURE
+
+
+
+
+

示例 2:InRange 条件

+
@tool
+extends BTCondition
+
+## InRange 条件检查智能体是否处于目标的某个范围内,
+## 该范围由 distance_min 和 distance_max 定义。
+## 如果智能体处于定义的范围内,返回 SUCCESS;
+## 否则返回 FAILURE。
+
+@export var distance_min: float
+@export var distance_max: float
+@export var target_var: StringName = &"target"
+
+var _min_distance_squared: float
+var _max_distance_squared: float
+
+
+# 调用它来为任务生成显示名称。
+func _generate_name() -> String:
+    return "InRange (%d, %d) of %s" % [distance_min, distance_max,
+        LimboUtility.decorate_var(target_var)]
+
+
+# 调用它来初始化任务。
+func _setup() -> void:
+    _min_distance_squared = distance_min * distance_min
+    _max_distance_squared = distance_max * distance_max
+
+
+# 当任务被执行时调用。
+func _tick(_delta: float) -> Status:
+    var target: Node2D = blackboard.get_var(target_var, null)
+    if not is_instance_valid(target):
+        return FAILURE
+
+    var dist_sq: float = agent.global_position.distance_squared_to(target.global_position)
+    if dist_sq >= _min_distance_squared and dist_sq <= _max_distance_squared:
+        return SUCCESS
+    else:
+        return FAILURE
+
+
+
+
+

用 C# 创建任务

+

自定义任务可以使用以下脚本模板:

+
using Godot;
+using System;
+
+[Tool]
+public partial class _CLASS_ : _BASE_
+{
+    public override string _GenerateName()
+    {
+        return "_CLASS_";
+    }
+
+    public override void _Setup()
+    {
+    }
+
+    public override void _Enter()
+    {
+    }
+
+    public override void _Exit()
+    {
+    }
+
+    public override Status _Tick(double delta)
+    {
+        return Status.Success;
+    }
+
+    public override string[] _GetConfigurationWarnings()
+    {
+        return Array.Empty<string>();
+    }
+}
+
+
+
+
+
+

使用 Blackboard 共享数据

+

为了在不同任务与状态之间共享数据,我们用到了一个称为 Blackboard 的特性。Blackboard 充当中央仓库,任务和状态可以在其中存取具名变量,从而实现无缝的数据交换。每个行为树或状态机实例都拥有自己专属的 Blackboard。它可以存储多种数据类型,包括对象和资源。

+

借助 Blackboard,你可以轻松地在行为树中共享数据,让行为树里的任务更加灵活。

+
+

在任务中访问黑板

+

每个 BTTask 都能访问 Blackboard,这为数据交换提供了直截了当的机制。下面是一个在 GDScript 中与 Blackboard 交互的示例:

+
@export var speed_var: StringName = &"speed"
+
+func _tick(delta: float) -> Status:
+    # 设置 "speed" 变量的值:
+    blackboard.set_var(speed_var, 200.0)
+
+    # 获取 "speed" 变量的值,如果不存在则默认为 100.0:
+    var speed: float = blackboard.get_var(speed_var, 100.0)
+
+    # 检查 "speed" 变量是否存在:
+    if blackboard.has_var(speed_var):
+        # ...
+
+
+

如果你访问的变量持有对象实例,并且该实例可能为 null 或已被释放,可以这样写:

+
@export var object_var: StringName = &"object"
+
+func _tick(delta: float) -> Status:
+    # 获取存储在 "object" 变量中的对象实例。
+    # - 重要:在 GDScript 中不要为 "obj" 指定类型
+    #   以避免实例被释放时出错。
+    var obj = blackboard.get_var(object_var)
+    if is_instance_valid(obj):
+        # ...
+
+
+

建议给变量名属性加上 _var 后缀,如上例所示。这样检视面板就能为该变量提供更便捷的属性编辑器。这个编辑器允许你选择变量,或把它加入黑板计划(blackboard plan),并在黑板计划中不存在该变量时显示警告图标。

+
+

🛈 注意:在代码中设置变量时,该变量不需要事先存在。

+
+
+
+

编辑黑板计划(Blackboard Plan)

+

黑板计划与每个 BehaviorTree 资源相关联,它决定 Blackboard 在每个新的 BehaviorTree 实例中如何初始化。BlackboardPlan 资源存储 BehaviorTree 初始化所需的默认值、类型信息和数据绑定。

+

要从黑板计划中添加、修改或删除变量,请按以下步骤操作:

+
    +
  1. 打开 LimboAI 编辑器,加载你想编辑的行为树。

  2. +
  3. 在编辑器中,点击标签页内的小按钮。这会在检视面板中打开 BlackboardPlan。

  4. +
  5. 在检视面板中点击 “Manage…” 按钮,显示黑板计划编辑器。

  6. +
  7. 在黑板计划编辑器中,你可以添加、删除或重新排列变量,并修改它们的数据类型与提示(hint)。

  8. +
  9. 提示会向检视面板提供关于该变量的附加信息,例如整数变量的最小值和最大值。更多内容请参阅 Godot 官方文档中的属性提示。

  10. +
  11. 你可以直接在检视面板中指定变量的默认值。

  12. +
+
+
+

在 BTPlayer 中覆盖变量

+

每个 BTPlayer 节点也有一个 “Blackboard Plan” 属性,可以覆盖 BehaviorTree 中黑板变量的值。这些覆盖只对 BTPlayer 所在的场景生效,不会影响使用同一个 BehaviorTree 的其他场景。要修改这些值:

+
    +
  1. 在场景树中选中 BTPlayer 节点。

  2. +
  3. 在检视面板中找到 “Blackboard Plan” 属性。

  4. +
  5. 覆盖你想要的值,为特定场景定制黑板变量。

  6. +
+
+
+

任务参数

+

在某些情况下,让行为树任务导出参数会很有帮助,这些参数既可以绑定到黑板变量,也可以由用户直接指定。为此,LimboAI 提供了一些以 “BB” 开头的特殊参数类型,例如 BBInt、BBBool、BBString、BBFloat、BBNode 等等。完整列表请查阅 BBParam 类文档。

+

用法示例:

+
extends BTAction
+
+@export var speed: BBFloat
+
+func _tick(delta: float) -> Status:
+    var current_speed: float = speed.get_value(scene_root, blackboard, 0.0)
+    ...
+
+
+
+
+

把 BT 中的变量连接到 HSM:变量映射

+

每个 BTState 都会为其 BehaviorTree 实例创建一个新的黑板作用域。由于 BehaviorTree 是可复用的资源,可以在不同上下文或不同智能体上运行,它们不会自动看到 HSM 中定义的变量。在运行时,HSM 变量通常可以通过父作用域黑板在 BT 中访问,但推荐的访问方式是通过映射(Mapping)。

+
+

注意

+

要了解更多关于作用域的内容,请参阅 Blackboard。

+
+

当 BehaviorTree 和 HSM 各自在它们的 BlackboardPlan 资源中声明变量后,编辑器会在 BlackboardPlan 检视面板中提供映射(Mapping)区域。映射是连接相关计划之间变量的既定且推荐的方式。

+
+

关于映射的要点

+
    +
  • 映射会把两个变量连接起来,使它们在运行时表现为同一个逻辑变量。

  • +
  • 被链接的变量会在两个作用域中立即同步更新 —— 它们在内存中共享同一份状态(没有轮询,也没有复制)。

  • +
  • 映射是显式的:由你决定 BT 将哪些变量作为输入和输出暴露出来。

  • +
  • 链接是双向的 —— 输入与输出之间没有区别。

  • +
  • 映射不会自动创建新变量 —— 变量必须已经存在于两个黑板计划中,才能被链接。

  • +
+
+
+

检视面板操作流程

+
    +
  1. 分别在各 BlackboardPlan(例如 HSM 计划和 BT 计划)中定义所需的变量。

  2. +
  3. 在场景中选中 BTState 节点,或选中行为树内的 BTSubtree。

  4. +
  5. 在检视面板中选择 Blackboard Plan 属性。

  6. +
  7. 在 BlackboardPlan 资源检视面板中,找到映射(Mapping)区域。

  8. +
  9. 通过配对变量(BT variable ↔ parent variable)来创建映射。

  10. +
  11. 启动时映射会被应用,变量会为运行中的实例自动建立链接。

  12. +
+
+
+

编程替代方案:在代码中链接变量

+

你也可以直接用 Blackboard.link_var 在代码中链接变量:

+
# 示例:用代码把 BT 黑板变量链接到 HSM 黑板变量
+# 假设 `hsm` 是一个 LimboHSM 实例,`bt_state` 是一个 BTState 实例
+var hsm_bb := hsm.get_blackboard()
+var bt_bb := bt_state.get_blackboard()
+
+# 注意:变量名不必相同
+bt_bb.link_var("target_pos", hsm_bb, "target_pos")
+
+
+
+
+

最佳实践

+
    +
  • 在 BT 自己的 BlackboardPlan 中声明所有 BT 依赖,而不要依赖父作用域。

  • +
  • 使用映射(Mapping)明确声明哪些变量应与 HSM 共享。

  • +
  • 优先使用基于检视面板的映射流程,以获得更好的清晰度和编辑器支持;仅在需要运行时或编程式设置时才使用 link_var。

  • +
  • 避免在 BT 任务内部写入 blackboard.get_parent(),除非你有非常明确的理由,并且接受由此带来的耦合。

  • +
+
+
+
+

进阶话题:黑板作用域

+

LimboAI 中的 Blackboard 可以作为另一个 Blackboard 的父作用域。这意味着,如果某个变量在当前作用域中找不到,系统就会到父级 Blackboard 中查找。这样就形成了“黑板作用域链”,链中每个 Blackboard 都可以拥有自己的父作用域,而且链中黑板的数量没有上限。需要注意的是,Blackboard 不会修改父作用域中的值。

+

系统会自动创建作用域,以避免上下文相互独立的环境之间发生命名冲突:

+
    +
  • 在 BTNewScope 内部。

  • +
  • 在 BTSubtree 装饰器之下。

  • +
  • 对于定义了非空黑板计划的 LimboState。

  • +
  • 在 LimboHSM 节点之下:会在根层级创建一个新作用域,每个 BTState 子节点也会获得自己独立的作用域。

  • +
+
+

在多个智能体之间共享数据

+

黑板作用域机制也可以用来在多个智能体之间共享数据。在下面的示例中,我们有一组智能体,希望让它们共享一个共同的目标:

+
extends BTAction
+
+@export var group_target_var: StringName = &"group_target"
+
+func _tick(delta: float) -> Status:
+    if not blackboard.has_var(group_target_var):
+        var new_target: Node = acquire_target()
+        # 设置组内各智能体共享的公共目标:
+        blackboard.top().set_var(group_target_var, new_target)
+
+    # 访问组内各智能体共享的公共目标:
+    var target: Node = blackboard.get_var(group_target_var)
+
+
+

在这个示例中,blackboard.top() 访问 Blackboard 链的根作用域。我们通过代码把该作用域赋给组内的每个智能体:

+
class_name AgentGroup
+extends Node2D
+## AgentGroup 节点:管理组内各智能体共享的 Blackboard。
+## 该节点的子节点被假定为属于同一组的智能体。
+## 该实现假定每个智能体都有一个用于 AI 的 "BTPlayer" 节点。
+
+@export var blackboard_plan: BlackboardPlan
+
+var shared_scope: Blackboard
+
+func _ready() -> void:
+    if blackboard_plan == null:
+        shared_scope = Blackboard.new()
+    else:
+        shared_scope = blackboard_plan.create_blackboard()
+
+    for child in get_children():
+        var bt_player: BTPlayer = child.find_child("BTPlayer")
+        if is_instance_valid(bt_player):
+            bt_player.blackboard.set_parent(shared_scope)
+
+
+

总而言之,Blackboard 作用域链不仅能避免状态机、行为树与子树之间可能出现的命名冲突,还可以用来在多个智能体之间共享数据。

+
+
+
+

调试黑板变量

+

调试运行中的项目时,你可以在远程检视面板中查看 Blackboard 变量。在 LimboAI 调试器中点击某个任务以查看其属性,然后点击 Blackboard 引用,即可看到整条作用域链上的所有变量,并按作用域分组。变量可以实时编辑,以辅助调试。对于状态机,在远程场景树(Remote Scene Tree)中选中 LimboState 节点,就能以同样的方式访问它的 Blackboard。

+
+
+
+

访问场景树中的节点

+

有几种方式可以从 BTTask 中访问智能体场景树里的节点。

+
+

🛈 注意:智能体场景树的根节点可以通过 scene_root 属性访问。

+
+
+

使用 BBNode 属性

+
@export var cast_param: BBNode
+
+func _tick(delta) -> Status:
+    var node: ShapeCast3D = cast_param.get_value(scene_root, blackboard)
+
+
+
+
+

使用 NodePath 属性

+
@export var cast_path: NodePath
+
+func _tick(delta) -> Status:
+    var node: ShapeCast3D = scene_root.get_node(cast_path)
+
+
+
+
+

使用黑板计划

+

你可以在编辑器中创建一个黑板变量,类型为 NodePath,并让它在 BTPlayer 的黑板计划中指向合适的节点。默认情况下,当运行时实例化黑板时,任何 NodePath 变量都会被替换为对应的节点实例(见 BlackboardPlan.prefetch_nodepath_vars)。

+
extends BTCondition
+
+@export var shape_var: StringName = &"shape_cast"
+
+func _tick(delta) -> Status:
+    var shape_cast: ShapeCast3D = blackboard.get_var(shape_var)
+
+
+

BTPlayer.prefetch_nodepath_vars 属性应设置为 true。

+
+
+
+
+
+

创建状态机

+

本指南将展示如何使用 LimboHSM 搭建并使用状态机。

+
+

初始化

+

要使用 LimboHSM 状态机,你首先需要在代码中初始化它。这通常是在脚本的 _ready 函数中完成。下面是一个示例:

+
@onready var hsm: LimboHSM = $LimboHSM
+@onready var idle_state: LimboState = $LimboHSM/IdleState
+@onready var move_state: LimboState = $LimboHSM/MoveState
+
+
+func _ready() -> void:
+    _init_state_machine()
+
+
+func _init_state_machine() -> void:
+    hsm.add_transition(idle_state, move_state, idle_state.EVENT_FINISHED)
+    hsm.add_transition(move_state, idle_state, move_state.EVENT_FINISHED)
+
+    hsm.initialize(self)
+    hsm.set_active(true)
+
+
+

在这个示例中,我们首先声明状态机以及要使用的各个状态。然后在 _init_state_machine 函数中为各状态添加转换。最后初始化状态机,并将其设为活动状态。

+
+
+

状态示例

+

你可以在脚本中定义状态的行为,并把该脚本挂到状态节点上。下面是一个状态示例,它会在 AnimationPlayer 上播放动画并等待动画播放完毕:

+
extends LimboState
+## PlayAnimation:在 AnimationPlayer 上播放动画,并等待其播放完毕。
+
+@export var animation_player: AnimationPlayer
+@export var animation_name: StringName
+
+func _enter() -> void:
+    animation_player.play(animation_name)
+
+func _update(_delta: float) -> void:
+    if not animation_player.is_playing() \
+            or animation_player.assigned_animation != animation_name:
+        dispatch(EVENT_FINISHED)
+
+
+

在这个示例中,_enter 方法会在进入该状态时被调用,并播放指定的动画。_update 方法每帧都会被调用,用来检查动画是否播放完毕。如果已播放完毕,它就派发 EVENT_FINISHED 事件,从而可能转换到下一个状态。

+
+
+

事件与转换

+

LimboHSM 自带一套事件系统,有助于把状态转换与状态实现解耦。一个转换与特定的事件、起始状态和目标状态相关联,当该事件被派发时,转换会自动执行。

+

要注册一个转换并把它与特定事件关联,可以使用 LimboHSM.add_transition 方法:

+
hsm.add_transition(idle_state, move_state, &"movement_started")
+
+
+

在这个示例中,我们注册了一个从 idle_state 到 move_state 的转换,它在 movement_started 事件被派发时发生。

+

转换也可以不与任何特定的起始状态关联:

+
hsm.add_transition(hsm.ANYSTATE, move_state, &"movement_started")
+
+
+

事件通过 LimboState.dispatch 方法派发。需要注意的是,该方法可以从状态机层级中的任何位置调用,也可以在状态机之外调用。事件会从叶状态向根状态传播。这意味着,如果某个事件被某个状态消费掉,它就不会再传播到其父状态。

+

状态还可以定义事件处理器,即对特定事件做出反应的方法。这些事件处理器通常不会导致状态转换;它们只是状态对特定事件做出反应的一种机制。你可以用 LimboState.add_event_handler 方法在状态中注册事件处理器:

+
extends LimboState
+
+func _setup() -> void:
+    add_event_handler("movement_started", _on_movement_started)
+
+func _on_movement_started(cargo = null) -> bool:
+    # 在这里处理 "movement_started" 事件。
+    # 调用 `dispatch()` 时可以随事件一起传入 `cargo`。
+    # 当你需要向事件处理器传递一些数据时,这非常方便。
+    return true
+
+
+

如果事件处理器返回 true,该事件将被视为已被消费,不会再继续传播,也不会导致状态转换。

+
+
+

状态的结构

+
extends LimboState
+
+## 状态初始化时调用一次。
+func _setup() -> void:
+    pass
+
+## 当状态被进入时调用。
+func _enter() -> void:
+    pass
+
+## 当状态被退出时调用。
+func _exit() -> void:
+    pass
+
+## 当该状态处于活动状态时每帧调用。
+func _update(delta: float) -> void:
+    pass
+
+
+
+
+

把行为树与状态机结合使用

+

BTState 是 LimboHSM 中一种特殊的状态节点,它可以承载一个行为树。当 BTState 处于活动状态时,它每帧都会执行所承载的行为树,实际上就是把该行为树当作它的实现。

+

这样你就可以把行为树的强大能力与状态机的结构与控制结合起来。行为树非常适合定义复杂的层次化行为,而状态机则擅长管理不同行为之间的流转与转换。

+

创建好 LimboHSM 之后,就可以为给定的 LimboHSM 创建一个 BTState:

+
extends CharacterBody2D
+
+var hsm: LimboHSM
+
+@export var behavior_tree: BehaviorTree
+
+
+func _ready():
+    hsm = LimboHSM.new()
+    add_child(hsm)
+
+    var bt_state := BTState().new()
+    bt_state.named("Supplied BT")
+
+    # 设置行为树,或使用 load("res://ai/trees/...") 调用
+    bt_state.behavior_tree = behavior_tree
+    bt_state.set_scene_root_hint(self)
+
+    hsm.add_child(bt_state)
+    hsm.initial_state = bt_state
+
+    hsm.initialize(self)
+    hsm.set_active(true)
+
+
+
+
+

单文件状态机配置

+

在某些情况下,例如做原型或参加 Game Jam 时,把状态机代码放在单个文件里更实用。针对这类情况,LimboHSM 支持委托(delegation),并提供链式方法以便更轻松地完成配置。下面用一个实际的代码示例来说明:

+
extends CharacterBody2D
+
+var hsm: LimboHSM
+
+@onready var animation_player: AnimationPlayer = $AnimationPlayer
+
+
+func _ready() -> void:
+    _init_state_machine()
+
+
+func _init_state_machine() -> void:
+    hsm = LimboHSM.new()
+    add_child(hsm)
+
+    # 使用链式方法与委托来配置状态:
+    var idle_state := LimboState.new().named("Idle") \
+        .call_on_enter(func(): animation_player.play("idle")) \
+        .call_on_update(_idle_update)
+    var move_state := LimboState.new().named("Move") \
+        .call_on_enter(func(): animation_player.play("walk")) \
+        .call_on_update(_move_update)
+
+    hsm.add_child(idle_state)
+    hsm.add_child(move_state)
+
+    hsm.add_transition(idle_state, move_state, &"movement_started")
+    hsm.add_transition(move_state, idle_state, &"movement_ended")
+
+    hsm.initialize(self)
+    hsm.set_active(true)
+
+
+func _idle_update(delta: float) -> void:
+    var dir: Vector2 = Input.get_vector(
+        &"ui_left", &"ui_right", &"ui_up", &"ui_down")
+    if not dir.is_zero_approx():
+        hsm.dispatch(&"movement_started")
+
+
+func _move_update(delta: float) -> void:
+    var dir: Vector2 = Input.get_vector(
+        &"ui_left", &"ui_right", &"ui_up", &"ui_down")
+    var desired_velocity: Vector2 = dir * 200.0
+    velocity = desired_velocity
+    move_and_slide()
+    if desired_velocity.is_zero_approx():
+        hsm.dispatch(&"movement_ended")
+
+
+
+
+
+
+
+

重要类

+

LimboAI 中引入了很多类。下面列出你应该了解的最重要的那些:

+
+
+

BTTask

+

继承:BT

+

被继承:BTAction、BTComment、BTComposite、BTCondition、BTDecorator

+

所有 BehaviorTree 任务的基类。

+
+

说明

+

所有 BehaviorTree 任务的基类。任务是 BehaviorTree 中的基本积木块,代表某个具体行为或控制流。通过按层次组合和嵌套任务,可以构建出复杂的行为。

+

任务可以是以下类型之一:动作、条件、组合或装饰器。每种任务类型都有对应的子类:BTAction、BTCondition、BTDecorator、BTComposite。

+

任务通过 _tick 方法执行工作并返回状态。状态值定义在 Status 中。任务可以用 _setup 方法初始化。另见 _enter 与 _exit。

+

注意:不要直接继承 BTTask 来实现你自己的任务,而应继承上面提到的某个子类型。

+
+
+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Node

agent

Blackboard

blackboard

String

custom_name

""

float

elapsed_time

Node

scene_root

Status

status

+
+
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

_enter() virtual

void

_exit() virtual

String

_generate_name() virtual const

PackedStringArray

_get_configuration_warnings() virtual const

void

_setup() virtual

Status

_tick(delta: float) virtual

void

abort()

void

add_child(task: BTTask)

void

add_child_at_index(task: BTTask, idx: int)

BTTask

clone() const

BehaviorTree

editor_get_behavior_tree()

Status

execute(delta: float)

BTTask

get_child(idx: int) const

int

get_child_count() const

int

get_child_count_excluding_comments() const

int

get_index() const

BTTask

get_parent() const

BTTask

get_root() const

String

get_task_name()

bool

has_child(task: BTTask) const

void

initialize(agent: Node, blackboard: Blackboard, scene_root: Node)

bool

is_descendant_of(task: BTTask) const

bool

is_root() const

BTTask

next_sibling() const

void

print_tree(initial_tabs: int = 0)

void

remove_child(task: BTTask)

void

remove_child_at_index(idx: int)

+
+
+
+

属性说明

+

Node agent 🔗

+
    +
  • void set_agent(value: Node)

  • +
  • Node get_agent()

  • +
+

agent 是 BehaviorTree 实例的上下文对象。通常它是使用 BehaviorTree 资源的 BTPlayer 节点的父节点。

+
+

Blackboard blackboard 🔗

+ +

提供对 Blackboard 的访问。黑板用于在同一 BehaviorTree 的各任务之间共享数据。

+

更多信息见 Blackboard。

+
+

String custom_name = "" 🔗

+
    +
  • void set_custom_name(value: String)

  • +
  • String get_custom_name()

  • +
+

用户为任务提供的名称。如果不为空,编辑器会用它来表示该任务。见 get_task_name。

+
+

float elapsed_time 🔗

+
    +
  • float get_elapsed_time()

  • +
+

自任务被“进入”以来所经过的时间。见 _enter。

+

当任务不处于 RUNNING 状态时返回 0。

+
+

Node scene_root 🔗

+
    +
  • Node get_scene_root()

  • +
+

行为树所在场景的根节点(例如 BTPlayer 节点的拥有者)。可用于获取 NodePath 引用。

+

示例:

+
extends BTAction
+
+@export var node_path: NodePath
+
+func _setup():
+    var node: Node = scene_root.get_node(node_path)
+
+
+
+

Status status 🔗

+ +

_tick 返回的最后一次执行 Status。

+
+
+
+

方法说明

+

void _enter() virtual 🔗

+

当任务被“进入”时调用,即任务在不具有 RUNNING status 的情况下被执行时。

+

在执行顺序上,它先于 _tick 被调用。当主要工作开始前需要做准备时使用此方法,通常是在任务需要不止一个 tick 才能完成时。另见 execute。

+
+

void _exit() virtual 🔗

+

当任务被“退出”时调用,即在 _tick 返回 SUCCESS 或 FAILURE 状态之后。另见 execute。

+
+

String _generate_name() virtual const 🔗

+

在未设置 custom_name 时,调用它来为任务生成显示名称。见 get_task_name。

+
+

PackedStringArray _get_configuration_warnings() virtual const 🔗

+

此方法返回的字符串会作为警告消息显示在行为树编辑器中。任何重写了此方法的任务脚本都必须在文件顶部包含 @tool 注解。

+
+

void _setup() virtual 🔗

+

在初始化阶段调用,用于初始化任务。它只会在任务第一次执行 tick 之前被调用一次。借助这个方法,你可以在任务开始执行之前为它设置所需的状态或配置。

+
+

Status _tick(delta: float) virtual 🔗

+

当任务被“tick”时调用,也就是在更新过程中由 BTPlayer 或 BTState 执行它时。

+

返回定义在 Status 中的执行状态。

+

注意:任务通过实现这个方法来执行其主要功能。

+
+

void abort() 🔗

+

递归地重置该任务及其子任务。如果任务处于 RUNNING 状态,它会被退出,并且其状态被重置为 FRESH。

+
+

void add_child(task: BTTask) 🔗

+

添加一个子任务。task 会被放到子任务列表的末尾。

+
+

void add_child_at_index(task: BTTask, idx: int) 🔗

+

添加一个子任务。task 会被放到子任务列表中的 idx 位置。

+
+

BTTask clone() const 🔗

+

复制该任务及其子任务,并复制导出的成员。出于效率考虑,子资源是共享的,但 BBParam 的子类型例外,它们总是会被复制。编辑器用它来实例化 BehaviorTree,以及复制粘贴任务。

+
+

BehaviorTree editor_get_behavior_tree() 🔗

+

返回拥有此任务的行为树。仅在编辑器中可用。

+
+

Status execute(delta: float) 🔗

+

执行该任务。执行遵循特定的顺序:

+
    +
  • 如果任务当前的 status 不是 RUNNING,会先调用 _enter 方法。

  • +
  • 接着调用 _tick 方法来执行任务的工作。

  • +
  • 如果 _tick 方法返回 SUCCESS 或 FAILURE 状态,接下来会调用 _exit 方法,作为执行清理的一部分。

  • +
+
+

BTTask get_child(idx: int) const 🔗

+

通过指定索引返回一个子任务。

+
+

int get_child_count() const 🔗

+

返回子任务的数量。

+
+

int get_child_count_excluding_comments() const 🔗

+

返回子任务的数量,不把 BTComment 任务计算在内。

+
+

int get_index() const 🔗

+

返回该任务在行为树分支中的位置。如果该任务不属于任务树(也就是没有父任务),则返回 -1。

+
+

BTTask get_parent() const 🔗

+

返回该任务的父任务。

+
+

BTTask get_root() const 🔗

+

返回行为树的根任务。

+
+

String get_task_name() 🔗

+

此方法返回的字符串用于在编辑器中表示该任务。

+

除非设置了 custom_name,否则会调用 _generate_name 方法为任务生成显示名称。

+
+

bool has_child(task: BTTask) const 🔗

+

如果 task 是此任务的子任务,则返回 true。

+
+

void initialize(agent: Node, blackboard: Blackboard, scene_root: Node) 🔗

+

初始化该任务。为它赋值 agent 和 blackboard,并对该任务及其子任务调用 _setup。

+

该方法会对每个子任务递归调用。scene_root 应当是行为树所在场景的根节点(例如包含该行为树的节点的拥有者)。

+
+

bool is_descendant_of(task: BTTask) const 🔗

+

如果此任务是 task 的后代,则返回 true。换句话说,此任务必须是 task 的子任务,或者是它的子任务、孙任务之一。

+
+

bool is_root() const 🔗

+

如果此任务是其行为树的根任务,则返回 true。一棵行为树只能有一个根任务。

+
+

BTTask next_sibling() const 🔗

+

返回父任务子任务列表中紧接在此任务之后的任务。

+

如果此任务没有父任务,或者它是父任务子任务列表中的最后一个子任务,则返回 null。

+
+

void print_tree(initial_tabs: int = 0) 🔗

+

把以此任务为起点的子树打印到控制台。

+
+

void remove_child(task: BTTask) 🔗

+

从子任务中移除 task。

+
+

void remove_child_at_index(idx: int) 🔗

+

从子任务中移除指定索引处的子任务。

+
+
+
+

BTPlayer

+

继承:

+

BehaviorTree 资源的播放器。

+
+

说明

+

BTPlayer 节点用于在运行时实例化和播放 BehaviorTree 资源。初始化期间,行为树实例会获得对智能体、blackboard 以及当前场景根节点的引用。智能体可以通过 agent_node 属性指定(默认是 BTPlayer 的父节点)。

+

行为树的入门介绍见 BehaviorTree。

+
+
+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

bool

active

true

NodePath

agent_node

NodePath("..")

BehaviorTree

behavior_tree

Blackboard

blackboard

BlackboardPlan

blackboard_plan

bool

monitor_performance

false

UpdateMode

update_mode

1

+
+
+

方法

+ + + + + + + + + + + + + + + + + + +

BTInstance

get_bt_instance()

void

restart()

void

set_bt_instance(bt_instance: BTInstance)

void

set_scene_root_hint(scene_root: Node)

void

update(delta: float)

+
+
+
+

信号

+

behavior_tree_finished(status: int) 🔗

+

已废弃:请改用 updated 信号。

+

当行为树执行完毕并返回 SUCCESS 或 FAILURE 时发出。

+

参数 status 保存行为树返回的状态。见 Status。

+
+

updated(status: int) 🔗

+

当 BTPlayer 完成行为树更新时发出。

+

参数 status 保存行为树返回的状态。见 Status。

+
+
+
+

枚举

+

enum UpdateMode: 🔗

+

UpdateMode IDLE = 0

+

在空闲(idle)处理期间执行行为树。

+

UpdateMode PHYSICS = 1

+

在物理(physics)处理期间执行行为树。

+

UpdateMode MANUAL = 2

+

通过调用 update 手动执行行为树。

+
+
+
+

属性说明

+

bool active = true 🔗

+
    +
  • void set_active(value: bool)

  • +
  • bool get_active()

  • +
+

如果为 true,行为树将在更新期间被执行。

+
+

NodePath agent_node = NodePath("..") 🔗

+
    +
  • void set_agent_node(value: NodePath)

  • +
  • NodePath get_agent_node()

  • +
+

用作智能体的节点路径。在实例化之后再设置它不会生效。

+
+

BehaviorTree behavior_tree 🔗

+ +

要在运行时实例化并执行的 BehaviorTree 资源。

+
+

Blackboard blackboard 🔗

+ +

保存行为树各任务共享的数据。见 Blackboard。

+
+

BlackboardPlan blackboard_plan 🔗

+ +

存储并管理用于构建新的 Blackboard 实例的变量。

+
+

bool monitor_performance = false 🔗

+
    +
  • void set_monitor_performance(value: bool)

  • +
  • bool get_monitor_performance()

  • +
+

如果为 true,会为此 BTPlayer 节点的每个实例在 “Debugger->Monitors” 中添加一个性能监视器。

+
+

UpdateMode update_mode = 1 🔗

+ +

决定行为树何时执行。见 UpdateMode。

+
+
+
+

方法说明

+

BTInstance get_bt_instance() 🔗

+

返回行为树实例。

+
+

void restart() 🔗

+

重置行为树的执行。所有正在运行的任务都会被中止,下一次树执行会从头开始。此方法不会重置 Blackboard。

+
+

void set_bt_instance(bt_instance: BTInstance) 🔗

+

设置要播放的 BTInstance。当你想在运行时切换到另一个行为树实例时,这个方法很有用。另见 BehaviorTree.instantiate。

+
+

void set_scene_root_hint(scene_root: Node) 🔗

+

设置新实例化的行为树要使用的场景根节点 Node。应当在 BTPlayer 被加入场景树之前调用(即 NOTIFICATION_READY 之前)。当你需要用代码动态创建 BTPlayer 节点时,这通常很有用。

+
+

void update(delta: float) 🔗

+

如果 active 为 true,则执行行为树实例的根任务。当 update_mode 设为 MANUAL 时调用此方法。当 update_mode 不是 MANUAL 时,会自动调用 update。见 UpdateMode。

+
+
+
+

Blackboard

+

继承:

+

用于在 LimboHSM 状态与 BehaviorTree 任务之间共享数据的键值存储。

+
+

说明

+

Blackboard 是 LimboHSM 系统中的状态与 BehaviorTree 中的任务之间存储和共享数据的地方。BehaviorTree 中的每个状态和任务都能访问这个 Blackboard,从而可以读取和写入数据。这让不同动作与行为之间共享信息变得非常简单。

+

Blackboard 也可以充当另一个 Blackboard 的父作用域。如果在当前作用域中找不到某个变量,它就会到父级 Blackboard 中查找。父级 Blackboard 本身也可以拥有自己的父作用域,从而形成我们所说的“黑板作用域链”。重要的是,这条链中 Blackboard 的数量没有上限,而且 Blackboard 不会修改父作用域中的值。

+

可以用 BTNewScope 和 BTSubtree 装饰器创建新作用域。此外,对于任何定义了非空 Blackboard 数据的 LimboState,或任何根层级的 LimboHSM 节点,都会自动创建一个新作用域。

+
+
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

bind_var_to_property(var_name: StringName, object: Object, property: StringName, create: bool = false)

void

clear()

void

erase_var(var_name: StringName)

Blackboard

get_parent() const

Variant

get_var(var_name: StringName, default: Variant = null, complain: bool = true) const

Dictionary

get_vars_as_dict() const

bool

has_var(var_name: StringName) const

void

link_var(var_name: StringName, target_blackboard: Blackboard, target_var: StringName, create: bool = false)

Array[StringName]

list_vars() const

void

populate_from_dict(dictionary: Dictionary)

void

print_state() const

void

set_parent(blackboard: Blackboard)

void

set_var(var_name: StringName, value: Variant)

Blackboard

top() const

void

unbind_var(var_name: StringName)

+
+
+
+

方法说明

+

void bind_var_to_property(var_name: StringName, object: Object, property: StringName, create: bool = false) 🔗

+

在变量与由 property 和 object 指定的对象属性之间建立绑定。变量发生变化会更新该属性,反之亦然。如果 create 为 true,则变量不存在时会被创建。

+
+

void clear() 🔗

+

从 Blackboard 中移除所有变量。父作用域不受影响。

+
+

void erase_var(var_name: StringName) 🔗

+

按名称移除一个变量。

+
+

Blackboard get_parent() const 🔗

+

返回作为此实例父作用域的 Blackboard。

+
+

Variant get_var(var_name: StringName, default: Variant = null, complain: bool = true) const 🔗

+

返回变量值;如果变量不存在则返回 default。如果 complain 为 true,变量不存在时会打印错误。如果该变量在当前 Blackboard 作用域中不存在,它会在父作用域 Blackboard 中查找。

+
+

Dictionary get_vars_as_dict() const 🔗

+

以字典形式返回 Blackboard 中的所有变量。键是变量名,值是变量值。不包含父作用域。

+
+

bool has_var(var_name: StringName) const 🔗

+

如果 Blackboard 包含 var_name 变量(含父作用域),则返回 true。

+
+ +

把一个变量链接到另一个 Blackboard 变量。如果一个变量被链接到另一个变量,它们的状态将始终一致,任何一方发生变化都会反映到另一方。如果 create 为 true,则变量不存在时会被创建。

+

你可以用这个方法把当前作用域中的变量链接到另一个作用域或另一个 Blackboard 实例中的变量。一个变量只能链接到另一个变量。再次调用此方法会覆盖之前的链接。不过,同一个变量可以被多个不同的变量链接。

+
+

Array[StringName] list_vars() const 🔗

+

返回 Blackboard 中所有变量的名称。不包含父作用域。

+
+

void populate_from_dict(dictionary: Dictionary) 🔗

+

用字典中的多个变量填充 Blackboard。字典的键必须是变量名,字典的值必须是变量值。键必须是 StringName 或 String。

+
+

void print_state() const 🔗

+

打印每个作用域中所有变量的值。

+
+

void set_parent(blackboard: Blackboard) 🔗

+

赋值父作用域。如果某个值不在当前 Blackboard 作用域中,它会在父作用域 Blackboard 中查找。

+
+

void set_var(var_name: StringName, value: Variant) 🔗

+

为当前 Blackboard 作用域中的变量赋值。如果变量不存在,它会被创建。如果该变量已存在于父作用域中,父作用域的值不会被修改。

+
+

Blackboard top() const 🔗

+

返回作用域链中最顶层的 Blackboard。

+
+

void unbind_var(var_name: StringName) 🔗

+

移除变量的绑定。

+
+
+
+

BBParam

+

继承:

+

被继承: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

+

LimboAI 类型化参数的基类。

+
+

说明

+

LimboAI 类型化参数的基类,既可以引用 Blackboard 变量,也可以直接保存某个 Variant.Type 类型的原始值。

+

注意:不要直接实例化,请改用具体的子类型。

+
+
+

属性

+ + + + + + + + + + + + + + + +

Variant

saved_value

null

ValueSource

value_source

0

StringName

variable

+
+
+

方法

+ + + + + + + + + +

Variant.Type

get_type() const

Variant

get_value(scene_root: Node, blackboard: Blackboard, default: Variant = null)

+
+
+
+

枚举

+

enum ValueSource: 🔗

+

ValueSource SAVED_VALUE = 0

+

值直接存储在 BBParam 资源中。

+

ValueSource BLACKBOARD_VAR = 1

+

值通过变量名引用,并从 Blackboard 中获取。变量名存储在 BBParam 资源中。

+
+
+
+

属性说明

+

Variant saved_value = null 🔗

+
    +
  • void set_saved_value(value: Variant)

  • +
  • Variant get_saved_value()

  • +
+

当 value_source 设为 SAVED_VALUE 时,用于存储参数值。值的类型由 get_type 决定。

+
+

ValueSource value_source = 0 🔗

+ +

指定 BBParam 取值的来源。见 ValueSource。

+
+

StringName variable 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

当 value_source 设为 BLACKBOARD_VAR 时,存储 Blackboard 变量的名称。

+
+
+
+

方法说明

+

Variant.Type get_type() const 🔗

+

返回该参数预期的数据类型。

+
+

Variant get_value(scene_root: Node, blackboard: Blackboard, default: Variant = null) 🔗

+

返回该参数的值。

+
+
+
+

LimboState

+

继承:

+

被继承:BTState、LimboHSM

+

用于分层状态机(HSM)的状态节点。

+
+

说明

+

LimboAI 中用于分层状态机(HSM)的状态节点。

+

你可以通过继承这个类来编写自己的状态行为。要实现状态逻辑,可以重写 _enter、_exit、_setup 和 _update。或者,你也可以用 call_on_* 方法把状态实现委托给外部方法。

+

关于状态机的更多细节,请参阅 LimboHSM。

+
+
+

属性

+ + + + + + + + + + + + + + + +

StringName

EVENT_FINISHED

Node

agent

Blackboard

blackboard

BlackboardPlan

blackboard_plan

+
+
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

_enter() virtual

void

_exit() virtual

void

_setup() virtual

void

_update(delta: float) virtual

void

add_event_handler(event: StringName, handler: Callable)

LimboState

call_on_enter(callable: Callable)

LimboState

call_on_exit(callable: Callable)

LimboState

call_on_update(callable: Callable)

void

clear_guard()

bool

dispatch(event: StringName, cargo: Variant = null)

LimboState

get_root() const

bool

is_active() const

LimboState

named(name: String)

void

set_guard(guard_callable: Callable)

+
+
+
+

信号

+

entered() 🔗

+

当状态被进入时发出。

+
+

exited() 🔗

+

当状态被退出时发出。

+
+

setup() 🔗

+

当状态被初始化时发出。

+
+

updated(delta: float) 🔗

+

当状态被更新时发出。

+
+
+
+

属性说明

+

StringName EVENT_FINISHED 🔗

+
    +
  • StringName event_finished()

  • +
+

一个常用事件,表示状态已经完成其工作。

+
+

Node agent 🔗

+
    +
  • void set_agent(value: Node)

  • +
  • Node get_agent()

  • +
+

与该状态关联的智能体,在初始化时赋值。

+
+

Blackboard blackboard 🔗

+ +

该状态所属状态机中各状态共享的键值数据存储。

+
+

BlackboardPlan blackboard_plan 🔗

+ +

存储并管理用于构建新的 Blackboard 实例的变量。

+
+
+
+

方法说明

+

void _enter() virtual 🔗

+

当状态被进入时调用。

+
+

void _exit() virtual 🔗

+

当状态被退出时调用。这会在转换到另一个状态时发生,也会在状态机从场景树中被移除时发生(例如节点被 Node.queue_free 释放或场景切换)。由于实现细节,_exit 不会在调用 Object.free 时被执行!

+
+

void _setup() virtual 🔗

+

在初始化期间被调用一次。用这个方法初始化你的状态。

+
+

void _update(delta: float) virtual 🔗

+

在更新期间调用。用这个方法实现你状态的行为。

+
+

void add_event_handler(event: StringName, handler: Callable) 🔗

+

注册一个 handler,在 event 被派发时调用。处理函数应具有以下签名:

+
func my_event_handler(cargo=null) -> bool:
+
+
+

如果处理函数返回 true,事件将被消费。Cargo 是可选参数,可以传给处理函数。另见 dispatch。

+
+

LimboState call_on_enter(callable: Callable) 🔗

+

链式方法,把 entered 信号连接到一个 callable。

+
+

LimboState call_on_exit(callable: Callable) 🔗

+

链式方法,把 exited 信号连接到一个 callable。

+
+

LimboState call_on_update(callable: Callable) 🔗

+

链式方法,把 updated 信号连接到一个 callable。

+
+

void clear_guard() 🔗

+

清除守卫函数,移除之前由 set_guard 设置的 Callable。

+
+

bool dispatch(event: StringName, cargo: Variant = null) 🔗

+

递归派发一个名为 event 的状态机事件,可选参数为 cargo。如果事件被消费则返回 true。

+

事件会从叶状态向根状态传播,一旦某个状态消费了该事件,传播就会停止。如果状态有相关的转换或事件处理器,它就会消费该事件。关于事件处理器的更多信息,见 add_event_handler。

+
+

LimboState get_root() const 🔗

+

返回根 LimboState。

+
+

bool is_active() const 🔗

+

如果当前处于活动状态(即它是父级 LimboHSM 的活动子状态),则返回 true。

+
+

LimboState named(name: String) 🔗

+

用于设置此状态名称的链式方法。

+
+

void set_guard(guard_callable: Callable) 🔗

+

设置守卫(guard)函数,每当考虑转换到该状态时都会调用它。如果该函数返回 false,该转换将被禁止。

+
+
+
+

LimboHSM

+

继承:LimboState

+

基于事件的分层状态机(HSM)。

+
+

说明

+

基于事件的分层状态机(HSM),用于管理 LimboState 实例并处理它们之间的转换。LimboHSM 本身就是一个 LimboState,也可以作为另一个 LimboHSM 节点的子节点。

+
+
+

属性

+ + + + + + + + + + + + + + + +

LimboState

ANYSTATE

LimboState

initial_state

UpdateMode

update_mode

1

+
+
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

void

add_transition(from_state: LimboState, to_state: LimboState, event: StringName, guard: Callable = Callable())

void

change_active_state(state: LimboState)

LimboState

get_active_state() const

LimboState

get_leaf_state() const

LimboState

get_previous_active_state() const

bool

has_transition(from_state: LimboState, event: StringName) const

void

initialize(agent: Node, parent_scope: Blackboard = null)

void

remove_transition(from_state: LimboState, event: StringName)

void

set_active(active: bool)

void

update(delta: float)

+
+
+
+

信号

+

active_state_changed(current: LimboState, previous: LimboState) 🔗

+

当当前活动的子状态切换到另一个子状态时发出。

+
+
+
+

枚举

+

enum UpdateMode: 🔗

+

UpdateMode IDLE = 0

+

在空闲处理期间更新状态机。

+

UpdateMode PHYSICS = 1

+

在物理处理期间更新状态机。

+

UpdateMode MANUAL = 2

+

通过在脚本中调用 update 来手动更新状态机。

+
+
+
+

属性说明

+

LimboState ANYSTATE 🔗

+ +

用于定义“从任意状态出发”的转换。

+
+

LimboState initial_state 🔗

+ +

使用 set_active 方法激活状态机时会变为活动的子状态。如果没有显式设置,LimboHSM 的第一个子节点将被视为初始状态。

+
+

UpdateMode update_mode = 1 🔗

+ +

指定状态机应在何时更新。见 UpdateMode。

+
+
+
+

方法说明

+

void add_transition(from_state: LimboState, to_state: LimboState, event: StringName, guard: Callable = Callable()) 🔗

+

建立从一个状态到另一个状态的转换,在 event 被派发时触发。from_state 和 to_state 都必须是此 LimboHSM 的直接子节点。

+

可选地,可以指定一个 guard 函数,它必须返回布尔值。如果守卫函数返回 false,则不会发生转换。守卫函数会在考虑该转换之前立即被调用。关于状态级别的守卫函数,请查看 LimboState.set_guard。

+
func my_guard() -> bool:
+    return is_some_condition_met()
+
+
+
+

void change_active_state(state: LimboState) 🔗

+

把当前活动的子状态切换为 state。如果 state 已经处于活动状态,它会被退出并重新进入。

+

state 必须是此 LimboHSM 的子节点。

+
+

LimboState get_active_state() const 🔗

+

返回当前活动的子状态。

+
+

LimboState get_leaf_state() const 🔗

+

返回状态机中当前活动的叶状态。

+
+

LimboState get_previous_active_state() const 🔗

+

返回上一个活动的子状态。

+
+

bool has_transition(from_state: LimboState, event: StringName) const 🔗

+

如果存在从 from_state 出发、针对给定 event 的转换,则返回 true。

+
+

void initialize(agent: Node, parent_scope: Blackboard = null) 🔗

+

初始化该状态,并为它自身及所有子状态调用 LimboState._setup。

+
+

void remove_transition(from_state: LimboState, event: StringName) 🔗

+

移除某个状态上与特定 event 关联的转换。

+
+

void set_active(active: bool) 🔗

+

设为 true 时,会把状态切换到 initial_state,并根据 update_mode 激活状态处理。

+
+

void update(delta: float) 🔗

+

对它自身和活动子状态调用 LimboState._update,调用会逐级向下传递到叶状态。如果 update_mode 未设为 MANUAL,此方法会自动触发。

+
+
+
+

BTState

+

继承:LimboState

+

用于 LimboHSM、承载 BehaviorTree 的状态节点。

+
+

说明

+

BTState 是一种 LimboState 节点,它通过管理 BehaviorTree 来为该状态提供行为逻辑。它会实例化并运行 BehaviorTree 资源,并在 SUCCESS 或 FAILURE 时派发状态机事件。事件名称可以通过 success_event 和 failure_event 自定义。关于状态机事件的更多细节,见 LimboState.dispatch。

+
+
+

属性

+ + + + + + + + + + + + + + + + + + + +

BehaviorTree

behavior_tree

StringName

failure_event

&"failure"

bool

monitor_performance

false

StringName

success_event

&"success"

+
+
+

方法

+ + + + + + + + + +

BTInstance

get_bt_instance() const

void

set_scene_root_hint(scene_root: Node)

+
+
+
+

属性说明

+

BehaviorTree behavior_tree 🔗

+ +

定义状态行为的 BehaviorTree 资源。

+
+

StringName failure_event = &"failure" 🔗

+
    +
  • void set_failure_event(value: StringName)

  • +
  • StringName get_failure_event()

  • +
+

当行为树结果为 FAILURE 时将被派发的 HSM 事件。见 LimboState.dispatch。

+
+

bool monitor_performance = false 🔗

+
    +
  • void set_monitor_performance(value: bool)

  • +
  • bool get_monitor_performance()

  • +
+

如果为 true,会为此 BTState 节点的每个实例在 “Debugger->Monitors” 中添加一个性能监视器。

+
+

StringName success_event = &"success" 🔗

+
    +
  • void set_success_event(value: StringName)

  • +
  • StringName get_success_event()

  • +
+

当行为树结果为 SUCCESS 时将被派发的 HSM 事件。见 LimboState.dispatch。

+
+
+
+

方法说明

+

BTInstance get_bt_instance() const 🔗

+

返回行为树实例。

+
+

void set_scene_root_hint(scene_root: Node) 🔗

+

设置新实例化的行为树要使用的场景根节点 Node。应当在状态机初始化之前调用。当你需要用代码动态创建 BTState 节点时,这通常很有用。

+
+
+
+

完整的类参考可以在侧边栏中找到。

+
+
+

BBAabb

+

继承:BBParam

+

用于 BehaviorTree 任务的 AABB 类型参数。见 BBParam。

+
+
+

BBArray

+

继承:BBParam

+

用于 BehaviorTree 任务的 Array 类型参数。见 BBParam。

+
+
+

BBBasis

+

继承:BBParam

+

用于 BehaviorTree 任务的 Basis 类型参数。见 BBParam。

+
+
+

BBBool

+

继承:BBParam

+

用于 BehaviorTree 任务的 Bool 类型参数。见 BBParam。

+
+
+

BBByteArray

+

继承:BBParam

+

用于 BehaviorTree 任务的 ByteArray 类型参数。见 BBParam。

+
+
+

BBColor

+

继承:BBParam

+

用于 BehaviorTree 任务的 Color 类型参数。见 BBParam。

+
+
+

BBColorArray

+

继承:BBParam

+

用于 BehaviorTree 任务的 ColorArray 类型参数。见 BBParam。

+
+
+

BBDictionary

+

继承:BBParam

+

用于 BehaviorTree 任务的 Dictionary 类型参数。见 BBParam。

+
+
+

BBFloat

+

继承:BBParam

+

用于 BehaviorTree 任务的 Float 类型参数。见 BBParam。

+
+
+

BBFloat32Array

+

继承:BBParam

+

用于 BehaviorTree 任务的 PackedFloat32Array 类型参数。见 BBParam。

+
+
+

BBFloat64Array

+

继承:BBParam

+

用于 BehaviorTree 任务的 PackedFloat64Array 类型参数。见 BBParam。

+
+
+

BBInt

+

继承:BBParam

+

用于 BehaviorTree 任务的 Integer 类型参数。见 BBParam。

+
+
+

BBInt32Array

+

继承:BBParam

+

用于 BehaviorTree 任务的 PackedInt32Array 类型参数。见 BBParam。

+
+
+

BBInt64Array

+

继承:BBParam

+

用于 BehaviorTree 任务的 PackedInt64Array 类型参数。见 BBParam。

+
+
+

BBNode

+

继承:BBParam

+

用于 BehaviorTree 任务的 Node 类型参数。见 BBParam。

+
+

说明

+

面向 BehaviorTree 任务使用的 Node 类型参数。见 BBParam。

+

如果来源是黑板变量,则允许任何继承自 Object 的类型。

+
+
+
+

BBPlane

+

继承:BBParam

+

用于 BehaviorTree 任务的 Plane 类型参数。见 BBParam。

+
+
+

BBProjection

+

继承:BBParam

+

用于 BehaviorTree 任务的 Projection 类型参数。见 BBParam。

+
+
+

BBQuaternion

+

继承:BBParam

+

用于 BehaviorTree 任务的 Quaternion 类型参数。见 BBParam。

+
+
+

BBRect2

+

继承:BBParam

+

用于 BehaviorTree 任务的 Rect2 类型参数。见 BBParam。

+
+
+

BBRect2i

+

继承:BBParam

+

用于 BehaviorTree 任务的 Rect2i 类型参数。见 BBParam。

+
+
+

BBString

+

继承:BBParam

+

用于 BehaviorTree 任务的 String 类型参数。见 BBParam。

+
+
+

BBStringArray

+

继承:BBParam

+

用于 BehaviorTree 任务的 StringArray 类型参数。见 BBParam。

+
+
+

BBStringName

+

继承:BBParam

+

用于 BehaviorTree 任务的 StringName 类型参数。见 BBParam。

+
+
+

BBTransform2D

+

继承:BBParam

+

用于 BehaviorTree 任务的 Transform2D 类型参数。见 BBParam。

+
+
+

BBTransform3D

+

继承:BBParam

+

用于 BehaviorTree 任务的 Transform3D 类型参数。见 BBParam。

+
+
+

BBVariant

+

继承:BBParam

+

用于 BehaviorTree 任务的 Variant 类型参数。见 BBParam。

+
+

说明

+

面向 BehaviorTree 任务使用的 Variant 类型参数。见 BBParam。

+

数据类型由 type 指定。

+
+
+

属性

+ + + + + + + +

Variant.Type

type

0

+
+
+
+

属性说明

+

Variant.Type type = 0 🔗

+
    +
  • void set_type(value: Variant.Type)

  • +
  • Variant.Type get_type()

  • +
+

为该参数值指定的 Variant.Type。

+
+
+
+

BBVector2

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector2 类型参数。见 BBParam。

+
+
+

BBVector2Array

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector2Array 类型参数。见 BBParam。

+
+
+

BBVector2i

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector2i 类型参数。见 BBParam。

+
+
+

BBVector3

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector3 类型参数。见 BBParam。

+
+
+

BBVector3Array

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector3Array 类型参数。见 BBParam。

+
+
+

BBVector3i

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector3i 类型参数。见 BBParam。

+
+
+

BBVector4

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector4 类型参数。见 BBParam。

+
+
+

BBVector4i

+

继承:BBParam

+

用于 BehaviorTree 任务的 Vector4i 类型参数。见 BBParam。

+
+
+

BehaviorTree

+

继承:

+

包含行为树数据。

+
+

说明

+

行为树是一种层次结构,用于建模和控制游戏中智能体(例如角色、敌人、实体)的行为。它旨在让你更轻松地为游戏创建复杂且高度模块化的行为。

+

行为树由若干任务组成,这些任务代表具体的动作或决策规则。任务大致可分为两大类:控制任务和叶任务。控制任务决定树内的执行流程,包括 BTSequence、BTSelector 和 BTInvert。叶任务代表要执行的具体动作(例如移动或攻击),或是需要检查的条件。BTTask 类为行为树的各种积木块提供了基础。BT 任务可以借助 Blackboard 共享数据。见 BTTask.blackboard 和 Blackboard。

+

注意:要创建你自己的动作,请继承 BTAction 类。

+

BehaviorTree 从根任务开始执行,遵循控制任务规定的规则,一路向下直到叶任务 —— 叶任务代表智能体应当执行的实际动作,或应当检查的条件。每个任务在执行时都会返回一个状态,可能是 SUCCESS、RUNNING 或 FAILURE。这些状态决定树的推进方式,它们定义在 Status 中。

+

行为树通过条件任务处理条件逻辑。这些任务检查特定条件,并根据智能体或其环境的状态返回 SUCCESS 或 FAILURE(例如 “IsLowOnHealth”、“IsTargetInSight”)。条件可以与 BTSequence 和 BTSelector 搭配使用,构建你的决策逻辑。

+

注意:要创建你自己的条件,请继承 BTCondition 类。

+

请查阅 BTTask 类,它为行为树的各种积木块提供了基础。

+
+
+

属性

+ + + + + + + + + + + +

BlackboardPlan

blackboard_plan

String

description

""

+
+
+

方法

+ + + + + + + + + + + + + + + + + + +

BehaviorTree

clone() const

void

copy_other(other: BehaviorTree)

BTTask

get_root_task() const

BTInstance

instantiate(agent: Node, blackboard: Blackboard, instance_owner: Node, custom_scene_root: Node = null) const

void

set_root_task(task: BTTask)

+
+
+
+

信号

+

plan_changed() 🔗

+

当 BlackboardPlan 发生变化时发出。

+
+
+
+

属性说明

+

BlackboardPlan blackboard_plan 🔗

+ +

存储并管理用于构建新的 Blackboard 实例的变量。

+
+

String description = "" 🔗

+
    +
  • void set_description(value: String)

  • +
  • String get_description()

  • +
+

用户为 BehaviorTree 提供的描述。

+
+
+
+

方法说明

+

BehaviorTree clone() const 🔗

+

复制一份 BehaviorTree 资源。

+
+

void copy_other(other: BehaviorTree) 🔗

+

变成另一棵行为树的副本。

+
+

BTTask get_root_task() const 🔗

+

返回 BehaviorTree 资源的根任务。

+
+

BTInstance instantiate(agent: Node, blackboard: Blackboard, instance_owner: Node, custom_scene_root: Node = null) const 🔗

+

实例化行为树并返回 BTInstance。instance_owner 应当是拥有该行为树实例的场景节点,通常是 BTPlayer、BTState,或是负责控制行为树执行的自定义播放器节点。请确保传入的 Blackboard 已从 blackboard_plan 填充了值。另见 BlackboardPlan.populate_blackboard 与 BlackboardPlan.create_blackboard。

+

如果 custom_scene_root 不是 null,它将被用作新实例化的行为树的场景根节点;否则场景根节点会被设为 instance_owner.owner。场景根节点对于 BBNode 实例正常工作至关重要。

+
+

void set_root_task(task: BTTask) 🔗

+

为 BehaviorTree 资源指定一个新的根任务。

+
+
+
+

BehaviorTreeData

+

继承:

+

表示 BehaviorTree 实例的当前状态。

+
+

说明

+

该类被 LimboAI 调试器用于 BehaviorTree 实例数据的序列化与反序列化。

+

此外,它还可以配合 BehaviorTreeView 可视化 BehaviorTree 实例的当前状态。它的设计用途是在自定义的运行时工具中使用。

+
+
+

方法

+ + + + + + +

BehaviorTreeData

create_from_bt_instance(bt_instance: BTInstance) static

+
+
+
+

方法说明

+

BehaviorTreeData create_from_bt_instance(bt_instance: BTInstance) static 🔗

+

返回编码为 BehaviorTreeData 的 bt_instance 当前状态,适合与 BehaviorTreeView 一起使用。

+

行为树实例可以通过 BTPlayer.get_bt_instance 获取。

+
+
+
+

BehaviorTreeView

+

继承:

+

可视化 BehaviorTree 实例的当前状态。

+
+

说明

+

可视化 BehaviorTree 实例的当前状态。另见 BehaviorTreeData。

+
+
+

属性

+ + + + + + + +

int

update_interval_msec

0

+
+
+

方法

+ + + + + + + + + +

void

clear()

void

update_tree(behavior_tree_data: BehaviorTreeData)

+
+
+
+

信号

+

task_selected(type_name: String, script_path: String) 🔗

+

在 BehaviorTreeView 中选中某个任务项时发出。

+
+
+
+

属性说明

+

int update_interval_msec = 0 🔗

+
    +
  • void set_update_interval_msec(value: int)

  • +
  • int get_update_interval_msec()

  • +
+

两次更新之间的最小延迟(毫秒)。设为更大的值可以降低 CPU 负载。

+
+
+
+

方法说明

+

void clear() 🔗

+

清除树视图。

+
+

void update_tree(behavior_tree_data: BehaviorTreeData) 🔗

+

更新 BehaviorTree 实例的显示。另见 BehaviorTreeData。

+
+
+
+

BlackboardPlan

+

继承:

+

存储并管理用于构建新的 Blackboard 实例的变量。

+
+

属性

+ + + + + + + +

bool

prefetch_nodepath_vars

true

+
+
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Blackboard

create_blackboard(prefetch_root: Node, parent_scope: Blackboard = null, prefetch_root_for_base_plan: Node = null)

BlackboardPlan

get_base_plan() const

Callable

get_parent_scope_plan_provider() const

bool

is_derived() const

void

populate_blackboard(blackboard: Blackboard, overwrite: bool, prefetch_root: Node, prefetch_root_for_base_plan: Node = null)

void

set_base_plan(blackboard_plan: BlackboardPlan)

void

set_parent_scope_plan_provider(callable: Callable)

void

sync_with_base_plan()

+
+
+
+

属性说明

+

bool prefetch_nodepath_vars = true 🔗

+
    +
  • void set_prefetch_nodepath_vars(value: bool)

  • +
  • bool is_prefetching_nodepath_vars()

  • +
+

启用或禁用 NodePath 变量预取。如果为 true,在创建 Blackboard 时,NodePath 值会被替换为对应的节点实例。

+
+
+
+

方法说明

+

Blackboard create_blackboard(prefetch_root: Node, parent_scope: Blackboard = null, prefetch_root_for_base_plan: Node = null) 🔗

+

使用该计划构建一个新的 Blackboard 实例。如果启用了 NodePath 预取,将用 prefetch_root 为 NodePath 变量获取节点实例并替换其值。

+
+

BlackboardPlan get_base_plan() const 🔗

+

返回基础计划。见 is_derived。

+
+

Callable get_parent_scope_plan_provider() const 🔗

+

返回父作用域计划提供者 —— 一个返回 BlackboardPlan 的可调用对象。

+
+

bool is_derived() const 🔗

+

如果此计划派生自另一个计划(即基础计划不为 null),则返回 true。派生计划只能包含基础计划中已有的变量,并且只有变量值可以不同。

+
+

void populate_blackboard(blackboard: Blackboard, overwrite: bool, prefetch_root: Node, prefetch_root_for_base_plan: Node = null) 🔗

+

用该计划中的变量填充 blackboard。如果 overwrite 为 true,同名变量将被覆盖。如果启用了 NodePath 预取,将用 prefetch_root 为 NodePath 变量获取节点实例并替换其值。

+
+

void set_base_plan(blackboard_plan: BlackboardPlan) 🔗

+

设置基础计划。一旦指定,该计划将从基础计划派生。

+

请谨慎使用,它会移除基础计划中不存在的变量。仅用于自定义工具开发。

+
+

void set_parent_scope_plan_provider(callable: Callable) 🔗

+

设置父作用域计划提供者 —— 一个返回 BlackboardPlan 的可调用对象。用于在检视面板中提供提示。设置之后即可使用映射功能。

+
+

void sync_with_base_plan() 🔗

+

将此计划与基础计划同步:移除基础计划中不存在的变量,并更新类型信息。仅用于自定义工具开发。

+
+
+
+

BT

+

继承:

+

被继承:BTTask

+

BTTask 的基类。

+
+
+

枚举

+

enum Status: 🔗

+

Status FRESH = 0

+

任务尚未执行,或者已被中止并重置。

+

Status RUNNING = 1

+

任务正在执行,尚未完成。

+

Status FAILURE = 2

+

任务以失败结束。

+

Status SUCCESS = 3

+

任务以成功结束。

+
+
+
+

BTAction

+

继承:BTTask < BT

+

被继承:BTAwaitAnimation、BTCallMethod、BTConsolePrint、BTEvaluateExpression、BTFail、BTPauseAnimation、BTPlayAnimation、BTRandomWait、BTSetAgentProperty、BTSetVar、BTStopAnimation、BTWait、BTWaitTicks

+

所有 BehaviorTree 动作的基类。

+
+

说明

+

BehaviorTree 中所有动作的基类。你可以通过继承 BTAction 类来创建自己的动作。

+

表示 BehaviorTree 中智能体应当执行的某个具体行为或动作。动作是 BehaviorTree 层次结构的最底层,负责执行达成目标所需的实际工作。动作没有子任务。

+

单个动作可以在一个或多个 tick 内完成任务。如果完成任务需要不止一个 tick,该动作应返回 RUNNING 状态。任务完成时,动作返回 SUCCESS 或 FAILURE 来表示结果。

+
+
+
+

BTAlwaysFail

+

继承:BTDecorator < BTTask < BT

+

把 SUCCESS 转换为 FAILURE 的 BT 装饰器。

+
+
+

BTAlwaysSucceed

+

继承:BTDecorator < BTTask < BT

+

把 FAILURE 转换为 SUCCESS 的 BT 装饰器。

+
+
+

BTAwaitAnimation

+

继承:BTAction < BTTask < BT

+

等待动画播放完毕的 BT 动作。

+
+

说明

+

BTAwaitAnimation 动作会等待指定 AnimationPlayer 节点上的动画播放完毕,然后返回 SUCCESS。

+

如果指定动画已播放完毕,或者指定动画当前未在播放,则返回 SUCCESS。

+

如果指定动画不存在,或者该动作获取 AnimationPlayer 节点失败,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + +

StringName

animation_name

&""

BBNode

animation_player

float

max_time

1.0

+
+
+
+

属性说明

+

StringName animation_name = &"" 🔗

+
    +
  • void set_animation_name(value: StringName)

  • +
  • StringName get_animation_name()

  • +
+

动画在 AnimationPlayer 节点中的键名。

+
+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

指定 AnimationPlayer 节点的参数。

+
+

float max_time = 1.0 🔗

+
    +
  • void set_max_time(value: float)

  • +
  • float get_max_time()

  • +
+

等待动画完成的最长时长(秒)。如果动画在此时间内没有播放完毕,BTAwaitAnimation 会停止等待并返回 SUCCESS。

+
+
+
+

BTCallMethod

+

继承:BTAction < BTTask < BT

+

在指定的 Node 或 Object 上调用方法的 BT 动作。

+
+

说明

+

BTCallMethod 动作会在指定的 Node 或 Object 实例上调用 method,然后返回 SUCCESS。

+

如果该动作在方法执行期间遇到问题,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + + + + + + + + + +

Array[BBVariant]

args

[]

bool

args_include_delta

false

StringName

method

&""

BBNode

node

StringName

result_var

&""

+
+
+
+

属性说明

+

Array[BBVariant] args = [] 🔗

+ +

调用方法时要传入的实参。

+
+

bool args_include_delta = false 🔗

+
    +
  • void set_include_delta(value: bool)

  • +
  • bool is_delta_included()

  • +
+

把 delta 作为第一个参数包含进来,并相应地后移其余参数的位置(如果有的话)。

+
+

StringName method = &"" 🔗

+
    +
  • void set_method(value: StringName)

  • +
  • StringName get_method()

  • +
+

要调用的方法名。

+
+

BBNode node 🔗

+
    +
  • void set_node_param(value: BBNode)

  • +
  • BBNode get_node_param()

  • +
+

指定包含要调用方法的 Node 或 Object 实例。

+
+

StringName result_var = &"" 🔗

+
    +
  • void set_result_var(value: StringName)

  • +
  • StringName get_result_var()

  • +
+

如果不为空,则把方法调用的结果赋给该属性指定的黑板变量。

+
+
+
+

BTCheckAgentProperty

+

继承:BTCondition < BTTask < BT

+

检查智能体属性值的 BT 条件。

+
+

说明

+

BTCheckAgentProperty 会检查智能体的属性值,并将其与 value 进行比较。

+

根据 check_type 返回 SUCCESS 或 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + +

CheckType

check_type

0

StringName

property

&""

BBVariant

value

+
+
+
+

属性说明

+

CheckType check_type = 0 🔗

+ +

要执行的检查类型。

+
+

StringName property = &"" 🔗

+
    +
  • void set_property(value: StringName)

  • +
  • StringName get_property()

  • +
+

指定要比较的智能体属性的参数。

+
+

BBVariant value 🔗

+ +

指定智能体属性将与之比较的值的参数。

+
+
+
+

BTCheckTrigger

+

继承:BTCondition < BTTask < BT

+

检查触发器(一个布尔变量)的 BT 条件。

+
+

说明

+

BTCheckTrigger 检查 variable 是否被设为 true。如果是,它会把该变量切换为 false 并返回 SUCCESS;否则返回 FAILURE。

+

BTCheckTrigger 可以在 BTSequence 中充当“门闩”:当触发器变量被设为 true 时,它允许执行后续任务,随后把该变量改为 false。

+
+
+

属性

+ + + + + + + +

StringName

variable

&""

+
+
+
+

属性说明

+

StringName variable = &"" 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

黑板上用作触发器的布尔变量。另见 BTTask.blackboard。

+

如果变量的值为 true,BTCheckTrigger 会把它切换为 false 并返回 SUCCESS。

+

如果变量的值为 false,BTCheckTrigger 会返回 FAILURE。

+
+
+
+

BTCheckVar

+

继承:BTCondition < BTTask < BT

+

检查黑板上变量的 BT 条件。

+
+

说明

+

BTCheckVar 会把 variable 与 value 进行比较,并根据 check_type 返回 SUCCESS 或 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + +

CheckType

check_type

0

BBVariant

value

StringName

variable

&""

+
+
+
+

属性说明

+

CheckType check_type = 0 🔗

+ +

要执行的检查类型。

+
+

BBVariant value 🔗

+ +

指定 variable 将与之比较的值的参数。

+
+

StringName variable = &"" 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

要检查其值的变量名。

+
+
+
+

BTComment

+

继承:BTTask < BT

+

BTComment 为 BehaviorTree 添加注解或说明性文字。

+
+

说明

+

BTComment 用于为 BehaviorTree 添加注解或说明性备注。

+

注释不会作为树的一部分被执行,并且在 BehaviorTree 的运行时实例中会被移除。

+
+
+
+

BTComposite

+

继承:BTTask < BT

+

被继承:BTDynamicSelector、BTDynamicSequence、BTParallel、BTProbabilitySelector、BTRandomSelector、BTRandomSequence、BTSelector、BTSequence

+

BT 组合任务的基类。

+
+

说明

+

所有 BehaviorTree 组合任务的基类。你可以通过继承 BTComposite 类来创建自己的组合任务。

+

组合任务(Composite)是 BehaviorTree 中的一种控制任务,包含一个或多个子任务。它通过规定子任务的执行方式,定义 BehaviorTree 的结构与流程。组合任务可以把相关任务归组为一个单元,让 BehaviorTree 更易管理和维护。BehaviorTree 组合任务的例子包括 BTSelector、BTSequence 和 BTParallel。

+
+
+
+

BTCondition

+

继承:BTTask < BT

+

被继承:BTCheckAgentProperty、BTCheckTrigger、BTCheckVar

+

BT 条件的基类。

+
+

说明

+

所有 BehaviorTree 条件的基类。你可以通过继承 BTCondition 类来创建自己的条件。

+

条件(Condition)是 BehaviorTree 中的一种任务,它在执行后续任务之前检查特定条件。条件常用于组合任务内部以控制执行流程,用来验证环境状态、检查敌人是否存在,或评估智能体的生命值状态。在 BehaviorTree 中使用条件任务可以提高系统效率并避免不必要的动作。不过,它们可能不适合复杂的决策过程,而且条件任务过多会让 BehaviorTree 难以阅读。

+

条件通常不需要多个 tick 就能完成,会立即返回 SUCCESS 或 FAILURE。

+
+
+
+

BTConsolePrint

+

继承:BTAction < BTTask < BT

+

向控制台输出文本的 BT 动作任务。

+
+

说明

+

BTConsolePrint 动作会向控制台输出文本并返回 SUCCESS。它可以包含类似于 GDScript % 运算符的格式化参数占位符。

+
+
+

属性

+ + + + + + + + + + + +

PackedStringArray

bb_format_parameters

PackedStringArray()

String

text

""

+
+
+
+

属性说明

+

PackedStringArray bb_format_parameters = PackedStringArray() 🔗

+
    +
  • void set_bb_format_parameters(value: PackedStringArray)

  • +
  • PackedStringArray get_bb_format_parameters()

  • +
+

格式化参数的值会作为将要打印文本的格式化实参。

+

注意:返回的数组是副本,对它的任何修改都不会更新原始属性值。更多细节见 PackedStringArray。

+
+

String text = "" 🔗

+
    +
  • void set_text(value: String)

  • +
  • String get_text()

  • +
+

要打印的文本,可以包含多个占位符,用于替换为格式化实参。这些占位符遵循与 GDScript % 运算符相同的格式,通常以 ‘%’ 开头并后接格式说明符。例如:%s 表示字符串,%d 表示整数,%f 表示实数。

+
+
+
+

BTCooldown

+

继承:BTDecorator < BTTask < BT

+

只有距上次执行已过去 duration 时间时,才执行其子任务的 BT 装饰器。

+
+

说明

+

只有距上次子任务成功执行已过去 duration 时间时,BTCooldown 才运行其子任务。除非把 trigger_on_failure 设为 true,否则它只考虑成功的执行。

+

如果子任务结果为 RUNNING,返回 RUNNING。

+

如果子任务结果为 SUCCESS,返回 SUCCESS,并触发冷却计时器。

+

如果子任务结果为 FAILURE,或者距上次执行尚未过去 duration 时间,返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + + + + + + + + + +

StringName

cooldown_state_var

&""

float

duration

10.0

bool

process_pause

false

bool

start_cooled

false

bool

trigger_on_failure

false

+
+
+
+

属性说明

+

StringName cooldown_state_var = &"" 🔗

+
    +
  • void set_cooldown_state_var(value: StringName)

  • +
  • StringName get_cooldown_state_var()

  • +
+

用于在 Blackboard 中存储冷却状态的布尔变量。如果留空,该变量会被自动生成并赋值。

+

如果该变量的值被设为 true,表示冷却已激活。此特性可用于从树的其他部分检查冷却状态,或在 BehaviorTree 的不同部分之间共享它。

+
+

float duration = 10.0 🔗

+
    +
  • void set_duration(value: float)

  • +
  • float get_duration()

  • +
+

允许下一次执行子任务之前需要等待的时间。

+
+

bool process_pause = false 🔗

+
    +
  • void set_process_pause(value: bool)

  • +
  • bool get_process_pause()

  • +
+

如果为 true,则在 SceneTree 暂停时也处理冷却。

+
+

bool start_cooled = false 🔗

+
    +
  • void set_start_cooled(value: bool)

  • +
  • bool get_start_cooled()

  • +
+

如果为 true,则像子任务在第一次 BT tick 之前已执行过一样开始冷却。

+
+

bool trigger_on_failure = false 🔗

+
    +
  • void set_trigger_on_failure(value: bool)

  • +
  • bool get_trigger_on_failure()

  • +
+

如果为 true,当子任务结果为 FAILURE 时也会激活冷却。否则,只有子任务结果为 SUCCESS 时才会触发冷却。

+
+
+
+

BTDecorator

+

继承:BTTask < BT

+

被继承:BTAlwaysFail、BTAlwaysSucceed、BTCooldown、BTDelay、BTForEach、BTInvert、BTNewScope、BTProbability、BTRepeat、BTRepeatUntilFailure、BTRepeatUntilSuccess、BTRunLimit、BTTimeLimit

+

BT 装饰器的基类。

+
+

说明

+

所有 BehaviorTree 装饰器的基类。你可以通过继承 BTDecorator 类来创建自己的装饰器。

+

装饰器是 BehaviorTree 中用于改变其子任务行为的一种任务。装饰器只能拥有一个子任务。

+

装饰器可以为任务的执行添加条件、限制或其他约束。BehaviorTree 装饰器的例子包括 BTInvert、BTRepeat 和 BTCooldown。使用 BehaviorTree 装饰器可以为现有任务添加额外逻辑,从而简化复杂行为的设计与实现。

+
+
+
+

BTDelay

+

继承:BTDecorator < BTTask < BT

+

在执行其子任务之前引入延迟的 BT 装饰器。

+
+

说明

+

BTDelay 在执行其子任务之前引入 seconds 的延迟。在延迟期间返回 RUNNING。

+
+
+

属性

+ + + + + + + +

float

seconds

1.0

+
+
+
+

属性说明

+

float seconds = 1.0 🔗

+
    +
  • void set_seconds(value: float)

  • +
  • float get_seconds()

  • +
+

延迟时长(秒)。

+
+
+
+

BTDynamicSelector

+

继承:BTComposite < BTTask < BT

+

每个 tick 都从头执行任务、直到出现第一个 SUCCESS 的 BT 组合任务。

+
+

说明

+

BTDynamicSelector 按顺序从第一个到最后一个执行子任务,直到任一子任务返回 SUCCESS。与 BTSelector 不同,它每个 tick 都会从头开始执行任务,重新评估它们的状态。当你希望每个 tick 都重试更高优先级的行为时,它非常有用。

+

如果某个子任务结果为 RUNNING,返回 RUNNING。BTDynamicSelector 会记住最后一个 RUNNING 的子任务,但与 BTSequence 不同,在下一个执行 tick 中它会重新执行之前的任务并重新评估它们的返回状态。如果之前的任一任务没有返回 FAILURE,它会中止所记住的那个 RUNNING 任务。

+

如果所有子任务结果都为 FAILURE,返回 FAILURE。

+

如果某个子任务结果为 SUCCESS,返回 SUCCESS。

+
+
+
+

BTDynamicSequence

+

继承:BTComposite < BTTask < BT

+

每个 tick 都从头执行任务、只要它们返回 SUCCESS 就继续的 BT 组合任务。

+
+

说明

+

BTDynamicSequence 按顺序从第一个到最后一个执行子任务,只要它们返回 SUCCESS 就继续。与 BTSequence 不同,它每个 tick 都会从头开始执行任务,重新评估它们的状态。当你希望在每个 tick 都重新检查某个长时间运行动作之前的条件,并在任一条件结果为 FAILURE 时中止那个 RUNNING 动作时,它非常有用。

+

如果某个子任务结果为 RUNNING,返回 RUNNING。BTDynamicSequence 会记住最后一个 RUNNING 的子任务,但与 BTSequence 不同,在下一个执行 tick 中它会重新执行之前的任务并重新评估它们的返回状态。如果之前的任一任务没有返回 SUCCESS,它会中止所记住的那个 RUNNING 任务。

+

如果某个子任务结果为 FAILURE,返回 FAILURE。

+

如果所有子任务结果都为 SUCCESS,返回 SUCCESS。

+
+
+
+

BTEvaluateExpression

+

继承:BTAction < BTTask < BT

+

在指定的 Node 或 Object 上求值 Expression 的 BT 动作。

+
+

说明

+

BTEvaluateExpression 动作会在指定的 Node 或 Object 实例上求值 expression_string,当 Expression 执行成功时返回 SUCCESS。

+

如果该动作在 Expression 解析或执行期间遇到问题,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

String

expression_string

""

bool

input_include_delta

false

PackedStringArray

input_names

PackedStringArray()

Array[BBVariant]

input_values

[]

BBNode

node

StringName

result_var

&""

+
+
+

方法

+ + + + + + +

Error

parse()

+
+
+
+

属性说明

+

String expression_string = "" 🔗

+
    +
  • void set_expression_string(value: String)

  • +
  • String get_expression_string()

  • +
+

要解析并执行的表达式字符串。

+

警告:更新 expression_string 后请调用 parse 来更新内部的 Expression,因为它不会自动更新。

+
+

bool input_include_delta = false 🔗

+
    +
  • void set_input_include_delta(value: bool)

  • +
  • bool is_input_delta_included()

  • +
+

如果启用,输入变量 delta 会被加入 input_names 和 input_values。

+

警告:切换 input_include_delta 后请调用 parse 来更新内部的 Expression,因为它不会自动更新。

+
+

PackedStringArray input_names = PackedStringArray() 🔗

+
    +
  • void set_input_names(value: PackedStringArray)

  • +
  • PackedStringArray get_input_names()

  • +
+

expression_string 中的变量名列表,用户将通过 input_values 为这些变量提供值。

+

警告:更新 input_names 后请调用 parse 来更新内部的 Expression,因为它不会自动更新。

+

注意:返回的数组是副本,对它的任何修改都不会更新原始属性值。更多细节见 PackedStringArray。

+
+

Array[BBVariant] input_values = [] 🔗

+ +

input_names 中指定变量对应的值列表。这些值通过数组索引与变量一一对应。

+
+

BBNode node 🔗

+
    +
  • void set_node_param(value: BBNode)

  • +
  • BBNode get_node_param()

  • +
+

指定包含要调用方法的 Node 或 Object 实例。

+
+

StringName result_var = &"" 🔗

+
    +
  • void set_result_var(value: StringName)

  • +
  • StringName get_result_var()

  • +
+

如果不为空,则把方法调用的结果赋给该属性指定的黑板变量。

+
+
+
+

方法说明

+

Error parse() 🔗

+

在考虑 input_include_delta 和 input_names 的前提下调用 Expression.parse,并返回其错误码。

+
+
+
+

BTFail

+

继承:BTAction < BTTask < BT

+

总是返回 FAILURE 的 BT 动作。

+
+
+

BTForEach

+

继承:BTDecorator < BTTask < BT

+

针对 Array 的每个元素执行其子任务的 BT 装饰器。

+
+

说明

+

BTForEach 针对 Array 的每个元素执行其子任务。在每次迭代中,当前元素会被存入指定的 Blackboard 变量中。

+

如果子任务结果为 RUNNING,或者子任务在非最后一次迭代中结果为 SUCCESS,则返回 RUNNING。

+

如果子任务结果为 FAILURE,返回 FAILURE。

+

如果子任务在最后一次迭代中结果为 SUCCESS,返回 SUCCESS。

+
+
+

属性

+ + + + + + + + + + + +

StringName

array_var

&""

StringName

save_var

&""

+
+
+
+

属性说明

+

StringName array_var = &"" 🔗

+
    +
  • void set_array_var(value: StringName)

  • +
  • StringName get_array_var()

  • +
+

Blackboard 中存放 Array 的变量,用于迭代过程。

+
+

StringName save_var = &"" 🔗

+
    +
  • void set_save_var(value: StringName)

  • +
  • StringName get_save_var()

  • +
+

用于存储 array_var 所引用数组中某个元素的 Blackboard 变量。

+
+
+
+

BTInstance

+

继承:

+

表示 BehaviorTree 资源的运行时实例。

+
+

说明

+

可以使用 BehaviorTree.instantiate 方法创建。

+
+
+

属性

+ + + + + + + +

bool

monitor_performance

false

+
+
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Node

get_agent() const

Blackboard

get_blackboard() const

Status

get_last_status() const

Node

get_owner_node() const

BTTask

get_root_task() const

String

get_source_bt_path() const

bool

is_instance_valid() const

void

register_with_debugger()

void

unregister_with_debugger()

Status

update(delta: float)

+
+
+
+

信号

+

freed() 🔗

+

当行为树实例被释放时发出。调试器用它来注销实例。

+
+

updated(status: int) 🔗

+

当行为树实例完成更新时发出。

+
+
+
+

属性说明

+

bool monitor_performance = false 🔗

+
    +
  • void set_monitor_performance(value: bool)

  • +
  • bool get_monitor_performance()

  • +
+

如果为 true,会在编辑器的 “Debugger->Monitors” 中为此实例添加一个性能监视器。

+
+
+
+

方法说明

+

Node get_agent() const 🔗

+

返回行为树实例的智能体。

+
+

Blackboard get_blackboard() const 🔗

+

返回行为树实例的黑板。

+
+

Status get_last_status() const 🔗

+

返回上一次更新的执行状态。

+
+

Node get_owner_node() const 🔗

+

返回拥有此行为树实例的场景 Node。

+
+

BTTask get_root_task() const 🔗

+

返回行为树实例的根任务。

+
+

String get_source_bt_path() const 🔗

+

返回用于创建此实例的行为树资源的文件路径。

+
+

bool is_instance_valid() const 🔗

+

如果行为树实例已正确初始化并可以使用,则返回 true。

+
+

void register_with_debugger() 🔗

+

向调试器注册该行为树实例。

+
+

void unregister_with_debugger() 🔗

+

从调试器注销该行为树实例。通常不需要这样做,因为实例被释放时调试器会自动注销它。

+
+

Status update(delta: float) 🔗

+

对行为树实例执行一次 tick 并返回其状态。

+
+
+
+

BTInvert

+

继承:BTDecorator < BTTask < BT

+

把 FAILURE 转换为 SUCCESS、把 SUCCESS 转换为 FAILURE 的 BT 装饰器。

+
+

说明

+

BTInvert 把 FAILURE 转换为 SUCCESS、把 SUCCESS 转换为 FAILURE。

+
+
+
+

BTNewScope

+

继承:BTDecorator < BTTask < BT

+

被继承:BTSubtree

+

创建新 Blackboard 作用域的 BT 装饰器。

+
+

说明

+

BTNewScope 在初始化期间创建一个新的 Blackboard 作用域并向其中填充数据。见 Blackboard。

+

返回子任务的执行状态。

+
+
+

属性

+ + + + + + +

BlackboardPlan

blackboard_plan

+
+
+
+

属性说明

+

BlackboardPlan blackboard_plan 🔗

+ +

存储并管理用于构建新的 Blackboard 实例的变量。

+
+
+
+

BTParallel

+

继承:BTComposite < BTTask < BT

+

同时执行所有子任务的 BT 组合任务。

+
+

说明

+

BTParallel 同时执行其所有子任务。注意 BTParallel 并不涉及多线程:它在同一个 tick 内按顺序从第一个到最后一个处理每个任务,然后返回结果。如果满足任一中止条件,所有当前处于 RUNNING 的任务都会被终止,结果将是 FAILURE 或 SUCCESS 之一。num_failures_required 决定 BTParallel 何时失败,num_successes_required 决定它何时成功。当两者都满足时,它优先考虑 num_failures_required。

+

如果设为 repeat,每个 tick 都会重新执行所有子任务,无论它们之前的结果是 SUCCESS 还是 FAILURE。

+

当所需数量的子任务结果为 FAILURE 时返回 FAILURE。当 repeat 设为 false 时,如果没有满足任何条件,且所有子任务的结果都是 SUCCESS 或 FAILURE,BTParallel 将返回 FAILURE。

+

当所需数量的子任务结果为 SUCCESS 时返回 SUCCESS。

+

如果没有任何条件被满足,并且 repeat 设为 true 或某个子任务结果为 RUNNING,则返回 RUNNING。

+
+
+

属性

+ + + + + + + + + + + + + + + +

int

num_failures_required

1

int

num_successes_required

1

bool

repeat

false

+
+
+
+

属性说明

+

int num_failures_required = 1 🔗

+
    +
  • void set_num_failures_required(value: int)

  • +
  • int get_num_failures_required()

  • +
+

如果有指定数量的子任务返回 FAILURE,BTParallel 也会返回 FAILURE。

+
+

int num_successes_required = 1 🔗

+
    +
  • void set_num_successes_required(value: int)

  • +
  • int get_num_successes_required()

  • +
+

如果有指定数量的子任务返回 SUCCESS,BTParallel 也会返回 SUCCESS。

+
+

bool repeat = false 🔗

+
    +
  • void set_repeat(value: bool)

  • +
  • bool get_repeat()

  • +
+

为 true 时,子任务会被再次执行,无论它们之前的结果是 SUCCESS 还是 FAILURE。

+

为 false 时,如果没有满足任何条件,且所有子任务的结果都是 SUCCESS 或 FAILURE,BTParallel 将返回 FAILURE。

+
+
+
+

BTPauseAnimation

+

继承:BTAction < BTTask < BT

+

暂停指定 AnimationPlayer 节点上动画播放的 BT 动作。

+
+

说明

+

BTPauseAnimation 动作会暂停指定 AnimationPlayer 节点上的动画播放并返回 SUCCESS。

+

如果该动作获取 AnimationPlayer 节点失败,则返回 FAILURE。

+
+
+

属性

+ + + + + + +

BBNode

animation_player

+
+
+
+

属性说明

+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

指定 AnimationPlayer 节点的参数。

+
+
+
+

BTPlayAnimation

+

继承:BTAction < BTTask < BT

+

在指定 AnimationPlayer 节点上播放动画的 BT 动作。

+
+

说明

+

BTPlayAnimation 动作会在指定的 AnimationPlayer 节点上播放动画。如果 await_completion 大于 0,该动作会等待动画完成,最长等待时间等于 await_completion。

+

如果动画播放完毕,或者经过的时间超过 await_completion,则返回 SUCCESS。当 await_completion 设为 0 时,BTPlayAnimation 不会等待动画结束,而是立即返回 SUCCESS。

+

如果动画仍在播放且经过的时间小于 await_completion,则返回 RUNNING。

+

如果该动作播放所请求的动画失败,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

StringName

animation_name

&""

BBNode

animation_player

float

await_completion

0.0

float

blend

-1.0

bool

from_end

false

float

speed

1.0

+
+
+
+

属性说明

+

StringName animation_name = &"" 🔗

+
    +
  • void set_animation_name(value: StringName)

  • +
  • StringName get_animation_name()

  • +
+

动画在 AnimationPlayer 节点中的键名。如果为空,并且 AnimationPlayer 之前被暂停过,BTPlayAnimation 会继续播放上一次播放的动画。

+
+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

指定 AnimationPlayer 节点的参数。

+
+

float await_completion = 0.0 🔗

+
    +
  • void set_await_completion(value: float)

  • +
  • float get_await_completion()

  • +
+

等待动画完成的最长时长(秒)。如果动画在此时间内没有播放完毕,BTPlayAnimation 会停止等待并返回 SUCCESS。

+
+

float blend = -1.0 🔗

+
    +
  • void set_blend(value: float)

  • +
  • float get_blend()

  • +
+

自定义混合时间(秒)。见 AnimationPlayer.play。

+
+

bool from_end = false 🔗

+
    +
  • void set_from_end(value: bool)

  • +
  • bool get_from_end()

  • +
+

从末尾开始播放动画。配合负的 speed 可反向播放动画。见 AnimationPlayer.play。

+
+

float speed = 1.0 🔗

+
    +
  • void set_speed(value: float)

  • +
  • float get_speed()

  • +
+

自定义播放速度缩放比例。见 AnimationPlayer.play。

+
+
+
+

BTProbability

+

继承:BTDecorator < BTTask < BT

+

以给定概率执行其子任务的 BT 装饰器。

+
+

说明

+

BTProbability 以 run_chance 定义的给定概率执行其子任务。

+

如果子任务被执行,返回其结果;否则返回 FAILURE。

+
+
+

属性

+ + + + + + + +

float

run_chance

0.5

+
+
+
+

属性说明

+

float run_chance = 0.5 🔗

+
    +
  • void set_run_chance(value: float)

  • +
  • float get_run_chance()

  • +
+

定义子任务被执行的可能性的概率。

+
+
+
+

BTProbabilitySelector

+

继承:BTComposite < BTTask < BT

+

根据所附加的概率选择要执行的子任务的 BT 组合任务。

+
+

说明

+

BTProbabilitySelector 根据所附加的概率选择要执行的子任务,通常用于决策。概率分布根据分配给每个子任务的权重计算得出。

+

当某个子任务结果为 SUCCESS 时返回 SUCCESS。

+

当某个子任务结果为 RUNNING 时返回 RUNNING。

+

当某个子任务结果为 FAILURE 时,BTProbabilitySelector 的行为取决于 abort_on_failure 的值:

+
    +
  • 如果 abort_on_failure 为 false,当某个子任务结果为 FAILURE 时,BTProbabilitySelector 会在剩余子任务上重新归一化概率分布,并选择一个新的子任务来执行。如果所有子任务都失败,该组合任务将返回 FAILURE。

  • +
  • 如果 abort_on_failure 为 true,当某个子任务结果为 FAILURE 时,BTProbabilitySelector 不会再选择其他子任务执行,而是立即返回 FAILURE。

  • +
+
+
+

属性

+ + + + + + + +

bool

abort_on_failure

false

+
+
+

方法

+ + + + + + + + + + + + + + + + + + + + + +

float

get_probability(child_idx: int) const

float

get_total_weight() const

float

get_weight(child_idx: int) const

bool

has_probability(child_idx: int) const

void

set_probability(child_idx: int, probability: float)

void

set_weight(child_idx: int, weight: float)

+
+
+
+

属性说明

+

bool abort_on_failure = false 🔗

+
    +
  • void set_abort_on_failure(value: bool)

  • +
  • bool get_abort_on_failure()

  • +
+

如果为 true,当某个子任务结果为 FAILURE 时,BTProbabilitySelector 不会再选择其他子任务执行,而是返回 FAILURE。

+
+
+
+

方法说明

+

float get_probability(child_idx: int) const 🔗

+

返回该子任务被选中的概率。

+
+

float get_total_weight() const 🔗

+

返回所有子任务的权重总和。

+
+

float get_weight(child_idx: int) const 🔗

+

返回该子任务在加权概率选择算法中的权重。

+
+

bool has_probability(child_idx: int) const 🔗

+

返回索引为 child_idx 的子任务是否参与加权概率选择算法并分配了概率。对于 BTComment 任务返回 false。

+
+

void set_probability(child_idx: int, probability: float) 🔗

+

根据期望的概率来设置该子任务的权重。

+
+

void set_weight(child_idx: int, weight: float) 🔗

+

为加权概率选择算法设置该子任务的权重。

+
+
+
+

BTRandomSelector

+

继承:BTComposite < BTTask < BT

+

以随机顺序执行任务、直到出现第一个 SUCCESS 的 BT 组合任务。

+
+

说明

+

BTRandomSelector 以随机顺序执行其子任务,直到任一子任务返回 SUCCESS。如果某个子任务结果为 FAILURE,BTRandomSelector 会立即执行另一个子任务,直到其中一个返回 SUCCESS,或者全部结果为 FAILURE。

+

如果某个子任务结果为 RUNNING,返回 RUNNING。BTRandomSelector 会记住执行顺序以及最后一个返回 RUNNING 的子任务,确保在下一个 tick 从该位置继续。

+

如果所有子任务结果都为 FAILURE,返回 FAILURE。

+

如果某个子任务结果为 SUCCESS,返回 SUCCESS。

+
+
+
+

BTRandomSequence

+

继承:BTComposite < BTTask < BT

+

以随机顺序执行任务、只要它们返回 SUCCESS 就继续的 BT 组合任务。

+
+

说明

+

BTRandomSequence 以随机顺序执行其子任务,只要它们返回 SUCCESS 就继续。如果某个子任务结果为 SUCCESS,BTRandomSequence 会立即执行下一个子任务,直到其中一个返回 FAILURE,或者全部结果为 SUCCESS。

+

如果某个子任务结果为 RUNNING,返回 RUNNING。BTRandomSequence 会记住执行顺序以及最后一个返回 RUNNING 的子任务,确保在下一个 tick 从该位置继续。

+

如果某个子任务结果为 FAILURE,返回 FAILURE。

+

如果所有子任务结果都为 SUCCESS,返回 SUCCESS。

+
+
+
+

BTRandomWait

+

继承:BTAction < BTTask < BT

+

等待一段随机时长后返回 SUCCESS 的 BT 动作。

+
+

说明

+

BTRandomWait 动作会等待一段随机时长,然后返回 SUCCESS。该时长在指定的范围内随机取值,范围由 min_duration 和 max_duration 定义。

+
+
+

属性

+ + + + + + + + + + + +

float

max_duration

2.0

float

min_duration

1.0

+
+
+
+

属性说明

+

float max_duration = 2.0 🔗

+
    +
  • void set_max_duration(value: float)

  • +
  • float get_max_duration()

  • +
+

等待的最长时长。

+
+

float min_duration = 1.0 🔗

+
    +
  • void set_min_duration(value: float)

  • +
  • float get_min_duration()

  • +
+

等待的最短时长。

+
+
+
+

BTRepeat

+

继承:BTDecorator < BTTask < BT

+

把其子任务重复指定 times 次的 BT 装饰器。

+
+

说明

+

BTRepeat 会按 times 定义的次数迭代其子任务。如果 forever 为 true,子任务的执行会无限重复。

+

如果子任务结果为 RUNNING,返回 RUNNING。如果 forever 为 true,BTRepeat 总是返回 RUNNING。

+

如果达到指定的成功执行次数,返回 SUCCESS。如果 abort_on_failure 为 false,子任务返回的 FAILURE 状态也被视为一次成功执行。

+

如果子任务结果为 FAILURE 且 abort_on_failure 为 true,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + +

bool

abort_on_failure

false

bool

forever

false

int

times

1

+
+
+
+

属性说明

+

bool abort_on_failure = false 🔗

+
    +
  • void set_abort_on_failure(value: bool)

  • +
  • bool get_abort_on_failure()

  • +
+

如果为 false,子任务返回的 FAILURE 状态也被视为一次成功执行。

+
+

bool forever = false 🔗

+
    +
  • void set_forever(value: bool)

  • +
  • bool get_forever()

  • +
+

如果为 true,子任务的执行会无限重复,并总是返回 RUNNING。

+
+

int times = 1 🔗

+
    +
  • void set_times(value: int)

  • +
  • int get_times()

  • +
+

重复执行子任务的次数。

+
+
+
+

BTRepeatUntilFailure

+

继承:BTDecorator < BTTask < BT

+

重复其子任务直到 FAILURE 的 BT 装饰器。

+
+

说明

+

BTRepeatUntilFailure 重复其子任务,直到结果为 FAILURE。

+

如果子任务结果为 RUNNING 或 SUCCESS,返回 RUNNING。

+

如果子任务结果为 FAILURE,返回 SUCCESS。

+
+
+
+

BTRepeatUntilSuccess

+

继承:BTDecorator < BTTask < BT

+

重复其子任务直到 SUCCESS 的 BT 装饰器。

+
+

说明

+

BTRepeatUntilSuccess 重复其子任务,直到结果为 SUCCESS。

+

如果子任务结果为 RUNNING 或 FAILURE,返回 RUNNING。

+

如果子任务结果为 SUCCESS,返回 SUCCESS。

+
+
+
+

BTRunLimit

+

继承:BTDecorator < BTTask < BT

+

限制其子任务执行次数的 BT 装饰器。

+
+

说明

+

BTRunLimit 把子任务的执行次数限制在 run_limit 定义的最大次数以内。

+

如果执行次数超出限制,返回 FAILURE;否则返回子任务的状态。

+
+
+

属性

+ + + + + + + + + + + +

CountPolicy

count_policy

0

int

run_limit

1

+
+
+
+

枚举

+

enum CountPolicy: 🔗

+

CountPolicy COUNT_SUCCESSFUL = 0

+

只把成功的运行计入限制。

+

CountPolicy COUNT_FAILED = 1

+

只把失败的运行计入限制。

+

CountPolicy COUNT_ALL = 2

+

把成功和失败的运行都计入限制。

+
+
+
+

属性说明

+

CountPolicy count_policy = 0 🔗

+ +

哪些运行应计入限制:成功的、失败的,还是全部?

+
+

int run_limit = 1 🔗

+
    +
  • void set_run_limit(value: int)

  • +
  • int get_run_limit()

  • +
+

允许子任务执行的最大次数。

+
+
+
+

BTSelector

+

继承:BTComposite < BTTask < BT

+

顺序执行任务、直到出现第一个 SUCCESS 的 BT 组合任务。

+
+

说明

+

BTSelector 按顺序从第一个到最后一个执行子任务,直到任一子任务返回 SUCCESS。如果某个子任务结果为 FAILURE,BTSelector 会立即执行下一个子任务,直到其中一个返回 SUCCESS,或者全部返回 FAILURE。BTSelector 与 BTSequence 是行为树中最常见的两种积木块。本质上,BTSequence 类似布尔 AND 运算,而 BTSelector 类似布尔 OR 运算。选择器让行为树能够响应环境变化,并在各种后备行为之间触发转换。

+

如果某个子任务结果为 RUNNING,返回 RUNNING。BTSelector 会记住最后一个返回 RUNNING 的子任务,确保在下一个执行 tick 从该位置继续。

+

如果某个子任务结果为 SUCCESS,返回 SUCCESS。

+

如果所有子任务结果都为 FAILURE,返回 FAILURE。

+
+
+
+

BTSequence

+

继承:BTComposite < BTTask < BT

+

顺序执行任务、只要它们返回 SUCCESS 就继续的 BT 组合任务。

+
+

说明

+

BTSequence 按顺序从第一个到最后一个执行子任务,只要它们返回 SUCCESS 就继续。如果某个子任务结果为 SUCCESS,BTSequence 会立即执行下一个子任务,直到其中一个返回 FAILURE,或者全部返回 SUCCESS。BTSequence 与 BTSelector 是行为树中最常见的两种积木块。本质上,BTSelector 类似布尔 OR 运算,而 BTSequence 类似布尔 AND 运算。序列让行为树能够把一串更简单的任务组合成复杂行为。

+

如果任一子任务结果为 RUNNING,返回 RUNNING。BTSequence 会记住最后一个返回 RUNNING 的子任务,确保在下一个执行 tick 从该位置继续。

+

如果所有子任务结果都为 SUCCESS,返回 SUCCESS。

+

如果某个子任务结果为 FAILURE,返回 FAILURE。

+
+
+
+

BTSetAgentProperty

+

继承:BTAction < BTTask < BT

+

为指定的智能体属性赋值的 BT 动作。

+
+

说明

+

BTSetAgentProperty 把指定的 value 赋给由 property 标识的智能体属性并返回 SUCCESS。可选地,它可以在赋值之前执行特定的 operation。

+

如果设置该属性失败,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + +

Operation

operation

0

StringName

property

&""

BBVariant

value

+
+
+
+

属性说明

+

Operation operation = 0 🔗

+ +

指定赋值之前要执行的操作。操作的执行方式如下:

+

property = property OPERATION value

+
+

StringName property = &"" 🔗

+
    +
  • void set_property(value: StringName)

  • +
  • StringName get_property()

  • +
+

指定智能体属性名的参数。

+
+

BBVariant value 🔗

+ +

指定将要赋给智能体属性的值的参数。

+
+
+
+

BTSetVar

+

继承:BTAction < BTTask < BT

+

把 value 赋给 variable,然后返回 SUCCESS 的 BT 动作。

+
+

说明

+

BTSetVar 把 value 赋给 variable,然后返回 SUCCESS。可选地,它可以在赋值之前执行特定的 operation。

+

如果设置 variable 失败,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + +

Operation

operation

0

BBVariant

value

StringName

variable

&""

+
+
+
+

属性说明

+

Operation operation = 0 🔗

+ +

指定赋值之前要执行的操作。操作的执行方式如下:

+

variable = variable OPERATION value

+
+

BBVariant value 🔗

+ +

指定将要赋给该变量的值的参数。

+
+

StringName variable = &"" 🔗

+
    +
  • void set_variable(value: StringName)

  • +
  • StringName get_variable()

  • +
+

将要被赋值的变量名。

+
+
+
+

BTStopAnimation

+

继承:BTAction < BTTask < BT

+

停止指定 AnimationPlayer 节点上动画播放的 BT 动作。

+
+

说明

+

BTStopAnimation 动作会停止指定 AnimationPlayer 节点上的动画播放并返回 SUCCESS。如果设置了 animation_name,则只有当指定动画正在播放时才会停止播放。

+

如果该动作获取 AnimationPlayer 节点失败,则返回 FAILURE。

+
+
+

属性

+ + + + + + + + + + + + + + + +

StringName

animation_name

&""

BBNode

animation_player

bool

keep_state

false

+
+
+
+

属性说明

+

StringName animation_name = &"" 🔗

+
    +
  • void set_animation_name(value: StringName)

  • +
  • StringName get_animation_name()

  • +
+

动画在 AnimationPlayer 节点中的键名。如果不为空,则只有当指定动画正在播放时 BTStopAnimation 才会停止播放。

+
+

BBNode animation_player 🔗

+
    +
  • void set_animation_player(value: BBNode)

  • +
  • BBNode get_animation_player()

  • +
+

指定 AnimationPlayer 节点的参数。

+
+

bool keep_state = false 🔗

+
    +
  • void set_keep_state(value: bool)

  • +
  • bool get_keep_state()

  • +
+

如果为 true,动画状态不会在视觉上被更新。

+
+
+
+

BTSubtree

+

继承:BTNewScope < BTDecorator < BTTask < BT

+

在更大的树中实例化并运行子树的 BT 装饰器。

+
+

说明

+

BTSubtree 会实例化一个 BehaviorTree,在初始化期间把它的根任务作为子任务加入,同时创建一个新的 Blackboard 作用域。

+

返回子树执行的状态。

+

子树的黑板变量可以映射到主树黑板计划的变量。请查看检视面板中的映射(mapping)部分。

+

注意:BTSubTree 被设计为一个更简单的加载器,不支持在运行时更新 subtree。自定义的子树装饰器更适合这种需求:

+
extends BTDecorator
+## MyCustomBranch
+
+func _setup() -> void:
+    var bt: BehaviorTree = load("res://...")
+    var my_branch: BTTask = bt.get_root_task().clone()
+    my_branch.initialize(agent, blackboard)
+    add_child(my_branch)
+
+func _tick(delta) -> Status:
+    var child: BTTask = get_child(0)
+    return child.execute(delta)
+
+
+

这样 BehaviorTree 就能从黑板中的某个变量或其他位置加载指定的行为树,并在运行时使用那棵新的行为树。

+
+
+

属性

+ + + + + + +

BehaviorTree

subtree

+
+
+
+

属性说明

+

BehaviorTree subtree 🔗

+ +

将被实例化为子树的 BehaviorTree 资源。

+
+
+
+

BTTimeLimit

+

继承:BTDecorator < BTTask < BT

+

为其子任务执行设置时间限制的 BT 装饰器。

+
+

说明

+

BTTimeLimit 为子任务的执行分配有限的时间;如果超过 time_limit,它会中止子任务并返回 FAILURE。

+

如果超过 time_limit,返回 FAILURE;否则返回子任务的状态。

+
+
+

属性

+ + + + + + + +

float

time_limit

5.0

+
+
+
+

属性说明

+

float time_limit = 5.0 🔗

+
    +
  • void set_time_limit(value: float)

  • +
  • float get_time_limit()

  • +
+

分配给子任务执行的时间。

+
+
+
+

BTWait

+

继承:BTAction < BTTask < BT

+

等待指定 duration 时间后返回 SUCCESS 的 BT 动作。

+
+

属性

+ + + + + + + +

float

duration

1.0

+
+
+
+

属性说明

+

float duration = 1.0 🔗

+
    +
  • void set_duration(value: float)

  • +
  • float get_duration()

  • +
+
+

该属性目前还没有描述。欢迎贡献一份描述!

+
+
+
+
+

BTWaitTicks

+

继承:BTAction < BTTask < BT

+

等待指定数量的 tick 后返回 SUCCESS 的 BT 动作。

+
+

属性

+ + + + + + + +

int

num_ticks

1

+
+
+
+

属性说明

+

int num_ticks = 1 🔗

+
    +
  • void set_num_ticks(value: int)

  • +
  • int get_num_ticks()

  • +
+

返回 SUCCESS 之前需要等待的 tick 数。

+
+
+
+

LimboUtility

+

继承:

+

LimboAI 的辅助函数。

+
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

String

decorate_output_var(variable: String) const

String

decorate_var(variable: String) const

String

get_check_operator_string(check: CheckType) const

String

get_operation_string(operation: Operation) const

String

get_status_name(status: int) const

Texture2D

get_task_icon(class_or_script_path: String) const

bool

perform_check(check: CheckType, a: Variant, b: Variant)

Variant

perform_operation(operation: Operation, a: Variant, b: Variant)

+
+
+
+

枚举

+

enum CheckType: 🔗

+

CheckType CHECK_EQUAL = 0

+

相等性检查。

+

CheckType CHECK_LESS_THAN = 1

+

小于检查。

+

CheckType CHECK_LESS_THAN_OR_EQUAL = 2

+

小于或等于检查。

+

CheckType CHECK_GREATER_THAN = 3

+

大于检查。

+

CheckType CHECK_GREATER_THAN_OR_EQUAL = 4

+

大于或等于检查。

+

CheckType CHECK_NOT_EQUAL = 5

+

不等性检查。

+
+

enum Operation: 🔗

+

Operation OPERATION_NONE = 0

+

无操作。

+

Operation OPERATION_ADDITION = 1

+

算术加法。

+

Operation OPERATION_SUBTRACTION = 2

+

算术减法。

+

Operation OPERATION_MULTIPLICATION = 3

+

算术乘法。

+

Operation OPERATION_DIVISION = 4

+

算术除法。

+

Operation OPERATION_MODULO = 5

+

取整数除法的余数。

+

Operation OPERATION_POWER = 6

+

把 a 自乘 b 次。

+

Operation OPERATION_BIT_SHIFT_LEFT = 7

+

按位左移。

+

Operation OPERATION_BIT_SHIFT_RIGHT = 8

+

按位右移。

+

Operation OPERATION_BIT_AND = 9

+

按位与。

+

Operation OPERATION_BIT_OR = 10

+

按位或。

+

Operation OPERATION_BIT_XOR = 11

+

按位异或。

+
+
+
+

方法说明

+

String decorate_output_var(variable: String) const 🔗

+

与 decorate_var 类似,生成一个经格式化、用于显示的 Blackboard 变量名字符串,并额外添加一个符号来表明该变量被用作输出。

+
+

String decorate_var(variable: String) const 🔗

+

生成一个经格式化、适合显示或控制台输出的 Blackboard 变量名字符串。

+
+

String get_check_operator_string(check: CheckType) const 🔗

+

返回 CheckType 枚举值对应的运算符字符串。例如,CHECK_EQUAL 返回 “==”。

+
+

String get_operation_string(operation: Operation) const 🔗

+

返回 Operation 枚举值的字符串表示。

+
+

String get_status_name(status: int) const 🔗

+

返回 BTTask 状态码的名称。

+
+

Texture2D get_task_icon(class_or_script_path: String) const 🔗

+

根据任务的类名或脚本资源路径,返回与之关联的图标纹理。

+
+

bool perform_check(check: CheckType, a: Variant, b: Variant) 🔗

+

对两个值 a 和 b 执行 check,如果检查通过则返回 true。

+
+

Variant perform_operation(operation: Operation, a: Variant, b: Variant) 🔗

+

对两个值 a 和 b 执行 operation,并返回结果。

+
+
+
+
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/docs/limboai-stable/objects.inv b/docs/limboai-stable/objects.inv new file mode 100644 index 0000000..59644ba Binary files /dev/null and b/docs/limboai-stable/objects.inv differ